├── .editorconfig ├── .env ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── PULL_REQUEST_TEMPLATE.md ├── renovate.json5 ├── stale.yml └── workflows │ ├── codeql-analysis.yml │ ├── delete-launchermeta-branch.yml │ ├── gradle-release.yml │ ├── gradle.yml │ └── prbranch.yml ├── .gitignore ├── .idea ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── copyright │ ├── CloudNet.xml │ └── profiles_settings.xml └── inspectionProfiles │ ├── CloudNet.xml │ └── profiles_settings.xml ├── .img ├── header.png └── logo.png ├── .template ├── start.bat ├── start.command └── start.sh ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── LICENSE_HEADER ├── README.md ├── bom └── build.gradle.kts ├── build-extensions ├── build.gradle.kts └── src │ └── main │ └── kotlin │ ├── Files.kt │ ├── Versions.kt │ ├── cloudnet.parent-build-logic.gradle.kts │ ├── extensions.kt │ ├── publishing-extensions.kt │ └── updater-extensions.kt ├── build.gradle.kts ├── checkstyle.xml ├── crowdin.yml ├── docker-compose.yml ├── driver ├── ap │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── driver │ │ │ └── ap │ │ │ ├── registry │ │ │ ├── AutoServiceMapping.java │ │ │ └── AutoServiceProcessor.java │ │ │ └── util │ │ │ └── ProcessingUtil.java │ │ └── resources │ │ └── META-INF │ │ └── services │ │ └── javax.annotation.processing.Processor ├── api │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── driver │ │ │ ├── CloudNetVersion.java │ │ │ ├── ComponentInfo.java │ │ │ ├── DriverEnvironment.java │ │ │ ├── base │ │ │ ├── JavaVersion.java │ │ │ └── Named.java │ │ │ ├── channel │ │ │ ├── ChannelMessage.java │ │ │ ├── ChannelMessageSender.java │ │ │ └── ChannelMessageTarget.java │ │ │ ├── cluster │ │ │ ├── NetworkCluster.java │ │ │ ├── NetworkClusterNode.java │ │ │ └── NodeInfoSnapshot.java │ │ │ ├── command │ │ │ └── CommandInfo.java │ │ │ ├── database │ │ │ ├── Database.java │ │ │ └── DatabaseProvider.java │ │ │ ├── document │ │ │ ├── Document.java │ │ │ ├── DocumentFactory.java │ │ │ ├── DocumentParseException.java │ │ │ ├── DocumentSerialisationException.java │ │ │ ├── SerialisationStyle.java │ │ │ ├── StandardSerialisationStyle.java │ │ │ ├── annotations │ │ │ │ ├── DocumentFieldRename.java │ │ │ │ └── DocumentValueIgnore.java │ │ │ ├── property │ │ │ │ ├── DefaultedDocPropertyHolder.java │ │ │ │ ├── DefaultingDocProperty.java │ │ │ │ ├── DocProperty.java │ │ │ │ ├── DocPropertyHolder.java │ │ │ │ ├── ReadOnlyDocProperty.java │ │ │ │ ├── RewritingDocProperty.java │ │ │ │ └── StandardDocProperty.java │ │ │ └── send │ │ │ │ ├── DocumentSend.java │ │ │ │ ├── ElementVisitor.java │ │ │ │ └── element │ │ │ │ ├── ArrayElement.java │ │ │ │ ├── Element.java │ │ │ │ ├── NullElement.java │ │ │ │ ├── ObjectElement.java │ │ │ │ └── PrimitiveElement.java │ │ │ ├── event │ │ │ ├── Cancelable.java │ │ │ ├── Event.java │ │ │ ├── EventListener.java │ │ │ ├── EventListenerException.java │ │ │ ├── EventManager.java │ │ │ ├── InvocationOrder.java │ │ │ ├── RegisteredEventListener.java │ │ │ └── events │ │ │ │ ├── channel │ │ │ │ └── ChannelMessageReceiveEvent.java │ │ │ │ ├── group │ │ │ │ ├── GroupConfigurationAddEvent.java │ │ │ │ ├── GroupConfigurationEvent.java │ │ │ │ └── GroupConfigurationRemoveEvent.java │ │ │ │ ├── module │ │ │ │ ├── ModuleEvent.java │ │ │ │ ├── ModulePostInstallDependencyEvent.java │ │ │ │ ├── ModulePostLoadEvent.java │ │ │ │ ├── ModulePostReloadEvent.java │ │ │ │ ├── ModulePostStartEvent.java │ │ │ │ ├── ModulePostStopEvent.java │ │ │ │ ├── ModulePostUnloadEvent.java │ │ │ │ ├── ModulePreInstallDependencyEvent.java │ │ │ │ ├── ModulePreLoadEvent.java │ │ │ │ ├── ModulePreReloadEvent.java │ │ │ │ ├── ModulePreStartEvent.java │ │ │ │ ├── ModulePreStopEvent.java │ │ │ │ ├── ModulePreUnloadEvent.java │ │ │ │ └── UnloadedModuleEvent.java │ │ │ │ ├── network │ │ │ │ ├── ChannelType.java │ │ │ │ ├── NetworkChannelCloseEvent.java │ │ │ │ ├── NetworkChannelInitEvent.java │ │ │ │ └── NetworkEvent.java │ │ │ │ ├── service │ │ │ │ ├── CloudServiceDeferredStateEvent.java │ │ │ │ ├── CloudServiceEvent.java │ │ │ │ ├── CloudServiceLifecycleChangeEvent.java │ │ │ │ ├── CloudServiceLogEntryEvent.java │ │ │ │ └── CloudServiceUpdateEvent.java │ │ │ │ └── task │ │ │ │ ├── ServiceTaskAddEvent.java │ │ │ │ ├── ServiceTaskEvent.java │ │ │ │ └── ServiceTaskRemoveEvent.java │ │ │ ├── inject │ │ │ ├── BootLayerConfigurator.java │ │ │ ├── DefaultInjectionLayer.java │ │ │ ├── InjectUtil.java │ │ │ ├── InjectionLayer.java │ │ │ ├── InjectionLayerHolder.java │ │ │ ├── InjectionLayerProvider.java │ │ │ ├── InjectionLayerRegistry.java │ │ │ ├── NamedImpl.java │ │ │ └── UncloseableInjectionLayer.java │ │ │ ├── language │ │ │ ├── I18n.java │ │ │ ├── PropertiesTranslationProvider.java │ │ │ └── TranslationProvider.java │ │ │ ├── module │ │ │ ├── DefaultModule.java │ │ │ ├── Module.java │ │ │ ├── ModuleConfiguration.java │ │ │ ├── ModuleConfigurationNotFoundException.java │ │ │ ├── ModuleDependency.java │ │ │ ├── ModuleDependencyLoader.java │ │ │ ├── ModuleDependencyNotFoundException.java │ │ │ ├── ModuleDependencyOutdatedException.java │ │ │ ├── ModuleLifeCycle.java │ │ │ ├── ModuleProvider.java │ │ │ ├── ModuleProviderHandler.java │ │ │ ├── ModuleRepository.java │ │ │ ├── ModuleTask.java │ │ │ ├── ModuleTaskEntry.java │ │ │ ├── ModuleWrapper.java │ │ │ └── driver │ │ │ │ ├── DriverModule.java │ │ │ │ └── ModuleConfigurationInvalidException.java │ │ │ ├── network │ │ │ ├── HostAndPort.java │ │ │ ├── NetworkChannel.java │ │ │ ├── NetworkChannelHandler.java │ │ │ ├── NetworkClient.java │ │ │ ├── NetworkComponent.java │ │ │ ├── NetworkServer.java │ │ │ ├── buffer │ │ │ │ ├── DataBuf.java │ │ │ │ ├── DataBufFactory.java │ │ │ │ └── DataBufable.java │ │ │ ├── chunk │ │ │ │ ├── ChunkSessionInformation.java │ │ │ │ ├── ChunkedFileQueryBuilder.java │ │ │ │ ├── ChunkedPacketHandler.java │ │ │ │ ├── ChunkedPacketProvider.java │ │ │ │ ├── ChunkedPacketSender.java │ │ │ │ ├── TransferStatus.java │ │ │ │ └── event │ │ │ │ │ ├── ChunkedPacketSessionOpenEvent.java │ │ │ │ │ ├── EventChunkHandlerFactory.java │ │ │ │ │ └── FileQueryRequestEvent.java │ │ │ ├── object │ │ │ │ ├── ObjectMapper.java │ │ │ │ └── ObjectSerializer.java │ │ │ ├── protocol │ │ │ │ ├── BasePacket.java │ │ │ │ ├── EmptyPacket.java │ │ │ │ ├── Packet.java │ │ │ │ ├── PacketListener.java │ │ │ │ ├── PacketListenerRegistry.java │ │ │ │ ├── PacketSender.java │ │ │ │ └── QueryPacketManager.java │ │ │ ├── rpc │ │ │ │ ├── ChainableRPC.java │ │ │ │ ├── RPC.java │ │ │ │ ├── RPCChain.java │ │ │ │ ├── RPCExecutable.java │ │ │ │ ├── RPCProvider.java │ │ │ │ ├── RPCSender.java │ │ │ │ ├── annotation │ │ │ │ │ ├── RPCChained.java │ │ │ │ │ ├── RPCFieldGetter.java │ │ │ │ │ ├── RPCIgnore.java │ │ │ │ │ ├── RPCInvocationTarget.java │ │ │ │ │ ├── RPCNoResult.java │ │ │ │ │ └── RPCTimeout.java │ │ │ │ ├── exception │ │ │ │ │ ├── MissingObjectSerializerException.java │ │ │ │ │ ├── RPCException.java │ │ │ │ │ └── RPCExecutionException.java │ │ │ │ ├── factory │ │ │ │ │ ├── RPCFactory.java │ │ │ │ │ └── RPCImplementationBuilder.java │ │ │ │ ├── handler │ │ │ │ │ ├── RPCHandler.java │ │ │ │ │ ├── RPCHandlerRegistry.java │ │ │ │ │ ├── RPCInvocationContext.java │ │ │ │ │ └── RPCInvocationResult.java │ │ │ │ └── introspec │ │ │ │ │ └── RPCMethodMetadata.java │ │ │ └── ssl │ │ │ │ └── SSLConfiguration.java │ │ │ ├── provider │ │ │ ├── CloudMessenger.java │ │ │ ├── CloudServiceFactory.java │ │ │ ├── CloudServiceProvider.java │ │ │ ├── ClusterNodeProvider.java │ │ │ ├── GroupConfigurationProvider.java │ │ │ ├── ServiceTaskProvider.java │ │ │ └── SpecificCloudServiceProvider.java │ │ │ ├── registry │ │ │ ├── AutoService.java │ │ │ ├── Service.java │ │ │ ├── ServiceRegistry.java │ │ │ ├── ServiceRegistryHolder.java │ │ │ └── ServiceRegistryRegistration.java │ │ │ ├── service │ │ │ ├── GroupConfiguration.java │ │ │ ├── ProcessConfiguration.java │ │ │ ├── ProcessSnapshot.java │ │ │ ├── ServiceConfiguration.java │ │ │ ├── ServiceConfigurationBase.java │ │ │ ├── ServiceCreateResult.java │ │ │ ├── ServiceCreateRetryConfiguration.java │ │ │ ├── ServiceDeployment.java │ │ │ ├── ServiceEnvironment.java │ │ │ ├── ServiceEnvironmentType.java │ │ │ ├── ServiceId.java │ │ │ ├── ServiceInfoSnapshot.java │ │ │ ├── ServiceLifeCycle.java │ │ │ ├── ServiceRemoteInclusion.java │ │ │ ├── ServiceTask.java │ │ │ ├── ServiceTemplate.java │ │ │ └── ThreadSnapshot.java │ │ │ └── template │ │ │ ├── FileInfo.java │ │ │ ├── TemplateStorage.java │ │ │ └── TemplateStorageProvider.java │ │ └── test │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── driver │ │ └── base │ │ └── JavaVersionTest.java ├── build.gradle.kts └── impl │ ├── build.gradle.kts │ └── src │ ├── main │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── driver │ │ │ └── impl │ │ │ ├── document │ │ │ ├── empty │ │ │ │ ├── EmptyDocument.java │ │ │ │ ├── EmptyDocumentFactory.java │ │ │ │ └── EmptyDocumentSend.java │ │ │ └── gson │ │ │ │ ├── DelegateTypeAdapterFactory.java │ │ │ │ ├── DocumentTypeAdapter.java │ │ │ │ ├── DurationTypeAdapter.java │ │ │ │ ├── GsonDocumentExclusionStrategy.java │ │ │ │ ├── GsonDocumentFactory.java │ │ │ │ ├── GsonDocumentFieldNamingStrategy.java │ │ │ │ ├── GsonProvider.java │ │ │ │ ├── ImmutableGsonDocument.java │ │ │ │ ├── MutableGsonDocument.java │ │ │ │ ├── PathTypeAdapter.java │ │ │ │ ├── PatternTypeAdapter.java │ │ │ │ ├── TimeTypeAdapter.java │ │ │ │ └── send │ │ │ │ ├── GsonArrayVisitor.java │ │ │ │ ├── GsonDocumentSend.java │ │ │ │ ├── GsonObjectVisitor.java │ │ │ │ ├── GsonPrimitiveConverter.java │ │ │ │ └── GsonRootObjectVisitor.java │ │ │ ├── event │ │ │ ├── DefaultEventManager.java │ │ │ └── DefaultRegisteredEventListener.java │ │ │ ├── language │ │ │ └── DefaultI18n.java │ │ │ ├── module │ │ │ ├── DefaultModuleDependencyLoader.java │ │ │ ├── DefaultModuleProvider.java │ │ │ ├── DefaultModuleProviderHandler.java │ │ │ ├── DefaultModuleTaskEntry.java │ │ │ ├── DefaultModuleWrapper.java │ │ │ ├── ModuleDependencyUtil.java │ │ │ ├── ModuleHelper.java │ │ │ └── ModuleURLClassLoader.java │ │ │ ├── network │ │ │ ├── DefaultNetworkChannel.java │ │ │ ├── NetworkConstants.java │ │ │ ├── chunk │ │ │ │ ├── ChunkedSessionRegistry.java │ │ │ │ ├── DefaultChunkedPacketProvider.java │ │ │ │ ├── DefaultFileChunkPacketSender.java │ │ │ │ ├── DefaultFileChunkedPacketHandler.java │ │ │ │ ├── builder │ │ │ │ │ ├── DefaultChunkedFileQueryBuilder.java │ │ │ │ │ └── DefaultChunkedPacketSenderBuilder.java │ │ │ │ ├── network │ │ │ │ │ ├── ChunkedPacket.java │ │ │ │ │ └── ChunkedPacketListener.java │ │ │ │ └── splitter │ │ │ │ │ └── NetworkChannelsPacketSplitter.java │ │ │ ├── netty │ │ │ │ ├── NettyNetworkChannel.java │ │ │ │ ├── NettyNetworkHandler.java │ │ │ │ ├── NettyOptionSettingChannelInitializer.java │ │ │ │ ├── NettyTransport.java │ │ │ │ ├── NettyUtil.java │ │ │ │ ├── buffer │ │ │ │ │ ├── NettyDataBufFactory.java │ │ │ │ │ ├── NettyImmutableDataBuf.java │ │ │ │ │ └── NettyMutableDataBuf.java │ │ │ │ ├── client │ │ │ │ │ ├── NettyNetworkClient.java │ │ │ │ │ ├── NettyNetworkClientHandler.java │ │ │ │ │ └── NettyNetworkClientInitializer.java │ │ │ │ ├── codec │ │ │ │ │ ├── NettyPacketDecoder.java │ │ │ │ │ ├── NettyPacketEncoder.java │ │ │ │ │ ├── VarInt32FrameDecoder.java │ │ │ │ │ └── VarInt32FramePrepender.java │ │ │ │ └── server │ │ │ │ │ ├── NettyNetworkServer.java │ │ │ │ │ ├── NettyNetworkServerHandler.java │ │ │ │ │ └── NettyNetworkServerInitializer.java │ │ │ ├── object │ │ │ │ ├── DefaultObjectMapper.java │ │ │ │ ├── ObjectMapperInjectRegistration.java │ │ │ │ ├── data │ │ │ │ │ ├── AllocationStatistic.java │ │ │ │ │ ├── DataClassCodec.java │ │ │ │ │ ├── DataClassCodecGenerator.java │ │ │ │ │ └── DataClassSerializer.java │ │ │ │ └── serializers │ │ │ │ │ ├── CollectionObjectSerializer.java │ │ │ │ │ ├── DataBufObjectSerializer.java │ │ │ │ │ ├── DataBufableObjectSerializer.java │ │ │ │ │ ├── DocumentObjectSerializer.java │ │ │ │ │ ├── EnumObjectSerializer.java │ │ │ │ │ ├── FunctionalObjectSerializer.java │ │ │ │ │ ├── MapObjectSerializer.java │ │ │ │ │ ├── OptionalObjectSerializer.java │ │ │ │ │ ├── PathObjectSerializer.java │ │ │ │ │ ├── PatternObjectSerializer.java │ │ │ │ │ ├── TimeObjectSerializer.java │ │ │ │ │ └── UUIDObjectSerializer.java │ │ │ ├── protocol │ │ │ │ ├── DefaultPacketListenerRegistry.java │ │ │ │ └── DefaultQueryPacketManager.java │ │ │ ├── rpc │ │ │ │ ├── DefaultRPCFactory.java │ │ │ │ ├── DefaultRPCProvider.java │ │ │ │ ├── RPCRequestPacket.java │ │ │ │ ├── generation │ │ │ │ │ ├── BasicRPCMethodGenerator.java │ │ │ │ │ ├── ChainedRPCMethodGenerator.java │ │ │ │ │ ├── DefaultRPCImplementationBuilder.java │ │ │ │ │ ├── RPCGenerationCache.java │ │ │ │ │ ├── RPCGenerationConstants.java │ │ │ │ │ ├── RPCGenerationContext.java │ │ │ │ │ ├── RPCImplementationGenerator.java │ │ │ │ │ ├── RPCInternalInstanceFactory.java │ │ │ │ │ └── RPCMethodGenerator.java │ │ │ │ ├── handler │ │ │ │ │ ├── DefaultRPCHandler.java │ │ │ │ │ ├── DefaultRPCHandlerBuilder.java │ │ │ │ │ ├── DefaultRPCHandlerRegistry.java │ │ │ │ │ ├── DefaultRPCInvocationContext.java │ │ │ │ │ ├── invoker │ │ │ │ │ │ ├── MethodInvoker.java │ │ │ │ │ │ └── MethodInvokerGenerator.java │ │ │ │ │ └── util │ │ │ │ │ │ └── RPCExceptionUtil.java │ │ │ │ ├── introspec │ │ │ │ │ ├── DefaultRPCMethodMetadata.java │ │ │ │ │ └── RPCClassMetadata.java │ │ │ │ ├── listener │ │ │ │ │ └── RPCPacketListener.java │ │ │ │ ├── rpc │ │ │ │ │ ├── DefaultRPC.java │ │ │ │ │ ├── DefaultRPCChain.java │ │ │ │ │ └── RPCResultMapper.java │ │ │ │ └── sender │ │ │ │ │ ├── DefaultRPCSender.java │ │ │ │ │ └── DefaultRPCSenderBuilder.java │ │ │ ├── scheduler │ │ │ │ ├── FallbackRejectionHandler.java │ │ │ │ ├── NetworkTaskScheduler.java │ │ │ │ ├── ScalingNetworkTaskScheduler.java │ │ │ │ ├── TaskSchedulingAction.java │ │ │ │ └── TimedSynchronousQueue.java │ │ │ └── standard │ │ │ │ ├── AuthorizationPacket.java │ │ │ │ └── ChannelMessagePacket.java │ │ │ ├── registry │ │ │ ├── AutoServiceMapping.java │ │ │ ├── DefaultServiceRegistry.java │ │ │ ├── FixedInstanceServiceRegistration.java │ │ │ ├── NewInstanceServiceRegistration.java │ │ │ ├── ProxiedServiceRegistration.java │ │ │ ├── ServiceAnnotationInjectConfigurator.java │ │ │ └── ServiceRegistrationsBinding.java │ │ │ └── template │ │ │ └── RemoteTemplateStorage.java │ └── resources │ │ └── META-INF │ │ └── services │ │ └── eu.cloudnetservice.driver.inject.BootLayerConfigurator │ └── test │ └── java │ └── eu │ └── cloudnetservice │ └── driver │ └── impl │ ├── document │ ├── DocumentPropertyTest.java │ ├── DocumentSerialisationTest.java │ ├── DocumentTest.java │ ├── DocumentValueTestClass.java │ └── gson │ │ └── JavaTimeSerializerTest.java │ ├── event │ └── DefaultEventManagerTest.java │ ├── junit │ ├── EnableServicesInject.java │ └── EnableServicesInjectExtension.java │ ├── language │ └── I18nTest.java │ ├── module │ └── ModuleDependencyUtilTest.java │ ├── network │ ├── HostAndPortTest.java │ ├── NetworkTestCase.java │ ├── chunk │ │ └── ChunkedPacketSenderTest.java │ ├── netty │ │ ├── NettyTransportTest.java │ │ ├── NettyUtilTest.java │ │ ├── codec │ │ │ └── NettyPacketCodecTest.java │ │ └── communication │ │ │ └── NettyNetworkServerClientTest.java │ ├── protocol │ │ ├── DefaultPacketListenerRegistryTest.java │ │ └── DefaultQueryPacketManagerTest.java │ ├── rpc │ │ ├── RPCSenderTest.java │ │ ├── generation │ │ │ ├── api │ │ │ │ ├── BaseDatabase.java │ │ │ │ ├── RPCImplementationGeneratorTest.java │ │ │ │ ├── SenderNeedingDatabase.java │ │ │ │ └── TestRPCParameters.java │ │ │ └── chain │ │ │ │ └── RPCChainImplementationGeneratorTest.java │ │ ├── handler │ │ │ ├── RPCNetworkHandlingTest.java │ │ │ └── RPCPacketListenerTest.java │ │ ├── object │ │ │ ├── AllPrimitiveTypesDataClass.java │ │ │ ├── DefaultObjectMapperTest.java │ │ │ └── ObjectWithSpecialGetter.java │ │ └── registry │ │ │ └── DefaultRPCHandlerRegistryTest.java │ └── scheduler │ │ └── ScalingNetworkTaskSchedulerTest.java │ └── registry │ └── ServiceRegistryTest.java ├── ext ├── adventure-helper │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── ext │ │ │ ├── adventure │ │ │ └── AdventureTextFormatLookup.java │ │ │ ├── bungee │ │ │ └── BungeeComponentUtil.java │ │ │ └── component │ │ │ ├── AdventureComponentFormat.java │ │ │ ├── BungeeComponentFormat.java │ │ │ ├── ComponentConverter.java │ │ │ ├── ComponentFormat.java │ │ │ ├── ComponentFormats.java │ │ │ ├── JavaEditionComponentFormat.java │ │ │ └── MappingConverter.java │ │ └── test │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── ext │ │ ├── adventure │ │ └── AdventureTextFormatLookupTest.java │ │ └── component │ │ └── ComponentFormatsTest.java ├── build.gradle.kts ├── bukkit-command │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── ext │ │ └── bukkitcommands │ │ └── BaseTabExecutor.java ├── modlauncher │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── ext │ │ │ └── modlauncher │ │ │ └── CloudNetLaunchPluginService.java │ │ └── resources │ │ └── META-INF │ │ └── services │ │ └── cpw.mods.modlauncher.serviceapi.ILaunchPluginService ├── platform-inject-support │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── ext │ │ │ └── platforminject │ │ │ ├── api │ │ │ ├── PlatformEntrypoint.java │ │ │ ├── PlatformPluginInfo.java │ │ │ ├── PlatformPluginManager.java │ │ │ ├── data │ │ │ │ ├── ParsedPluginData.java │ │ │ │ └── PluginDataParser.java │ │ │ ├── defaults │ │ │ │ ├── BasePlatformPluginManager.java │ │ │ │ └── DefaultPlatformPluginInfo.java │ │ │ ├── generator │ │ │ │ ├── PlatformMainClassGenerator.java │ │ │ │ └── PluginInfoGenerator.java │ │ │ ├── inject │ │ │ │ └── BindingsInstaller.java │ │ │ ├── mapping │ │ │ │ ├── Container.java │ │ │ │ └── PlatformedContainer.java │ │ │ ├── registry │ │ │ │ └── PlatformManagerRegistryHolder.java │ │ │ ├── spi │ │ │ │ ├── PlatformDataGeneratorProvider.java │ │ │ │ ├── PlatformPluginManagerProvider.java │ │ │ │ └── PlatformPluginManagerRegistry.java │ │ │ ├── stereotype │ │ │ │ ├── Command.java │ │ │ │ ├── ConstructionListener.java │ │ │ │ ├── Dependency.java │ │ │ │ ├── ExternalDependency.java │ │ │ │ ├── PlatformPlugin.java │ │ │ │ ├── ProvidesFor.java │ │ │ │ └── Repository.java │ │ │ └── util │ │ │ │ ├── FunctionalUtil.java │ │ │ │ └── PluginUtil.java │ │ │ └── loader │ │ │ └── PlatformInjectSupportLoader.java │ ├── build.gradle.kts │ ├── loader │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── ext │ │ │ └── platforminject │ │ │ └── loader │ │ │ ├── JarInJarClassLoader.java │ │ │ ├── PlatformInjectLoaderLazy.java │ │ │ └── PlatformInjectSupportLoader.java │ ├── processor │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── eu │ │ │ │ └── cloudnetservice │ │ │ │ └── ext │ │ │ │ └── platforminject │ │ │ │ └── processor │ │ │ │ ├── BindingClassGenerator.java │ │ │ │ ├── PlatformPluginProcessor.java │ │ │ │ ├── classgen │ │ │ │ ├── BaseMainClassGenerator.java │ │ │ │ ├── JavapoetMainClassGenerator.java │ │ │ │ └── MethodBasedMainClassGenerator.java │ │ │ │ ├── id │ │ │ │ ├── AllowedCharRange.java │ │ │ │ ├── CharRange.java │ │ │ │ └── PluginIdGenerator.java │ │ │ │ ├── infogen │ │ │ │ └── NightConfigInfoGenerator.java │ │ │ │ ├── platform │ │ │ │ ├── bukkit │ │ │ │ │ ├── BukkitMainClassGenerator.java │ │ │ │ │ ├── BukkitPlatformInfoProvider.java │ │ │ │ │ └── BukkitPluginInfoGenerator.java │ │ │ │ ├── bungeecord │ │ │ │ │ ├── BungeeCordMainClassGenerator.java │ │ │ │ │ ├── BungeeCordPlatformInfoProvider.java │ │ │ │ │ └── BungeeCordPluginInfoGenerator.java │ │ │ │ ├── fabric │ │ │ │ │ ├── FabricMainClassGenerator.java │ │ │ │ │ ├── FabricPlatformInfoProvider.java │ │ │ │ │ └── FabricPluginInfoGenerator.java │ │ │ │ ├── limboloohp │ │ │ │ │ ├── LimboLoohpMainClassGenerator.java │ │ │ │ │ ├── LimboLoohpPlatformInfoProvider.java │ │ │ │ │ └── LimboLoohpPluginInfoGenerator.java │ │ │ │ ├── minestom │ │ │ │ │ ├── MinestomMainClassGenerator.java │ │ │ │ │ ├── MinestomPlatformInfoProvider.java │ │ │ │ │ └── MinestomPluginInfoGenerator.java │ │ │ │ ├── nukkit │ │ │ │ │ ├── NukkitMainClassGenerator.java │ │ │ │ │ ├── NukkitPlatformInfoProvider.java │ │ │ │ │ └── NukkitPluginInfoGenerator.java │ │ │ │ ├── sponge │ │ │ │ │ ├── SpongeMainClassGenerator.java │ │ │ │ │ ├── SpongePlatformInfoProvider.java │ │ │ │ │ └── SpongePluginInfoGenerator.java │ │ │ │ ├── velocity │ │ │ │ │ ├── VelocityMainClassGenerator.java │ │ │ │ │ ├── VelocityPlatformInfoProvider.java │ │ │ │ │ └── VelocityPluginInfoGenerator.java │ │ │ │ └── waterdog │ │ │ │ │ ├── WaterDogMainClassGenerator.java │ │ │ │ │ ├── WaterDogPlatformInfoProvider.java │ │ │ │ │ └── WaterDogPluginInfoGenerator.java │ │ │ │ └── util │ │ │ │ ├── ConfigUtil.java │ │ │ │ ├── GeantyrefUtil.java │ │ │ │ ├── PatternUtil.java │ │ │ │ ├── ResourceUtil.java │ │ │ │ └── TypeUtil.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ ├── gradle │ │ │ └── incremental.annotation.processors │ │ │ └── services │ │ │ ├── eu.cloudnetservice.ext.platforminject.api.spi.PlatformDataGeneratorProvider │ │ │ └── javax.annotation.processing.Processor │ └── runtime │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── ext │ │ │ └── platforminject │ │ │ └── runtime │ │ │ ├── DefaultPlatformPluginManagerRegistry.java │ │ │ ├── platform │ │ │ ├── bukkit │ │ │ │ ├── BukkitPlatformManagerProvider.java │ │ │ │ └── BukkitPlatformPluginManager.java │ │ │ ├── bungeecord │ │ │ │ ├── BungeeCordPlatformManagerProvider.java │ │ │ │ └── BungeeCordPlatformPluginManager.java │ │ │ ├── fabric │ │ │ │ ├── FabricPlatformManagerProvider.java │ │ │ │ └── FabricPlatformPluginManager.java │ │ │ ├── limboloohp │ │ │ │ ├── LimboLoohpPlatformManagerProvider.java │ │ │ │ └── LimboLoohpPlatformPluginManager.java │ │ │ ├── minestom │ │ │ │ ├── MinestomPlatformManagerProvider.java │ │ │ │ └── MinestomPlatformPluginManager.java │ │ │ ├── nukkit │ │ │ │ ├── NukkitPlatformManagerProvider.java │ │ │ │ └── NukkitPlatformPluginManager.java │ │ │ ├── sponge │ │ │ │ ├── SpongePlatformManagerProvider.java │ │ │ │ └── SpongePlatformPluginManager.java │ │ │ ├── velocity │ │ │ │ ├── VelocityPlatformManagerProvider.java │ │ │ │ └── VelocityPlatformPluginManager.java │ │ │ └── waterdog │ │ │ │ ├── WaterDogPlatformManagerProvider.java │ │ │ │ └── WaterDogPlatformPluginManager.java │ │ │ └── util │ │ │ └── LazyClassInstantiationUtil.java │ │ └── resources │ │ └── META-INF │ │ └── services │ │ ├── eu.cloudnetservice.ext.platforminject.api.spi.PlatformPluginManagerProvider │ │ └── eu.cloudnetservice.ext.platforminject.api.spi.PlatformPluginManagerRegistry └── updater │ ├── build.gradle.kts │ └── src │ └── main │ └── java │ └── eu │ └── cloudnetservice │ └── ext │ └── updater │ ├── Updater.java │ ├── UpdaterRegistry.java │ ├── defaults │ └── DefaultUpdaterRegistry.java │ └── util │ ├── ChecksumUtil.java │ └── GitHubUtil.java ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── launcher ├── build.gradle.kts ├── java22 │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ ├── java │ │ │ └── eu │ │ │ │ └── cloudnetservice │ │ │ │ └── launcher │ │ │ │ └── java22 │ │ │ │ ├── ApplicationBootstrap.java │ │ │ │ ├── ApplicationLock.java │ │ │ │ ├── CloudNetLauncher.java │ │ │ │ ├── cnl │ │ │ │ ├── CnlCommand.java │ │ │ │ ├── CnlInterpreter.java │ │ │ │ └── defaults │ │ │ │ │ └── VarCnlCommand.java │ │ │ │ ├── dependency │ │ │ │ ├── Dependency.java │ │ │ │ ├── DependencyHelper.java │ │ │ │ └── Repository.java │ │ │ │ ├── updater │ │ │ │ ├── LauncherUpdaterContext.java │ │ │ │ ├── LauncherUpdaterRegistry.java │ │ │ │ ├── updaters │ │ │ │ │ ├── LauncherChecksumsFileUpdater.java │ │ │ │ │ ├── LauncherCloudNetUpdater.java │ │ │ │ │ ├── LauncherModuleJsonUpdater.java │ │ │ │ │ ├── LauncherPatcherUpdater.java │ │ │ │ │ └── LauncherUpdater.java │ │ │ │ └── util │ │ │ │ │ └── FileDownloadUpdateHelper.java │ │ │ │ └── util │ │ │ │ ├── BootstrapUtil.java │ │ │ │ ├── CommandLineHelper.java │ │ │ │ ├── Environment.java │ │ │ │ └── HttpUtil.java │ │ └── resources │ │ │ └── launcher.cnl │ │ └── test │ │ └── resources │ │ └── test.cnl ├── java8 │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── launcher │ │ └── java8 │ │ └── Launcher.java └── patcher │ ├── build.gradle.kts │ └── src │ └── main │ └── java │ └── eu │ └── cloudnetservice │ └── launcher │ └── patcher │ └── CloudNetLauncherPatcher.java ├── modules.json ├── modules ├── bridge │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── bridge │ │ │ ├── BridgeDocProperties.java │ │ │ ├── BridgeManagement.java │ │ │ ├── BridgeServiceHelper.java │ │ │ ├── WorldPosition.java │ │ │ ├── config │ │ │ ├── BridgeConfiguration.java │ │ │ ├── ProxyFallback.java │ │ │ └── ProxyFallbackConfiguration.java │ │ │ ├── event │ │ │ ├── BridgeConfigurationUpdateEvent.java │ │ │ ├── BridgeDeleteCloudOfflinePlayerEvent.java │ │ │ ├── BridgeProxyPlayerDisconnectEvent.java │ │ │ ├── BridgeProxyPlayerLoginEvent.java │ │ │ ├── BridgeProxyPlayerServerSwitchEvent.java │ │ │ ├── BridgeServerPlayerDisconnectEvent.java │ │ │ ├── BridgeServerPlayerLoginEvent.java │ │ │ ├── BridgeUpdateCloudOfflinePlayerEvent.java │ │ │ └── BridgeUpdateCloudPlayerEvent.java │ │ │ ├── node │ │ │ └── event │ │ │ │ └── LocalPlayerPreLoginEvent.java │ │ │ └── player │ │ │ ├── CloudOfflinePlayer.java │ │ │ ├── CloudPlayer.java │ │ │ ├── NetworkPlayerProxyInfo.java │ │ │ ├── NetworkPlayerServerInfo.java │ │ │ ├── NetworkServiceInfo.java │ │ │ ├── PlayerManager.java │ │ │ ├── PlayerProvider.java │ │ │ ├── ServicePlayer.java │ │ │ └── executor │ │ │ ├── PlayerExecutor.java │ │ │ └── ServerSelectorType.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── bridge │ │ │ └── impl │ │ │ ├── InternalBridgeManagement.java │ │ │ ├── node │ │ │ ├── CloudNetBridgeModule.java │ │ │ ├── NodeBridgeManagement.java │ │ │ ├── command │ │ │ │ ├── BridgeCommand.java │ │ │ │ └── PlayersCommand.java │ │ │ ├── listener │ │ │ │ ├── BridgeLocalProxyPlayerDisconnectListener.java │ │ │ │ └── NodeSetupListener.java │ │ │ ├── network │ │ │ │ ├── NodeBridgeChannelMessageListener.java │ │ │ │ └── NodePlayerChannelMessageListener.java │ │ │ └── player │ │ │ │ ├── NodePlayerExecutor.java │ │ │ │ ├── NodePlayerManager.java │ │ │ │ └── NodePlayerProvider.java │ │ │ ├── platform │ │ │ ├── PlatformBridgeManagement.java │ │ │ ├── PlatformPlayerExecutor.java │ │ │ ├── PlatformPlayerExecutorAdapter.java │ │ │ ├── PlatformPlayerManager.java │ │ │ ├── bukkit │ │ │ │ ├── BukkitBridgeManagement.java │ │ │ │ ├── BukkitBridgePlugin.java │ │ │ │ ├── BukkitDirectPlayerExecutor.java │ │ │ │ ├── BukkitPlayerManagementListener.java │ │ │ │ └── BukkitUtil.java │ │ │ ├── bungeecord │ │ │ │ ├── BungeeCordBridgeManagement.java │ │ │ │ ├── BungeeCordBridgePlugin.java │ │ │ │ ├── BungeeCordDirectPlayerExecutor.java │ │ │ │ ├── BungeeCordHelper.java │ │ │ │ ├── BungeeCordPlayerManagementListener.java │ │ │ │ └── command │ │ │ │ │ ├── BungeeCordCloudCommand.java │ │ │ │ │ ├── BungeeCordFakeReloadCommand.java │ │ │ │ │ └── BungeeCordHubCommand.java │ │ │ ├── fabric │ │ │ │ ├── FabricBridgeInitializer.java │ │ │ │ ├── FabricBridgeManagement.java │ │ │ │ ├── FabricDirectPlayerExecutor.java │ │ │ │ ├── access │ │ │ │ │ └── CustomPayloadAccessor.java │ │ │ │ ├── mixin │ │ │ │ │ ├── forwarding │ │ │ │ │ │ ├── ClientIntentionPacketMixin.java │ │ │ │ │ │ ├── CompressionThresholdMixin.java │ │ │ │ │ │ ├── ServerHandshakePacketListenerMixin.java │ │ │ │ │ │ └── ServerLoginPacketListenerMixin.java │ │ │ │ │ ├── handling │ │ │ │ │ │ ├── MinecraftServerMixin.java │ │ │ │ │ │ └── PlayerListMixin.java │ │ │ │ │ └── payload │ │ │ │ │ │ └── CustomPayloadMixin.java │ │ │ │ └── util │ │ │ │ │ ├── BridgedServer.java │ │ │ │ │ └── FabricInjectionHolder.java │ │ │ ├── fallback │ │ │ │ └── FallbackProfile.java │ │ │ ├── helper │ │ │ │ ├── ProxyPlatformHelper.java │ │ │ │ └── ServerPlatformHelper.java │ │ │ ├── limboloohp │ │ │ │ ├── LimboLoohpBridgeManagement.java │ │ │ │ ├── LimboLoohpBridgePlugin.java │ │ │ │ ├── LimboLoohpDirectPlayerExecutor.java │ │ │ │ └── LimboLoohpPlayerManagementListener.java │ │ │ ├── listener │ │ │ │ ├── PlatformChannelMessageListener.java │ │ │ │ └── PlatformInformationListener.java │ │ │ ├── minestom │ │ │ │ ├── MinestomBridgeExtension.java │ │ │ │ ├── MinestomBridgeManagement.java │ │ │ │ ├── MinestomDefaultPermissionChecker.java │ │ │ │ ├── MinestomDirectPlayerExecutor.java │ │ │ │ ├── MinestomPermissionChecker.java │ │ │ │ └── MinestomPlayerManagementListener.java │ │ │ ├── nukkit │ │ │ │ ├── NukkitBridgeManagement.java │ │ │ │ ├── NukkitBridgePlugin.java │ │ │ │ ├── NukkitDirectPlayerExecutor.java │ │ │ │ └── NukkitPlayerManagementListener.java │ │ │ ├── sponge │ │ │ │ ├── SpongeAddressAccessor.java │ │ │ │ ├── SpongeBridgeManagement.java │ │ │ │ ├── SpongeBridgePlugin.java │ │ │ │ ├── SpongeDirectPlayerExecutor.java │ │ │ │ └── SpongePlayerManagementListener.java │ │ │ ├── velocity │ │ │ │ ├── VelocityBridgeManagement.java │ │ │ │ ├── VelocityBridgePlugin.java │ │ │ │ ├── VelocityDirectPlayerExecutor.java │ │ │ │ ├── VelocityPlayerManagementListener.java │ │ │ │ └── commands │ │ │ │ │ ├── VelocityCloudCommand.java │ │ │ │ │ └── VelocityHubCommand.java │ │ │ └── waterdog │ │ │ │ ├── WaterDogPEBridgeManagement.java │ │ │ │ ├── WaterDogPEBridgePlugin.java │ │ │ │ ├── WaterDogPEDirectPlayerExecutor.java │ │ │ │ ├── WaterDogPEHandlers.java │ │ │ │ ├── WaterDogPEPlayerManagementListener.java │ │ │ │ └── command │ │ │ │ ├── WaterDogPECloudCommand.java │ │ │ │ └── WaterDogPEHubCommand.java │ │ │ ├── rpc │ │ │ ├── ComponentObjectSerializer.java │ │ │ └── TitleObjectSerializer.java │ │ │ └── util │ │ │ └── BridgeHostAndPortUtil.java │ │ └── resources │ │ ├── META-INF │ │ └── sponge_plugins.json.template │ │ ├── cloudnet_bridge.accesswidener │ │ ├── cloudnet_bridge.mixins.json │ │ └── fabric.mod.json.template ├── build.gradle.kts ├── cloudflare │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── cloudflare │ │ │ └── config │ │ │ ├── CloudflareConfiguration.java │ │ │ ├── CloudflareConfigurationEntry.java │ │ │ └── CloudflareGroupConfiguration.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── cloudflare │ │ └── impl │ │ ├── CloudNetCloudflareModule.java │ │ ├── cloudflare │ │ ├── CloudFlareRecordManager.java │ │ └── DnsRecordDetail.java │ │ ├── dns │ │ ├── DnsRecord.java │ │ ├── DnsType.java │ │ └── SrvRecord.java │ │ └── listener │ │ └── CloudflareServiceStateListener.java ├── database-mongodb │ ├── api │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── mongodb │ │ │ └── config │ │ │ └── MongoDBConnectionConfig.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── mongodb │ │ │ └── impl │ │ │ ├── CloudNetMongoDatabaseModule.java │ │ │ ├── MongoDBDatabase.java │ │ │ └── MongoDBDatabaseProvider.java │ │ └── test │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── mongodb │ │ │ ├── MongoDBDatabaseTest.java │ │ │ └── junit │ │ │ ├── EnableServicesInject.java │ │ │ └── EnableServicesInjectExtension.java │ │ └── resources │ │ └── logback-test.xml ├── database-mysql │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── mysql │ │ │ └── config │ │ │ ├── MySQLConfiguration.java │ │ │ └── MySQLConnectionEndpoint.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── mysql │ │ │ └── impl │ │ │ ├── CloudNetMySQLDatabaseModule.java │ │ │ ├── MySQLDatabase.java │ │ │ └── MySQLDatabaseProvider.java │ │ └── test │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── mysql │ │ │ └── impl │ │ │ ├── MySQLDatabaseTest.java │ │ │ └── junit │ │ │ ├── EnableServicesInject.java │ │ │ └── EnableServicesInjectExtension.java │ │ └── resources │ │ └── logback-test.xml ├── dockerized-services │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── eu │ │ │ │ └── cloudnetservice │ │ │ │ └── modules │ │ │ │ └── docker │ │ │ │ └── config │ │ │ │ ├── DockerConfiguration.java │ │ │ │ ├── DockerImage.java │ │ │ │ ├── DockerPortMapping.java │ │ │ │ └── TaskDockerConfig.java │ │ │ └── test │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── docker │ │ │ └── config │ │ │ └── DockerImageTest.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── docker │ │ └── impl │ │ ├── DockerCommand.java │ │ ├── DockerizedLocalCloudServiceFactory.java │ │ ├── DockerizedService.java │ │ ├── DockerizedServiceLogCache.java │ │ └── DockerizedServicesModule.java ├── influx │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── influx │ │ │ ├── InfluxConfiguration.java │ │ │ └── publish │ │ │ └── Publisher.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── influx │ │ └── impl │ │ ├── InfluxModule.java │ │ ├── publishers │ │ ├── ConnectedNodeInfoPublisher.java │ │ └── RunningServiceProcessSnapshotPublisher.java │ │ └── util │ │ └── PointUtil.java ├── labymod │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── labymod │ │ │ ├── LabyModManagement.java │ │ │ └── config │ │ │ ├── LabyModBanner.java │ │ │ ├── LabyModConfiguration.java │ │ │ ├── LabyModPermissions.java │ │ │ └── LabyModServiceDisplay.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── labymod │ │ └── impl │ │ ├── node │ │ ├── CloudNetLabyModModule.java │ │ ├── NodeLabyModListener.java │ │ └── NodeLabyModManagement.java │ │ └── platform │ │ ├── PlatformLabyModListener.java │ │ ├── PlatformLabyModManagement.java │ │ ├── bungeecord │ │ ├── BungeeCordLabyModListener.java │ │ └── BungeeCordLabyModPlugin.java │ │ └── velocity │ │ ├── VelocityLabyModListener.java │ │ └── VelocityLabyModPlugin.java ├── npcs │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── npc │ │ │ ├── NPC.java │ │ │ ├── NPCManagement.java │ │ │ ├── configuration │ │ │ ├── InventoryConfiguration.java │ │ │ ├── ItemLayout.java │ │ │ ├── LabyModEmoteConfiguration.java │ │ │ ├── NPCConfiguration.java │ │ │ ├── NPCConfigurationEntry.java │ │ │ └── NPCPoolOptions.java │ │ │ └── platform │ │ │ └── PlatformSelectorEntity.java │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── npc │ │ └── impl │ │ ├── AbstractNPCManagement.java │ │ ├── InternalNPCManagement.java │ │ ├── SharedChannelMessageListener.java │ │ ├── _deprecated │ │ ├── CloudNPC.java │ │ ├── NPCAction.java │ │ ├── NPCConstants.java │ │ ├── configuration │ │ │ ├── NPCConfiguration.java │ │ │ └── NPCConfigurationEntry.java │ │ └── package-info.java │ │ ├── node │ │ ├── CloudNetNPCModule.java │ │ ├── NPCCommand.java │ │ ├── NodeNPCManagement.java │ │ └── listeners │ │ │ ├── NodeChannelMessageListener.java │ │ │ └── NodeSetupListener.java │ │ └── platform │ │ ├── CloudNetServiceListener.java │ │ ├── PlatformNPCManagement.java │ │ └── bukkit │ │ ├── BukkitNPCPlugin.java │ │ ├── BukkitPlatformNPCManagement.java │ │ ├── command │ │ └── NPCCommand.java │ │ ├── entity │ │ ├── BukkitPlatformSelectorEntity.java │ │ ├── EntityBukkitPlatformSelectorEntity.java │ │ └── NPCBukkitPlatformSelector.java │ │ ├── listener │ │ ├── BukkitEntityProtectionListener.java │ │ ├── BukkitFunctionalityListener.java │ │ └── BukkitWorldListener.java │ │ └── util │ │ └── ReflectionUtil.java ├── report │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── report │ │ │ └── config │ │ │ ├── PasteServer.java │ │ │ └── ReportConfiguration.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── report │ │ │ └── impl │ │ │ ├── CloudNetReportModule.java │ │ │ ├── command │ │ │ └── ReportCommand.java │ │ │ ├── emitter │ │ │ ├── EmitterService.java │ │ │ ├── ReportDataEmitter.java │ │ │ ├── ReportDataWriter.java │ │ │ ├── SpecificReportDataEmitter.java │ │ │ └── defaults │ │ │ │ ├── GroupConfigDataEmitter.java │ │ │ │ ├── HeapDumpDataEmitter.java │ │ │ │ ├── LocalModuleDataEmitter.java │ │ │ │ ├── LocalNodeConfigDataEmitter.java │ │ │ │ ├── NodeServerDataEmitter.java │ │ │ │ ├── ServiceInfoDataEmitter.java │ │ │ │ ├── ServiceTasksDataEmitter.java │ │ │ │ ├── SystemInfoDataEmitter.java │ │ │ │ └── ThreadInfoDataEmitter.java │ │ │ └── util │ │ │ └── ReportConstants.java │ │ └── test │ │ └── resources │ │ └── logback-test.xml ├── signs │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── signs │ │ │ ├── Sign.java │ │ │ ├── SignManagement.java │ │ │ └── configuration │ │ │ ├── SignConfigurationEntry.java │ │ │ ├── SignGroupConfiguration.java │ │ │ ├── SignLayout.java │ │ │ ├── SignLayoutsHolder.java │ │ │ └── SignsConfiguration.java │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── signs │ │ │ └── impl │ │ │ ├── AbstractSignManagement.java │ │ │ ├── InternalSignManagement.java │ │ │ ├── SharedChannelMessageListener.java │ │ │ ├── _deprecated │ │ │ ├── Sign.java │ │ │ ├── SignConstants.java │ │ │ ├── SignLayout.java │ │ │ ├── configuration │ │ │ │ ├── SignConfiguration.java │ │ │ │ ├── SignConfigurationReaderAndWriter.java │ │ │ │ └── entry │ │ │ │ │ ├── SignConfigurationEntry.java │ │ │ │ │ ├── SignConfigurationEntryType.java │ │ │ │ │ ├── SignConfigurationTaskEntry.java │ │ │ │ │ └── SignLayoutConfiguration.java │ │ │ └── package-info.java │ │ │ ├── node │ │ │ ├── CloudNetSignsModule.java │ │ │ ├── NodeSignManagement.java │ │ │ ├── NodeSignsListener.java │ │ │ ├── SignCommand.java │ │ │ ├── configuration │ │ │ │ ├── NodeSignsConfigurationHelper.java │ │ │ │ └── SignConfigurationType.java │ │ │ └── util │ │ │ │ └── SignEntryTaskSetup.java │ │ │ ├── platform │ │ │ ├── PlatformSign.java │ │ │ ├── PlatformSignManagement.java │ │ │ ├── SignsPlatformListener.java │ │ │ ├── bukkit │ │ │ │ ├── BukkitCompatibility.java │ │ │ │ ├── BukkitPlatformSign.java │ │ │ │ ├── BukkitSignManagement.java │ │ │ │ ├── BukkitSignsPlugin.java │ │ │ │ ├── event │ │ │ │ │ └── BukkitCloudSignInteractEvent.java │ │ │ │ └── functionality │ │ │ │ │ ├── SignInteractListener.java │ │ │ │ │ └── SignsCommand.java │ │ │ ├── minestom │ │ │ │ ├── MinestomPlatformSign.java │ │ │ │ ├── MinestomSignBlockHandler.java │ │ │ │ ├── MinestomSignManagement.java │ │ │ │ ├── MinestomSignsExtension.java │ │ │ │ ├── event │ │ │ │ │ └── MinestomCloudSignInteractEvent.java │ │ │ │ └── functionality │ │ │ │ │ ├── SignInteractListener.java │ │ │ │ │ └── SignsCommand.java │ │ │ ├── nukkit │ │ │ │ ├── NukkitPlatformSign.java │ │ │ │ ├── NukkitSignManagement.java │ │ │ │ ├── NukkitSignsPlugin.java │ │ │ │ ├── event │ │ │ │ │ └── NukkitCloudSignInteractEvent.java │ │ │ │ └── functionality │ │ │ │ │ ├── SignInteractListener.java │ │ │ │ │ └── SignsCommand.java │ │ │ └── sponge │ │ │ │ ├── CommandRegistrationListener.java │ │ │ │ ├── SpongePlatformSign.java │ │ │ │ ├── SpongeSignManagement.java │ │ │ │ ├── SpongeSignsPlugin.java │ │ │ │ ├── event │ │ │ │ └── SpongeCloudSignInteractEvent.java │ │ │ │ └── functionality │ │ │ │ ├── SignInteractListener.java │ │ │ │ └── SignsCommand.java │ │ │ └── util │ │ │ ├── LayoutUtil.java │ │ │ └── PriorityUtil.java │ │ └── resources │ │ └── META-INF │ │ └── sponge_plugins.json.template ├── smart │ ├── api │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── smart │ │ │ └── SmartServiceTaskConfig.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── smart │ │ └── impl │ │ ├── CloudNetSmartModule.java │ │ ├── SmartCommand.java │ │ ├── listener │ │ ├── CloudNetLocalServiceListener.java │ │ ├── CloudNetLocalServiceTaskListener.java │ │ └── CloudNetTickListener.java │ │ └── util │ │ └── SmartUtil.java ├── storage-s3 │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── s3 │ │ │ └── config │ │ │ └── S3TemplateStorageConfig.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── s3 │ │ │ └── impl │ │ │ ├── S3TemplateStorage.java │ │ │ └── S3TemplateStorageModule.java │ │ └── test │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── s3 │ │ │ └── S3TemplateStorageTest.java │ │ └── resources │ │ └── logback-test.xml ├── storage-sftp │ ├── api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── sftp │ │ │ └── config │ │ │ └── SFTPTemplateStorageConfig.java │ ├── build.gradle.kts │ └── impl │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── sftp │ │ │ └── impl │ │ │ ├── SFTPClientPool.java │ │ │ ├── SFTPTemplateStorage.java │ │ │ ├── SFTPTemplateStorageModule.java │ │ │ └── sshj │ │ │ ├── ActiveHeartbeatKeepAliveProvider.java │ │ │ └── FilteringLocalFileSource.java │ │ └── test │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── modules │ │ │ └── sftp │ │ │ └── impl │ │ │ └── SFTPTemplateStorageTest.java │ │ └── resources │ │ ├── hostkey.pem │ │ └── logback-test.xml └── syncproxy │ ├── api │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── syncproxy │ │ ├── SyncProxyConfigurationUpdateEvent.java │ │ ├── SyncProxyConstants.java │ │ ├── SyncProxyManagement.java │ │ └── config │ │ ├── SyncProxyConfiguration.java │ │ ├── SyncProxyLoginConfiguration.java │ │ ├── SyncProxyMotd.java │ │ ├── SyncProxyTabList.java │ │ └── SyncProxyTabListConfiguration.java │ ├── build.gradle.kts │ └── impl │ ├── build.gradle.kts │ └── src │ ├── main │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── modules │ │ └── syncproxy │ │ └── impl │ │ ├── node │ │ ├── CloudNetSyncProxyModule.java │ │ ├── NodeSyncProxyManagement.java │ │ ├── command │ │ │ └── SyncProxyCommand.java │ │ └── listener │ │ │ └── NodeSyncProxyChannelMessageListener.java │ │ └── platform │ │ ├── PlatformSyncProxyManagement.java │ │ ├── bungee │ │ ├── BungeeCordSyncProxyListener.java │ │ ├── BungeeCordSyncProxyManagement.java │ │ └── BungeeCordSyncProxyPlugin.java │ │ ├── listener │ │ └── SyncProxyCloudListener.java │ │ ├── velocity │ │ ├── VelocitySyncProxyListener.java │ │ ├── VelocitySyncProxyManagement.java │ │ └── VelocitySyncProxyPlugin.java │ │ └── waterdog │ │ ├── WaterDogPESyncProxyListener.java │ │ ├── WaterDogPESyncProxyManagement.java │ │ └── WaterDogPESyncProxyPlugin.java │ └── test │ └── resources │ └── logback-test.xml ├── node ├── api │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── node │ │ ├── cluster │ │ ├── LocalNodeServer.java │ │ ├── NodeServer.java │ │ ├── NodeServerProvider.java │ │ ├── NodeServerState.java │ │ └── sync │ │ │ ├── DataSyncHandler.java │ │ │ └── DataSyncRegistry.java │ │ ├── command │ │ ├── CommandProvider.java │ │ ├── annotation │ │ │ ├── CommandAlias.java │ │ │ ├── Description.java │ │ │ ├── Documentation.java │ │ │ └── EnableConfirmSkipFlag.java │ │ ├── exception │ │ │ └── ArgumentNotAvailableException.java │ │ └── source │ │ │ └── CommandSource.java │ │ ├── config │ │ └── Configuration.java │ │ ├── database │ │ └── LocalDatabase.java │ │ ├── event │ │ ├── CloudNetNodePostInitializationEvent.java │ │ ├── cluster │ │ │ ├── LocalNodeSnapshotConfigureEvent.java │ │ │ └── NetworkClusterNodeInfoUpdateEvent.java │ │ ├── command │ │ │ ├── CommandInvalidSyntaxEvent.java │ │ │ ├── CommandNotFoundEvent.java │ │ │ ├── CommandPostProcessEvent.java │ │ │ ├── CommandPreProcessEvent.java │ │ │ └── CommandProcessEvent.java │ │ ├── group │ │ │ ├── LocalGroupConfigurationAddEvent.java │ │ │ └── LocalGroupConfigurationRemoveEvent.java │ │ ├── instance │ │ │ ├── CloudNetTickEvent.java │ │ │ └── CloudNetTickServiceStartEvent.java │ │ ├── network │ │ │ ├── NetworkClusterNodeAuthSuccessEvent.java │ │ │ ├── NetworkClusterNodeReconnectEvent.java │ │ │ └── NetworkServiceAuthSuccessEvent.java │ │ ├── service │ │ │ ├── CloudServiceConfigurationPrePrepareEvent.java │ │ │ ├── CloudServiceCreateEvent.java │ │ │ ├── CloudServiceDeploymentEvent.java │ │ │ ├── CloudServiceEvent.java │ │ │ ├── CloudServiceNodeSelectEvent.java │ │ │ ├── CloudServicePostLifecycleEvent.java │ │ │ ├── CloudServicePostPrepareEvent.java │ │ │ ├── CloudServicePostProcessStartEvent.java │ │ │ ├── CloudServicePreForceStopEvent.java │ │ │ ├── CloudServicePreLifecycleEvent.java │ │ │ ├── CloudServicePreLoadInclusionEvent.java │ │ │ ├── CloudServicePrePrepareEvent.java │ │ │ ├── CloudServicePreProcessStartEvent.java │ │ │ └── CloudServiceTemplateLoadEvent.java │ │ ├── task │ │ │ ├── LocalServiceTaskAddEvent.java │ │ │ └── LocalServiceTaskRemoveEvent.java │ │ └── template │ │ │ └── ServiceTemplateInstallEvent.java │ │ ├── service │ │ ├── CloudService.java │ │ ├── CloudServiceManager.java │ │ ├── LocalCloudServiceFactory.java │ │ ├── ServiceConfigurationPreparer.java │ │ ├── ServiceConsoleLineHandler.java │ │ └── ServiceConsoleLogCache.java │ │ └── tick │ │ ├── Scheduler.java │ │ ├── ShutdownHandler.java │ │ └── TickLoop.java ├── build.gradle.kts └── impl │ ├── build.gradle.kts │ └── src │ ├── main │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── node │ │ │ └── impl │ │ │ ├── Node.java │ │ │ ├── boot │ │ │ ├── BootFactories.java │ │ │ └── Bootstrap.java │ │ │ ├── cluster │ │ │ ├── defaults │ │ │ │ ├── DefaultLocalNodeServer.java │ │ │ │ ├── DefaultNodeServerProvider.java │ │ │ │ └── RemoteNodeServer.java │ │ │ ├── sync │ │ │ │ ├── DefaultDataSyncHandler.java │ │ │ │ ├── DefaultDataSyncRegistry.java │ │ │ │ └── prettyprint │ │ │ │ │ ├── GulfArrayDiffPrinter.java │ │ │ │ │ ├── GulfHelper.java │ │ │ │ │ ├── GulfMapDiffPrinter.java │ │ │ │ │ └── GulfPrettyPrint.java │ │ │ ├── task │ │ │ │ ├── LocalNodeUpdateTask.java │ │ │ │ └── NodeDisconnectTrackerTask.java │ │ │ └── util │ │ │ │ ├── NodeDisconnectHandler.java │ │ │ │ └── QueuedNetworkChannel.java │ │ │ ├── command │ │ │ ├── defaults │ │ │ │ ├── AerogelInjectionService.java │ │ │ │ ├── DefaultCaptionHandler.java │ │ │ │ ├── DefaultCommandManager.java │ │ │ │ ├── DefaultCommandPostProcessor.java │ │ │ │ ├── DefaultCommandPreProcessor.java │ │ │ │ ├── DefaultCommandProvider.java │ │ │ │ └── DefaultSuggestionProcessor.java │ │ │ ├── exception │ │ │ │ └── CommandExceptionHandler.java │ │ │ ├── source │ │ │ │ ├── ConsoleCommandSource.java │ │ │ │ └── DriverCommandSource.java │ │ │ └── sub │ │ │ │ ├── ClearCommand.java │ │ │ │ ├── ClusterCommand.java │ │ │ │ ├── ConfigCommand.java │ │ │ │ ├── CreateCommand.java │ │ │ │ ├── DevCommand.java │ │ │ │ ├── ExitCommand.java │ │ │ │ ├── GroupsCommand.java │ │ │ │ ├── HelpCommand.java │ │ │ │ ├── MeCommand.java │ │ │ │ ├── MigrateCommand.java │ │ │ │ ├── ModulesCommand.java │ │ │ │ ├── ServiceCommand.java │ │ │ │ ├── TasksCommand.java │ │ │ │ ├── TemplateCommand.java │ │ │ │ └── VersionCommand.java │ │ │ ├── config │ │ │ ├── ConfigurationUtil.java │ │ │ └── JsonConfiguration.java │ │ │ ├── console │ │ │ ├── Console.java │ │ │ ├── ConsoleColor.java │ │ │ ├── ConsoleReadThread.java │ │ │ ├── JLine3Completer.java │ │ │ ├── JLine3CompletionMatcher.java │ │ │ ├── JLine3Console.java │ │ │ ├── animation │ │ │ │ ├── AbstractConsoleAnimation.java │ │ │ │ ├── progressbar │ │ │ │ │ ├── ConsoleProgressAnimation.java │ │ │ │ │ ├── ConsoleProgressWrappers.java │ │ │ │ │ └── wrapper │ │ │ │ │ │ ├── WrappedInputStream.java │ │ │ │ │ │ └── WrappedIterator.java │ │ │ │ └── setup │ │ │ │ │ ├── ConsoleAnswerTabCompleteHandler.java │ │ │ │ │ ├── ConsoleSetupAnimation.java │ │ │ │ │ └── answer │ │ │ │ │ ├── Parsers.java │ │ │ │ │ ├── QuestionAnswerType.java │ │ │ │ │ └── QuestionListEntry.java │ │ │ ├── handler │ │ │ │ ├── ConsoleInputHandler.java │ │ │ │ ├── ConsoleTabCompleteHandler.java │ │ │ │ └── Toggleable.java │ │ │ ├── log │ │ │ │ ├── ConsoleLevelConversion.java │ │ │ │ └── ConsoleLogAppender.java │ │ │ └── util │ │ │ │ └── HeaderReader.java │ │ │ ├── database │ │ │ ├── AbstractDatabase.java │ │ │ ├── AbstractNodeDatabaseProvider.java │ │ │ ├── NodeDatabaseProvider.java │ │ │ ├── h2 │ │ │ │ ├── H2Database.java │ │ │ │ └── H2DatabaseProvider.java │ │ │ ├── sql │ │ │ │ ├── SQLDatabase.java │ │ │ │ └── SQLDatabaseProvider.java │ │ │ ├── util │ │ │ │ └── LocalDatabaseUtil.java │ │ │ └── xodus │ │ │ │ ├── XodusDatabase.java │ │ │ │ └── XodusDatabaseProvider.java │ │ │ ├── event │ │ │ ├── log │ │ │ │ └── LoggingEntryEvent.java │ │ │ └── setup │ │ │ │ ├── SetupCancelledEvent.java │ │ │ │ ├── SetupCompleteEvent.java │ │ │ │ ├── SetupEvent.java │ │ │ │ ├── SetupInitiateEvent.java │ │ │ │ └── SetupResponseEvent.java │ │ │ ├── log │ │ │ └── QueuedConsoleLogAppender.java │ │ │ ├── module │ │ │ ├── ModuleEntry.java │ │ │ ├── ModulesHolder.java │ │ │ ├── NodeModuleProviderHandler.java │ │ │ ├── listener │ │ │ │ └── PluginIncludeListener.java │ │ │ ├── updater │ │ │ │ ├── ModuleUpdater.java │ │ │ │ ├── ModuleUpdaterContext.java │ │ │ │ └── ModuleUpdaterRegistry.java │ │ │ └── util │ │ │ │ └── ModuleUpdateUtil.java │ │ │ ├── network │ │ │ ├── DefaultNetworkClientChannelHandler.java │ │ │ ├── DefaultNetworkServerChannelHandler.java │ │ │ ├── NodeNetworkUtil.java │ │ │ ├── chunk │ │ │ │ ├── FileDeployCallbackListener.java │ │ │ │ ├── FileQueryChannelMessageListener.java │ │ │ │ ├── StaticServiceDeployCallback.java │ │ │ │ ├── TemplateDeployCallback.java │ │ │ │ └── TemplateFileDeployCallback.java │ │ │ ├── listener │ │ │ │ ├── AuthorizationPacketListener.java │ │ │ │ ├── AuthorizationResponsePacketListener.java │ │ │ │ ├── ChannelMessagePacketListener.java │ │ │ │ ├── ServiceSyncAckPacketListener.java │ │ │ │ └── message │ │ │ │ │ ├── GroupChannelMessageListener.java │ │ │ │ │ ├── NodeChannelMessageListener.java │ │ │ │ │ ├── ServiceChannelMessageListener.java │ │ │ │ │ └── TaskChannelMessageListener.java │ │ │ └── packet │ │ │ │ ├── AuthorizationResponsePacket.java │ │ │ │ └── ServiceSyncAckPacket.java │ │ │ ├── provider │ │ │ ├── NodeClusterNodeProvider.java │ │ │ ├── NodeGroupConfigurationProvider.java │ │ │ ├── NodeMessenger.java │ │ │ └── NodeServiceTaskProvider.java │ │ │ ├── service │ │ │ ├── InternalCloudService.java │ │ │ ├── InternalCloudServiceManager.java │ │ │ └── defaults │ │ │ │ ├── AbstractService.java │ │ │ │ ├── DefaultCloudServiceManager.java │ │ │ │ ├── JVMService.java │ │ │ │ ├── NodeCloudServiceFactory.java │ │ │ │ ├── ServiceCreateRetryTracker.java │ │ │ │ ├── config │ │ │ │ ├── AbstractServiceConfigurationPreparer.java │ │ │ │ ├── BungeeConfigurationPreparer.java │ │ │ │ ├── GlowstoneConfigurationPreparer.java │ │ │ │ ├── LimboLoohpServiceConfigurationPreparer.java │ │ │ │ ├── NukkitConfigurationPreparer.java │ │ │ │ ├── VanillaServiceConfigurationPreparer.java │ │ │ │ ├── VelocityConfigurationPreparer.java │ │ │ │ └── WaterdogPEConfigurationPreparer.java │ │ │ │ ├── factory │ │ │ │ ├── BaseLocalCloudServiceFactory.java │ │ │ │ └── JVMLocalCloudServiceFactory.java │ │ │ │ ├── log │ │ │ │ ├── AbstractServiceLogCache.java │ │ │ │ ├── NonBlockingLineReader.java │ │ │ │ ├── ProcessServiceLogCache.java │ │ │ │ └── ProcessServiceLogReadScheduler.java │ │ │ │ └── provider │ │ │ │ ├── EmptySpecificCloudServiceProvider.java │ │ │ │ └── RemoteNodeCloudServiceProvider.java │ │ │ ├── setup │ │ │ ├── DefaultClusterSetup.java │ │ │ ├── DefaultConfigSetup.java │ │ │ ├── DefaultInstallation.java │ │ │ ├── DefaultSetup.java │ │ │ ├── DefaultTaskSetup.java │ │ │ └── SpecificTaskSetup.java │ │ │ ├── template │ │ │ ├── LocalTemplateStorage.java │ │ │ ├── NodeTemplateStorageProvider.java │ │ │ ├── TemplateStorageUtil.java │ │ │ └── listener │ │ │ │ └── TemplatePrepareListener.java │ │ │ ├── tick │ │ │ ├── DefaultShutdownHandler.java │ │ │ └── DefaultTickLoop.java │ │ │ ├── util │ │ │ ├── JavaVersionResolver.java │ │ │ ├── NetworkUtil.java │ │ │ └── WildcardUtil.java │ │ │ └── version │ │ │ ├── ServiceVersion.java │ │ │ ├── ServiceVersionProvider.java │ │ │ ├── ServiceVersionType.java │ │ │ ├── execute │ │ │ ├── InstallStep.java │ │ │ ├── InstallStepExecutor.java │ │ │ └── defaults │ │ │ │ ├── BuildStepExecutor.java │ │ │ │ ├── CopyFilterStepExecutor.java │ │ │ │ ├── DeployStepExecutor.java │ │ │ │ ├── DownloadStepExecutor.java │ │ │ │ ├── FabricApiVersionFetch.java │ │ │ │ ├── PaperApiVersionFetchStepExecutor.java │ │ │ │ ├── SpongeApiVersionFetchStepExecutor.java │ │ │ │ └── UnzipStepExecutor.java │ │ │ └── information │ │ │ ├── FileSystemVersionInstaller.java │ │ │ ├── TemplateVersionInstaller.java │ │ │ └── VersionInstaller.java │ └── resources │ │ ├── files │ │ ├── bungee │ │ │ └── config.yml │ │ ├── glowstone │ │ │ └── glowstone.yml │ │ ├── limboloohp │ │ │ ├── server.properties │ │ │ └── spawn.schem │ │ ├── nms │ │ │ ├── bukkit.yml │ │ │ ├── server.properties │ │ │ ├── spigot.yml │ │ │ └── sponge.conf │ │ ├── nukkit │ │ │ ├── nukkit.yml │ │ │ └── server.properties │ │ ├── server-icon.png │ │ ├── velocity │ │ │ └── velocity.toml │ │ ├── versions.json │ │ └── waterdogpe │ │ │ └── config.yml │ │ ├── header.txt │ │ ├── lang │ │ ├── de_DE.properties │ │ └── en_US.properties │ │ └── logback.xml │ └── test │ ├── java │ └── eu │ │ └── cloudnetservice │ │ └── node │ │ └── impl │ │ ├── command │ │ └── CommandProviderTest.java │ │ ├── database │ │ ├── h2 │ │ │ └── H2DatabaseTest.java │ │ └── xodus │ │ │ └── XodusDatabaseTest.java │ │ ├── junit │ │ ├── EnableServicesInject.java │ │ └── EnableServicesInjectExtension.java │ │ ├── service │ │ └── defaults │ │ │ └── log │ │ │ └── NonBlockingLineReaderTest.java │ │ ├── template │ │ └── LocalTemplateStorageTest.java │ │ └── util │ │ └── WildcardUtilTest.java │ └── resources │ ├── local_template_storage.zip │ └── logback-test.xml ├── plugins ├── build.gradle.kts ├── luckperms │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── eu │ │ └── cloudnetservice │ │ └── plugins │ │ └── luckperms │ │ ├── BukkitLuckPermsPlugin.java │ │ ├── BungeecordLuckPermsPlugin.java │ │ ├── CloudNetContextCalculator.java │ │ ├── FabricLuckPermsPlugin.java │ │ ├── NukkitLuckPermsPlugin.java │ │ ├── SpongeLuckPermsPlugin.java │ │ ├── VelocityLuckPermsPlugin.java │ │ └── WaterDogLuckPermsPlugin.java └── papi-expansion │ ├── build.gradle.kts │ └── src │ └── main │ └── java │ └── eu │ └── cloudnetservice │ └── plugins │ └── papi │ └── CloudNetPapiExpansion.java ├── settings.gradle.kts ├── utils ├── base │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ └── java │ │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── utils │ │ │ └── base │ │ │ ├── ClassAllocationUtil.java │ │ │ ├── CodeGenerationUtil.java │ │ │ ├── StringUtil.java │ │ │ ├── column │ │ │ ├── ColumnEntry.java │ │ │ ├── ColumnFormatter.java │ │ │ └── RowedFormatter.java │ │ │ ├── concurrent │ │ │ ├── CountingTask.java │ │ │ ├── ListenableTask.java │ │ │ └── TaskUtil.java │ │ │ ├── io │ │ │ ├── FileUtil.java │ │ │ ├── ListenableOutputStream.java │ │ │ ├── LogOutputStream.java │ │ │ └── ZipUtil.java │ │ │ └── resource │ │ │ ├── CpuUsageResolver.java │ │ │ ├── ResourceFormatter.java │ │ │ └── ResourceResolver.java │ │ └── test │ │ ├── java │ │ └── eu │ │ │ └── cloudnetservice │ │ │ └── utils │ │ │ └── base │ │ │ ├── ClassAllocationUtilTest.java │ │ │ ├── StringUtilTest.java │ │ │ ├── column │ │ │ ├── ColumnTextFormatterTest.java │ │ │ └── RowedFormatterTest.java │ │ │ ├── concurrent │ │ │ ├── CompletedTaskTest.java │ │ │ ├── CountingTaskTest.java │ │ │ ├── ListenableTaskTest.java │ │ │ └── TaskUtilTest.java │ │ │ ├── io │ │ │ └── ZipUtilTest.java │ │ │ └── resource │ │ │ ├── CpuUsageResolverTest.java │ │ │ ├── ResourceFormatterTest.java │ │ │ └── ResourceResolverTest.java │ │ └── resources │ │ ├── empty_zip_file.zip │ │ └── file_utils_resources.zip └── build.gradle.kts └── wrapper-jvm ├── api ├── build.gradle.kts └── src │ └── main │ └── java │ └── eu │ └── cloudnetservice │ └── wrapper │ ├── configuration │ └── WrapperConfiguration.java │ ├── event │ ├── ApplicationPostStartEvent.java │ ├── ApplicationPreStartEvent.java │ ├── ServiceInfoPropertiesConfigureEvent.java │ └── ServiceInfoSnapshotPublishEvent.java │ ├── holder │ └── ServiceInfoHolder.java │ └── transform │ ├── ClassTransformer.java │ └── ClassTransformerRegistry.java ├── build.gradle.kts └── impl ├── build.gradle.kts └── src └── main ├── java └── eu │ └── cloudnetservice │ └── wrapper │ └── impl │ ├── Main.java │ ├── Premain.java │ ├── ShutdownHandler.java │ ├── Wrapper.java │ ├── configuration │ └── DocumentWrapperConfiguration.java │ ├── database │ ├── WrapperDatabase.java │ └── WrapperDatabaseProvider.java │ ├── holder │ └── WrapperServiceInfoHolder.java │ ├── inject │ ├── BootFactories.java │ └── RPCFactories.java │ ├── network │ ├── NetworkClientChannelHandler.java │ ├── chunk │ │ └── TemplateStorageCallbackListener.java │ └── listener │ │ ├── AuthorizationPacketListener.java │ │ ├── ChannelMessagePacketListener.java │ │ └── message │ │ ├── GroupChannelMessageListener.java │ │ ├── ServiceChannelMessageListener.java │ │ └── TaskChannelMessageListener.java │ ├── provider │ ├── WrapperMessenger.java │ └── WrapperTemplateStorageProvider.java │ └── transform │ ├── DefaultClassTransformerRegistry.java │ ├── bukkit │ ├── BukkitCommodoreTransformer.java │ ├── BukkitJavaVersionCheckTransformer.java │ ├── FAWEConfigTransformer.java │ ├── FAWEReflectionUtilsTransformer.java │ ├── FAWEWorldEditDownloadURLTransformer.java │ ├── PaperConfigTransformer.java │ └── WorldEditJava8DetectorTransformer.java │ ├── guava │ ├── GuavaLittleEndianByteArrayTransformer.java │ ├── GuavaTransformUtil.java │ ├── GuavaUnsafeAtomicHelperTransformer.java │ └── GuavaUnsignedBytesTransformer.java │ ├── minestom │ └── MinestomStopCleanlyTransformer.java │ ├── netty │ └── OldEpollDisableTransformer.java │ ├── spark │ └── OldAsyncProfilerDisableTransformer.java │ └── util │ └── SourceProvidingMethodTransform.java └── resources ├── META-INF └── services │ ├── eu.cloudnetservice.wrapper.transform.ClassTransformer │ └── org.jboss.shrinkwrap.resolver.spi.format.FormatProcessor ├── lang └── en_US.properties └── logback.xml /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://editorconfig.org/ 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | charset = utf-8 9 | end_of_line = lf 10 | indent_size = 2 11 | indent_style = space 12 | max_line_length = 120 13 | insert_final_newline = true -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | MEMORY=512 2 | JAVA_COMPOSE_OPTS=-XX:+UseZGC -XX:+PerfDisableSharedMem 3 | CLOUDNET_COMPOSE_OPTS= 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize as LF in the repository, OS native locally 2 | * text eol=lf 3 | 4 | # These are explicitly windows files and should use crlf 5 | *.bat text eol=crlf 6 | 7 | # These files are text and should be normalized (Convert crlf => lf) 8 | *.bash text eol=lf 9 | *.css text diff=css 10 | *.htm text diff=html 11 | *.html text diff=html 12 | *.java text diff=java 13 | *.sh text eol=lf 14 | 15 | # These files are binary and should be left untouched 16 | # (binary is a macro for -text -diff) 17 | *.a binary 18 | *.lib binary 19 | *.icns binary 20 | *.png binary 21 | *.jpg binary 22 | *.jpeg binary 23 | *.gif binary 24 | *.ico binary 25 | *.mov binary 26 | *.mp4 binary 27 | *.mp3 binary 28 | *.flv binary 29 | *.fla binary 30 | *.swf binary 31 | *.gz binary 32 | *.zip binary 33 | *.jar binary 34 | *.tar binary 35 | *.tar.gz binary 36 | *.7z binary 37 | *.ttf binary 38 | *.pyc binary 39 | *.gpg binary 40 | *.bin binary 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Discord 4 | url: https://discord.cloudnetservice.eu 5 | about: | 6 | If you need general support on CloudNet, you should use our Discord server. We and the community can help you 7 | help you there faster and more targeted. 8 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 9 | 10 | ### Motivation 11 | 12 | 13 | ### Modification 14 | 15 | 16 | ### Result 17 | 18 | 19 | ##### Other context 20 | 21 | Fixes # 22 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | daysUntilStale: 15 2 | daysUntilClose: 5 3 | staleLabel: "r: stale" 4 | exemptLabels: 5 | - "pinned" 6 | - "t: bug" 7 | - "t: security" 8 | - "t: new platform" 9 | - "s: blocked" 10 | - "s: needs triage" 11 | - "s: we need to go deeper" 12 | 13 | markComment: > 14 | This issue has been automatically marked as stale because it has not had 15 | recent activity. It will be closed if no further activity occurs. Thank you 16 | for your contributions. 17 | closeComment: > 18 | This issue has been automatically closed because it had no activity since the 19 | last call. If the issue still applies to the most recent supported 20 | version, please open a new issue referencing this original issue. 21 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL" 2 | 3 | on: 4 | pull_request: 5 | schedule: 6 | - cron: '00 2 * * *' 7 | 8 | concurrency: 9 | cancel-in-progress: true 10 | group: cq-${{ github.event.pull_request.number || github.job }} 11 | 12 | jobs: 13 | analyze: 14 | name: Analyze 15 | runs-on: ubuntu-latest 16 | if: ${{ !startsWith(github.ref, 'refs/heads/renovate/') }} 17 | 18 | steps: 19 | - name: Checkout repository 20 | uses: actions/checkout@v4 21 | 22 | - name: Setup java 23 | uses: actions/setup-java@v4 24 | with: 25 | java-version: 24 26 | check-latest: true 27 | distribution: 'zulu' 28 | 29 | - name: Setup Gradle 30 | uses: gradle/actions/setup-gradle@v4 31 | with: 32 | cache-read-only: true 33 | add-job-summary: always 34 | 35 | - name: Initialize CodeQL 36 | uses: github/codeql-action/init@v3 37 | with: 38 | tools: linked 39 | languages: 'java' 40 | 41 | - name: Autobuild 42 | uses: github/codeql-action/autobuild@v3 43 | 44 | - name: Perform CodeQL Analysis 45 | uses: github/codeql-action/analyze@v3 46 | -------------------------------------------------------------------------------- /.github/workflows/delete-launchermeta-branch.yml: -------------------------------------------------------------------------------- 1 | name: Remove deleted branch from launchermeta 2 | on: 3 | delete: 4 | 5 | jobs: 6 | remove_deleted_branch: 7 | runs-on: ubuntu-latest 8 | name: Remove deleted branch 9 | if: github.event.ref_type == 'branch' 10 | 11 | steps: 12 | - name: Setup ssh agent 13 | uses: webfactory/ssh-agent@v0.9.1 14 | with: 15 | ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} 16 | 17 | - name: Delete branch from launchermeta 18 | run: | 19 | # init git configuration 20 | git config --global user.name "CloudNetAutomation"; 21 | git config --global user.email "CloudNetAutomation@users.noreply.github.com"; 22 | 23 | # clone the repo from the remote, without objects (partial clone) 24 | git clone --filter=blob:none --no-checkout git@github.com:CloudNetService/launchermeta.git del_temp; 25 | 26 | # navigate into the cloned repo and remove the delete branch (while ignoring all errors) 27 | cd del_temp; 28 | git push origin --delete "${{ github.event.ref }}" || true; 29 | -------------------------------------------------------------------------------- /.github/workflows/gradle-release.yml: -------------------------------------------------------------------------------- 1 | name: "Publish to maven central" 2 | 3 | on: 4 | push: 5 | tags: [ "4.*" ] 6 | 7 | jobs: 8 | build: 9 | environment: release 10 | runs-on: ubuntu-latest 11 | name: Publish to maven central 12 | 13 | steps: 14 | - name: Checkout repository 15 | uses: actions/checkout@v4 16 | 17 | - name: Setup java 18 | uses: actions/setup-java@v4 19 | with: 20 | java-version: 24 21 | check-latest: true 22 | distribution: 'zulu' 23 | 24 | - name: Setup Gradle 25 | uses: gradle/actions/setup-gradle@v4 26 | with: 27 | cache-read-only: true 28 | add-job-summary: always 29 | 30 | - name: Publish release to central portal 31 | run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository 32 | env: 33 | CENTRAL_USER: "${{ secrets.CENTRAL_USER }}" 34 | CENTRAL_PASSWORD: "${{ secrets.CENTRAL_PASSWORD }}" 35 | SIGNING_KEY: "${{ secrets.SIGNING_KEY }}" 36 | SIGNING_KEY_PASSWORD: "${{ secrets.SIGNING_KEY_PASSWORD }}" 37 | -------------------------------------------------------------------------------- /.github/workflows/prbranch.yml: -------------------------------------------------------------------------------- 1 | name: Validate target PR branch 2 | 3 | on: 4 | pull_request: 5 | types: [ opened, edited ] 6 | 7 | jobs: 8 | check-branch: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: Vankka/pr-target-branch-action@v3 12 | with: 13 | target: release 14 | exclude: beta 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # include specific folders in .idea/ 2 | !.idea 3 | .idea/* 4 | # copyright settings 5 | !/.idea/copyright 6 | .idea/copyright/* 7 | !/.idea/copyright/CloudNet.xml 8 | !/.idea/copyright/profiles_settings.xml 9 | # Code Style settings 10 | !/.idea/codeStyles 11 | .idea/codeStyles/* 12 | !/.idea/codeStyles/Project.xml 13 | !/.idea/codeStyles/codeStyleConfig.xml 14 | # Inspection profiles 15 | !/.idea/inspectionProfiles 16 | .idea/inspectionProfiles/* 17 | !/.idea/inspectionProfiles/CloudNet.xml 18 | !/.idea/inspectionProfiles/profiles_settings.xml 19 | 20 | # gradle 21 | .gradle/ 22 | build/ 23 | 24 | # fleet 25 | .fleet/ 26 | 27 | # eclipse 28 | *.classpath 29 | *.project 30 | *.settings 31 | /bin/ 32 | /subprojects/*/bin/ 33 | .metadata/ 34 | atlassian-ide-plugin.xml 35 | 36 | # NetBeans 37 | .nb-gradle 38 | .nb-gradle-properties 39 | 40 | # Vim 41 | *.sw[nop] 42 | 43 | # Emacs 44 | *~ 45 | \#*\# 46 | .\#* 47 | 48 | # Textmate 49 | .textmate 50 | 51 | # Sublime Text 52 | *.sublime-* 53 | 54 | # jEnv 55 | .java-version 56 | 57 | # macOS 58 | .DS_Store 59 | 60 | # HPROF 61 | *.hprof 62 | 63 | # Work dirs 64 | /incoming-distributions 65 | /intTestHomeDir 66 | 67 | # Logs 68 | /*.log 69 | 70 | # delombok 71 | */src/main/lombok 72 | 73 | # CloudNet 74 | .launchermeta/ 75 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/copyright/CloudNet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /.img/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/.img/header.png -------------------------------------------------------------------------------- /.img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/.img/logo.png -------------------------------------------------------------------------------- /.template/start.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | @rem check if java is installed 4 | WHERE java >nul 2>nul 5 | IF %ERRORLEVEL% NEQ 0 ( 6 | ECHO No valid java installation was found, please install java in order to run CloudNet 7 | EXIT /b 1 8 | ) ELSE ( 9 | :: DO NOT CHANGE THE SUPPLIED MEMORY HERE. THIS HAS NO EFFECT ON THE NODE INSTANCE. USE THE launcher.cnl INSTEAD 10 | java -Xms128M -Xmx128M -XX:+UseZGC -XX:+PerfDisableSharedMem -jar launcher.jar 11 | ) 12 | -------------------------------------------------------------------------------- /.template/start.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" || exit 1 4 | 5 | # check if java is installed 6 | if [ -x "$(command -v java)" ]; then 7 | # DO NOT CHANGE THE SUPPLIED MEMORY HERE. THIS HAS NO EFFECT ON THE NODE INSTANCE. USE THE launcher.cnl INSTEAD 8 | java -Xms128M -Xmx128M -XX:+UseZGC -XX:+PerfDisableSharedMem -jar launcher.jar 9 | else 10 | echo "No valid java installation was found, please install java in order to run CloudNet" 11 | exit 1 12 | fi 13 | -------------------------------------------------------------------------------- /.template/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cd "$(dirname "$(readlink -fn "$0")")" || exit 1 4 | 5 | # check if java is installed 6 | if [ -x "$(command -v java)" ]; then 7 | # if screen is present use that 8 | # this check is elevated as tmux is sometimes present by default 9 | if [ -x "$(command -v screen)" ]; then 10 | # DO NOT CHANGE THE SUPPLIED MEMORY HERE. THIS HAS NO EFFECT ON THE NODE INSTANCE. USE THE launcher.cnl INSTEAD 11 | screen -DRSq CloudNet java -Xms128M -Xmx128M -XX:+UseZGC -XX:+PerfDisableSharedMem -jar launcher.jar 12 | elif [ -x "$(command -v tmux)" ]; then 13 | # DO NOT CHANGE THE SUPPLIED MEMORY HERE. THIS HAS NO EFFECT ON THE NODE INSTANCE. USE THE launcher.cnl INSTEAD 14 | tmux new-session -As CloudNet java -Xms128M -Xmx128M -XX:+UseZGC -XX:+PerfDisableSharedMem -jar launcher.jar 15 | else 16 | echo "No screen or tmux installation found, you need to install at least one of them to run CloudNet" 17 | exit 1 18 | fi 19 | else 20 | echo "No valid java installation was found, please install java in order to run CloudNet" 21 | exit 1 22 | fi 23 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM azul/zulu-openjdk:24-jre-headless AS build 2 | 3 | COPY . /home/cloudnet-build 4 | WORKDIR /home/cloudnet-build 5 | 6 | RUN chmod +x gradlew && ./gradlew -x test --no-daemon --stacktrace 7 | 8 | FROM azul/zulu-openjdk:24-jre-headless 9 | 10 | RUN mkdir -p /cloudnet 11 | WORKDIR /cloudnet 12 | VOLUME /cloudnet 13 | 14 | COPY --from=build /home/cloudnet-build/launcher/java22/build/libs/launcher.jar . 15 | ENTRYPOINT exec java $JAVA_OPTS -jar launcher.jar $CLOUDNET_OPTS 16 | -------------------------------------------------------------------------------- /LICENSE_HEADER: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /bom/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | id("java-platform") 19 | } 20 | 21 | dependencies { 22 | constraints { 23 | collectSubProjects(rootProject, mutableListOf()).forEach { 24 | api(project(it)) 25 | } 26 | } 27 | } 28 | 29 | fun collectSubProjects(root: Project, paths: MutableList): List { 30 | root.subprojects.forEach { 31 | paths.add(it.path) 32 | collectSubProjects(it, paths) 33 | } 34 | // just to make it look cleaner :) 35 | return paths 36 | } 37 | 38 | configurePublishing("javaPlatform") 39 | -------------------------------------------------------------------------------- /build-extensions/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | `kotlin-dsl` 19 | } 20 | 21 | repositories { 22 | gradlePluginPortal() 23 | } 24 | 25 | dependencies { 26 | implementation("net.kyori", "indra-common", "3.1.3") 27 | implementation("com.google.code.gson", "gson", "2.13.1") 28 | } 29 | -------------------------------------------------------------------------------- /build-extensions/src/main/kotlin/Versions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | object Versions { 18 | 19 | // internal versions 20 | const val cloudNet = "4.0.0-RC13-SNAPSHOT" 21 | const val cloudNetCodeName = "Blizzard" 22 | } 23 | -------------------------------------------------------------------------------- /build-extensions/src/main/kotlin/cloudnet.parent-build-logic.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | id("net.kyori.indra.git") 19 | } 20 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /node/src/main/resources/lang/en_US.properties 3 | translation: /node/src/main/resources/lang/%locale_with_underscore%.properties 4 | commit_message: "[ci skip]" 5 | pull_request_labels: 6 | - "t: translation" 7 | - "s: accepted" 8 | pull_request_title: "chore: pull latest crowdin translation changes" 9 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | cloudnet: 4 | build: 5 | context: . 6 | dockerfile: Dockerfile 7 | ports: 8 | - "1410:1410" 9 | - "2812:2812" 10 | env_file: 11 | - .env 12 | environment: 13 | - JAVA_OPTS=-Xms${MEMORY}M -Xmx${MEMORY}M ${JAVA_COMPOSE_OPTS} 14 | - CLOUDNET_OPTS=${CLOUDNET_COMPOSE_OPTS} 15 | volumes: 16 | - cloudnet:/cloudnet 17 | restart: unless-stopped 18 | stdin_open: true 19 | tty: true 20 | volumes: 21 | cloudnet: { } 22 | -------------------------------------------------------------------------------- /driver/ap/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "implementation"(projects.driver.driverApi) 19 | } 20 | -------------------------------------------------------------------------------- /driver/ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | eu.cloudnetservice.driver.ap.registry.AutoServiceProcessor 18 | -------------------------------------------------------------------------------- /driver/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "api"(libs.vavr) 19 | "api"(libs.slf4jApi) 20 | "api"(libs.geantyref) 21 | "api"(libs.bundles.aerogel) 22 | "implementation"(libs.guava) 23 | } 24 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/ComponentInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver; 18 | 19 | import lombok.NonNull; 20 | 21 | /** 22 | * Holds all information about the current component. 23 | * 24 | * @param environment the environment of the current component. 25 | * @param componentName the name of the current component. 26 | * @param nodeUniqueId the node unique id which is associated with this component. 27 | * @since 4.0 28 | */ 29 | public record ComponentInfo( 30 | @NonNull DriverEnvironment environment, 31 | @NonNull String componentName, 32 | @NonNull String nodeUniqueId 33 | ) { 34 | 35 | } 36 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/cluster/NetworkCluster.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.cluster; 18 | 19 | import java.util.Collection; 20 | import java.util.UUID; 21 | import lombok.NonNull; 22 | 23 | /** 24 | * Represents the main entry point which holds all information about a cluster configuration. Essentially, this class 25 | * holds everything a cluster needs to run. 26 | * 27 | * @param clusterId the id of the cluster which is running. 28 | * @param nodes all nodes which are running in the cluster. 29 | * @since 4.0 30 | */ 31 | public record NetworkCluster(@NonNull UUID clusterId, @NonNull Collection nodes) { 32 | 33 | } 34 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/document/SerialisationStyle.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.document; 18 | 19 | /** 20 | * An object that defines how to serialize a document. The standard options how a document can be serialized are defined 21 | * by {@link StandardSerialisationStyle}. All document implementations should at least support the standard styles. 22 | * 23 | * @since 4.0 24 | */ 25 | public interface SerialisationStyle { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/document/send/element/NullElement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.document.send.element; 18 | 19 | import eu.cloudnetservice.driver.document.send.ElementVisitor; 20 | import lombok.NonNull; 21 | 22 | /** 23 | * Represents a null value, or in other words a key without a specified value. 24 | * 25 | * @param key the key of this element or {@link Element#NO_KEY} if an array entry. 26 | * @since 4.0 27 | */ 28 | public record NullElement(@NonNull String key) implements Element { 29 | 30 | /** 31 | * {@inheritDoc} 32 | */ 33 | @Override 34 | public void accept(@NonNull ElementVisitor visitor) { 35 | visitor.visitNull(this); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/event/Event.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.event; 18 | 19 | /** 20 | * Represents an event which can be fired. This class is just a marker class to indicate that a class is an event. 21 | * Events can be fired by using {@link EventManager#callEvent(Event)} and listened to by using a method with only one 22 | * parameter (the event to listen to) which is annotated with {@code @EventListener}. 23 | * 24 | * @see EventManager#callEvent(Event) 25 | * @see EventListener 26 | * @see Cancelable 27 | * @since 4.0 28 | */ 29 | public abstract class Event { 30 | 31 | } 32 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/event/events/task/ServiceTaskRemoveEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.event.events.task; 18 | 19 | import eu.cloudnetservice.driver.service.ServiceTask; 20 | import lombok.NonNull; 21 | 22 | /** 23 | * An event being fired when a service task gets removed. 24 | * 25 | * @since 4.0 26 | */ 27 | public final class ServiceTaskRemoveEvent extends ServiceTaskEvent { 28 | 29 | /** 30 | * Constructs a new service task remove event. 31 | * 32 | * @param task the task associated with this event. 33 | * @throws NullPointerException if the given task is null. 34 | */ 35 | public ServiceTaskRemoveEvent(@NonNull ServiceTask task) { 36 | super(task); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/inject/InjectionLayerHolder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.inject; 18 | 19 | import dev.derklaro.aerogel.Injector; 20 | import lombok.NonNull; 21 | 22 | /** 23 | * Represents a holder which holds an injection layer. 24 | * 25 | * @param the type of injector the layer uses. 26 | * @since 4.0 27 | */ 28 | @FunctionalInterface 29 | public interface InjectionLayerHolder { 30 | 31 | /** 32 | * Get the injection layer associated with this holder. 33 | * 34 | * @return the injection layer of this holder. 35 | */ 36 | @NonNull InjectionLayer injectionLayer(); 37 | } 38 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/network/chunk/TransferStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.network.chunk; 18 | 19 | /** 20 | * Represents the status of a finished chunked packet transfer. 21 | * 22 | * @since 4.0 23 | */ 24 | public enum TransferStatus { 25 | 26 | /** 27 | * The transfer is currently running and unfinished. 28 | */ 29 | RUNNING, 30 | /** 31 | * The transfer was completed successfully. 32 | */ 33 | SUCCESS, 34 | /** 35 | * The transfer failed for some reason. 36 | */ 37 | FAILURE, 38 | } 39 | -------------------------------------------------------------------------------- /driver/api/src/main/java/eu/cloudnetservice/driver/network/rpc/annotation/RPCNoResult.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.network.rpc.annotation; 18 | 19 | import java.lang.annotation.Documented; 20 | import java.lang.annotation.ElementType; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | 25 | /** 26 | * Marks a method in an api class which returns void but should not wait to the result signal of the remote rpc to 27 | * become available. 28 | * 29 | * @since 4.0 30 | */ 31 | @Documented 32 | @Target(ElementType.METHOD) 33 | @Retention(RetentionPolicy.RUNTIME) 34 | public @interface RPCNoResult { 35 | 36 | } 37 | -------------------------------------------------------------------------------- /driver/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/driver/build.gradle.kts -------------------------------------------------------------------------------- /driver/impl/src/main/java/eu/cloudnetservice/driver/impl/network/scheduler/NetworkTaskScheduler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.impl.network.scheduler; 18 | 19 | import java.util.concurrent.Executor; 20 | 21 | /** 22 | * A scheduler for tasks that are triggered by incoming network calls and should be handled non-blocking (for execute 23 | * invocations) with the lowest latency possible. 24 | * 25 | * @since 4.0 26 | */ 27 | public interface NetworkTaskScheduler extends Executor { 28 | 29 | /** 30 | * Triggers a shutdown operation on this scheduler, interrupting all currently running tasks and preventing new tasks 31 | * from being scheduled. 32 | */ 33 | void shutdown(); 34 | } 35 | -------------------------------------------------------------------------------- /driver/impl/src/main/resources/META-INF/services/eu.cloudnetservice.driver.inject.BootLayerConfigurator: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | eu.cloudnetservice.driver.impl.registry.ServiceAnnotationInjectConfigurator 18 | eu.cloudnetservice.driver.impl.network.object.ObjectMapperInjectRegistration 19 | -------------------------------------------------------------------------------- /driver/impl/src/test/java/eu/cloudnetservice/driver/impl/junit/EnableServicesInject.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.impl.junit; 18 | 19 | import java.lang.annotation.ElementType; 20 | import java.lang.annotation.Inherited; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | import org.junit.jupiter.api.extension.ExtendWith; 25 | 26 | @Inherited 27 | @Target(ElementType.TYPE) 28 | @Retention(RetentionPolicy.RUNTIME) 29 | @ExtendWith(EnableServicesInjectExtension.class) 30 | public @interface EnableServicesInject { 31 | 32 | } 33 | -------------------------------------------------------------------------------- /driver/impl/src/test/java/eu/cloudnetservice/driver/impl/network/netty/NettyTransportTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.impl.network.netty; 18 | 19 | import org.junit.jupiter.api.Assertions; 20 | import org.junit.jupiter.api.Test; 21 | 22 | public class NettyTransportTest { 23 | 24 | @Test 25 | void testNoNativeIsRespected() { 26 | var noNativeNettyTransport = NettyTransport.availableTransport(true); 27 | Assertions.assertEquals(NettyTransport.NIO, noNativeNettyTransport); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /driver/impl/src/test/java/eu/cloudnetservice/driver/impl/network/rpc/generation/api/SenderNeedingDatabase.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.impl.network.rpc.generation.api; 18 | 19 | import eu.cloudnetservice.driver.network.rpc.RPCSender; 20 | import eu.cloudnetservice.driver.network.rpc.annotation.RPCInvocationTarget; 21 | 22 | public abstract class SenderNeedingDatabase extends BaseDatabase { 23 | 24 | public final RPCSender rpcSender; 25 | 26 | @RPCInvocationTarget 27 | public SenderNeedingDatabase(RPCSender rpcSender) { 28 | this.rpcSender = rpcSender; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /driver/impl/src/test/java/eu/cloudnetservice/driver/impl/network/rpc/object/AllPrimitiveTypesDataClass.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.impl.network.rpc.object; 18 | 19 | public record AllPrimitiveTypesDataClass( 20 | byte b, 21 | short s, 22 | int i, 23 | long l, 24 | float f, 25 | double d, 26 | char c, 27 | String string, 28 | boolean bol 29 | ) { 30 | 31 | public AllPrimitiveTypesDataClass() { 32 | this((byte) 1, (short) 2, 3, 4L, 5F, 6D, '/', "Hello, World!", true); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /driver/impl/src/test/java/eu/cloudnetservice/driver/impl/network/rpc/object/ObjectWithSpecialGetter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.driver.impl.network.rpc.object; 18 | 19 | import eu.cloudnetservice.driver.network.rpc.annotation.RPCFieldGetter; 20 | import java.util.UUID; 21 | 22 | public record ObjectWithSpecialGetter( 23 | @RPCFieldGetter("reallyNoAGetterIDontKnowWhatThisIsId") UUID id, 24 | String username 25 | ) { 26 | 27 | public UUID reallyNoAGetterIDontKnowWhatThisIsId() { 28 | return UUID.fromString("bcc582ed-494d-4b93-86cb-b58564651a26"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ext/adventure-helper/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "compileOnly"(libs.adventureApi) 19 | "compileOnly"(libs.adventureSerializerLegacy) 20 | "compileOnly"(libs.bungeecordChat) 21 | } 22 | 23 | configurations { 24 | named("testImplementation").get().extendsFrom(named("compileOnly").get()) 25 | } 26 | -------------------------------------------------------------------------------- /ext/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /ext/bukkit-command/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | repositories { 18 | maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") 19 | } 20 | 21 | dependencies { 22 | "compileOnly"(libs.spigot) 23 | } 24 | -------------------------------------------------------------------------------- /ext/modlauncher/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | repositories { 18 | maven("https://repo.spongepowered.org/maven/") 19 | } 20 | 21 | dependencies { 22 | "compileOnly"(libs.modLauncher) 23 | } 24 | -------------------------------------------------------------------------------- /ext/modlauncher/src/main/resources/META-INF/services/cpw.mods.modlauncher.serviceapi.ILaunchPluginService: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | eu.cloudnetservice.ext.modlauncher.CloudNetLaunchPluginService 18 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "compileOnlyApi"(projects.driver.driverApi) 19 | } 20 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/PlatformEntrypoint.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api; 18 | 19 | public interface PlatformEntrypoint { 20 | 21 | default void onLoad() { 22 | } 23 | 24 | default void onDisable() { 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/PlatformPluginInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api; 18 | 19 | import dev.derklaro.aerogel.Injector; 20 | import eu.cloudnetservice.driver.inject.InjectionLayerHolder; 21 | import lombok.NonNull; 22 | 23 | public interface PlatformPluginInfo extends InjectionLayerHolder { 24 | 25 | @NonNull 26 | I id(); 27 | 28 | @NonNull 29 | T platformData(); 30 | 31 | @NonNull 32 | P platformPluginInstance(); 33 | 34 | @NonNull 35 | Class platformPluginClass(); 36 | 37 | void close(); 38 | } 39 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/generator/PluginInfoGenerator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api.generator; 18 | 19 | import eu.cloudnetservice.ext.platforminject.api.data.ParsedPluginData; 20 | import java.io.IOException; 21 | import javax.annotation.processing.Filer; 22 | import lombok.NonNull; 23 | 24 | @FunctionalInterface 25 | public interface PluginInfoGenerator { 26 | 27 | void generatePluginInfo( 28 | @NonNull ParsedPluginData pluginData, 29 | @NonNull String platformMainClassName, 30 | @NonNull Filer filer) throws IOException; 31 | } 32 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/inject/BindingsInstaller.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api.inject; 18 | 19 | import eu.cloudnetservice.driver.inject.InjectionLayer; 20 | import lombok.NonNull; 21 | 22 | @FunctionalInterface 23 | public interface BindingsInstaller { 24 | 25 | void applyBindings(@NonNull InjectionLayer injectionLayer); 26 | } 27 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/mapping/Container.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api.mapping; 18 | 19 | import lombok.NonNull; 20 | 21 | public record Container(@NonNull Object pluginInstance, @NonNull C container) { 22 | 23 | } 24 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/mapping/PlatformedContainer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api.mapping; 18 | 19 | import lombok.NonNull; 20 | 21 | public record PlatformedContainer( 22 | @NonNull Object pluginInstance, 23 | @NonNull C container, 24 | @NonNull I platformInstance 25 | ) { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/stereotype/ConstructionListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api.stereotype; 18 | 19 | import java.lang.annotation.Documented; 20 | import java.lang.annotation.ElementType; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | import lombok.NonNull; 25 | 26 | @Documented 27 | @Target(ElementType.TYPE) 28 | @Retention(RetentionPolicy.RUNTIME) 29 | public @interface ConstructionListener { 30 | 31 | @NonNull Class value(); 32 | } 33 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/stereotype/Dependency.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api.stereotype; 18 | 19 | import java.lang.annotation.Documented; 20 | import java.lang.annotation.ElementType; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | import lombok.NonNull; 25 | 26 | @Documented 27 | @Target(ElementType.TYPE) 28 | @Retention(RetentionPolicy.RUNTIME) 29 | public @interface Dependency { 30 | 31 | @NonNull String name(); 32 | 33 | @NonNull String version() default ""; 34 | 35 | boolean optional() default false; 36 | } 37 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/api/stereotype/Repository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.api.stereotype; 18 | 19 | import java.lang.annotation.Documented; 20 | import java.lang.annotation.ElementType; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | import lombok.NonNull; 25 | 26 | @Documented 27 | @Target(ElementType.TYPE) 28 | @Retention(RetentionPolicy.RUNTIME) 29 | public @interface Repository { 30 | 31 | @NonNull String id(); 32 | 33 | @NonNull String url(); 34 | } 35 | -------------------------------------------------------------------------------- /ext/platform-inject-support/api/src/main/java/eu/cloudnetservice/ext/platforminject/loader/PlatformInjectSupportLoader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.loader; 18 | 19 | import lombok.NonNull; 20 | 21 | // marker class, see loader project for implementation 22 | public final class PlatformInjectSupportLoader { 23 | 24 | public static void loadPlugin( 25 | @NonNull String platform, 26 | @NonNull Class pluginClass, 27 | @NonNull Object platformData, 28 | @NonNull ClassLoader platformClassLoader 29 | ) { 30 | } 31 | 32 | public static void disablePlugin(@NonNull String platform, @NonNull Object platformData) { 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ext/platform-inject-support/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /ext/platform-inject-support/loader/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "api"(projects.ext.platformInjectSupport.platformInjectApi) 19 | "implementation"(projects.utils.utilsBase) 20 | } 21 | 22 | tasks.withType { 23 | // depend on the output of the jar task 24 | val jarTask = projects.ext.platformInjectSupport.platformInjectRuntime.dependencyProject.tasks.getByName("jar") 25 | dependsOn(jarTask) 26 | 27 | // copy over the final output file 28 | from("../runtime/build/libs") { 29 | include(Files.injectSupport) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ext/platform-inject-support/processor/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "implementation"(libs.javapoet) 19 | "implementation"(libs.bundles.nightConfig) 20 | "implementation"(projects.ext.platformInjectSupport.platformInjectApi) 21 | } 22 | -------------------------------------------------------------------------------- /ext/platform-inject-support/processor/src/main/java/eu/cloudnetservice/ext/platforminject/processor/id/CharRange.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.processor.id; 18 | 19 | import lombok.NonNull; 20 | 21 | public record CharRange(char lowerBounds, char upperBounds) { 22 | 23 | public static @NonNull CharRange range(char singleBound) { 24 | return new CharRange(singleBound, singleBound); 25 | } 26 | 27 | public static @NonNull CharRange range(char lowerBounds, char upperBounds) { 28 | return new CharRange(lowerBounds, upperBounds); 29 | } 30 | 31 | public boolean inRange(char c) { 32 | return c >= this.lowerBounds && c <= this.upperBounds; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ext/platform-inject-support/processor/src/main/java/eu/cloudnetservice/ext/platforminject/processor/platform/limboloohp/LimboLoohpPlatformInfoProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.processor.platform.limboloohp; 18 | 19 | import eu.cloudnetservice.ext.platforminject.api.data.PluginDataParser; 20 | import eu.cloudnetservice.ext.platforminject.api.spi.PlatformDataGeneratorProvider; 21 | 22 | public final class LimboLoohpPlatformInfoProvider extends PlatformDataGeneratorProvider { 23 | 24 | public LimboLoohpPlatformInfoProvider() { 25 | super( 26 | "limboloohp", 27 | LimboLoohpPluginInfoGenerator::new, 28 | LimboLoohpMainClassGenerator::new, 29 | PluginDataParser::create); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ext/platform-inject-support/processor/src/main/resources/META-INF/gradle/incremental.annotation.processors: -------------------------------------------------------------------------------- 1 | eu.cloudnetservice.ext.platforminject.processor.PlatformPluginProcessor,aggregating 2 | -------------------------------------------------------------------------------- /ext/platform-inject-support/processor/src/main/resources/META-INF/services/javax.annotation.processing.Processor: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | eu.cloudnetservice.ext.platforminject.processor.PlatformPluginProcessor 18 | -------------------------------------------------------------------------------- /ext/platform-inject-support/runtime/src/main/java/eu/cloudnetservice/ext/platforminject/runtime/platform/fabric/FabricPlatformManagerProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.platforminject.runtime.platform.fabric; 18 | 19 | import static eu.cloudnetservice.ext.platforminject.runtime.util.LazyClassInstantiationUtil.makeLazyLoader; 20 | 21 | import eu.cloudnetservice.ext.platforminject.api.spi.PlatformPluginManagerProvider; 22 | 23 | public final class FabricPlatformManagerProvider extends PlatformPluginManagerProvider { 24 | 25 | public FabricPlatformManagerProvider() { 26 | super("fabric", makeLazyLoader(FabricPlatformManagerProvider.class, "FabricPlatformPluginManager")); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ext/platform-inject-support/runtime/src/main/resources/META-INF/services/eu.cloudnetservice.ext.platforminject.api.spi.PlatformPluginManagerRegistry: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | eu.cloudnetservice.ext.platforminject.runtime.DefaultPlatformPluginManagerRegistry 18 | -------------------------------------------------------------------------------- /ext/updater/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /ext/updater/src/main/java/eu/cloudnetservice/ext/updater/Updater.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.updater; 18 | 19 | import lombok.NonNull; 20 | 21 | @FunctionalInterface 22 | public interface Updater { 23 | 24 | void executeUpdates(@NonNull T context, boolean onlyIfRequired) throws Exception; 25 | } 26 | -------------------------------------------------------------------------------- /ext/updater/src/main/java/eu/cloudnetservice/ext/updater/UpdaterRegistry.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.updater; 18 | 19 | import lombok.NonNull; 20 | 21 | public interface UpdaterRegistry { 22 | 23 | void runUpdater(@NonNull C context, boolean onlyRequiredUpdates) throws Exception; 24 | 25 | void registerUpdater(@NonNull Updater updater); 26 | } 27 | -------------------------------------------------------------------------------- /ext/updater/src/main/java/eu/cloudnetservice/ext/updater/util/GitHubUtil.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.ext.updater.util; 18 | 19 | import java.net.URI; 20 | import lombok.NonNull; 21 | 22 | public final class GitHubUtil { 23 | 24 | private static final String GITHUB_URL_FORMAT = "https://github.com/%s/raw/%s/%s"; 25 | 26 | private GitHubUtil() { 27 | throw new UnsupportedOperationException(); 28 | } 29 | 30 | public static @NonNull URI buildUri(@NonNull String repo, @NonNull String branch, @NonNull String filePath) { 31 | return URI.create(String.format(GITHUB_URL_FORMAT, repo, branch, filePath)); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | org.gradle.caching=true 17 | org.gradle.parallel=true 18 | org.gradle.warning.mode=all 19 | org.gradle.logging.level=info 20 | org.gradle.jvmargs=-Xmx5G -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 21 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionSha256Sum=7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip 5 | networkTimeout=10000 6 | validateDistributionUrl=true 7 | zipStoreBase=GRADLE_USER_HOME 8 | zipStorePath=wrapper/dists 9 | -------------------------------------------------------------------------------- /launcher/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /launcher/java22/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | alias(libs.plugins.shadow) 19 | } 20 | 21 | tasks.withType { 22 | archiveFileName.set(Files.launcher) 23 | } 24 | 25 | dependencies { 26 | "implementation"(projects.ext.updater) 27 | "implementation"(projects.launcher.java8) 28 | } 29 | 30 | applyJarMetadata("eu.cloudnetservice.launcher.java8.Launcher", "eu.cloudnetservice.launcher") 31 | -------------------------------------------------------------------------------- /launcher/java22/src/main/java/eu/cloudnetservice/launcher/java22/cnl/CnlCommand.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.launcher.java22.cnl; 18 | 19 | import java.util.Queue; 20 | import lombok.NonNull; 21 | 22 | @FunctionalInterface 23 | public interface CnlCommand { 24 | 25 | void execute(@NonNull Queue arguments); 26 | } 27 | -------------------------------------------------------------------------------- /launcher/java22/src/main/java/eu/cloudnetservice/launcher/java22/cnl/defaults/VarCnlCommand.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.launcher.java22.cnl.defaults; 18 | 19 | import eu.cloudnetservice.launcher.java22.cnl.CnlCommand; 20 | import java.util.Queue; 21 | import lombok.NonNull; 22 | 23 | public final class VarCnlCommand implements CnlCommand { 24 | 25 | @Override 26 | public void execute(@NonNull Queue arguments) { 27 | System.setProperty(arguments.remove(), String.join(" ", arguments)); 28 | // remove all arguments 29 | arguments.clear(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /launcher/java22/src/main/java/eu/cloudnetservice/launcher/java22/updater/LauncherUpdaterContext.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.launcher.java22.updater; 18 | 19 | import eu.cloudnetservice.launcher.java22.CloudNetLauncher; 20 | import java.util.Properties; 21 | import lombok.NonNull; 22 | 23 | public record LauncherUpdaterContext( 24 | @NonNull CloudNetLauncher launcher, 25 | @NonNull String repo, 26 | @NonNull String branch, 27 | @NonNull Properties checksums 28 | ) { 29 | 30 | } 31 | -------------------------------------------------------------------------------- /launcher/java22/src/main/java/eu/cloudnetservice/launcher/java22/util/BootstrapUtil.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.launcher.java22.util; 18 | 19 | import java.util.concurrent.TimeUnit; 20 | 21 | public final class BootstrapUtil { 22 | 23 | private BootstrapUtil() { 24 | throw new UnsupportedOperationException(); 25 | } 26 | 27 | public static void waitAndExit() { 28 | try { 29 | TimeUnit.SECONDS.sleep(5); 30 | } catch (InterruptedException ignored) { 31 | } 32 | 33 | // goodbye! 34 | System.exit(1); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /launcher/java22/src/test/resources/test.cnl: -------------------------------------------------------------------------------- 1 | var test_val Hello, world! 2 | var val signature 3 | var $val_value This is our $val -------------------------------------------------------------------------------- /launcher/java8/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | tasks.withType { 18 | sourceCompatibility = JavaVersion.VERSION_1_8.toString() 19 | targetCompatibility = JavaVersion.VERSION_1_8.toString() 20 | } 21 | -------------------------------------------------------------------------------- /launcher/patcher/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | tasks.withType { 18 | archiveFileName.set(Files.launcherPatcher) 19 | } 20 | 21 | tasks.withType { 22 | sourceCompatibility = JavaVersion.VERSION_17.toString() 23 | targetCompatibility = JavaVersion.VERSION_17.toString() 24 | } 25 | 26 | applyJarMetadata("eu.cloudnetservice.launcher.patcher.CloudNetLauncherPatcher", "eu.cloudnetservice.launcher") 27 | -------------------------------------------------------------------------------- /modules.json: -------------------------------------------------------------------------------- 1 | { 2 | "entries": [ 3 | { 4 | "official": true, 5 | "name": "CloudNet-Rest", 6 | "website": "https://github.com/CloudNetService/module-rest", 7 | "version": "0.2.0", 8 | "sha3256": "6047a4e4bfec69733750f9062cca19a3d28480d206c4b724030bed5db84f2d55", 9 | "description": "Module which provides a REST API for managing resources within the CloudNet system", 10 | "url": "https://github.com/CloudNetService/module-rest/releases/download/0.2.0/cloudnet-rest.jar", 11 | "maintainers": [ 12 | "CloudNetService" 13 | ], 14 | "releaseNotes": [], 15 | "dependingModules": [] 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /modules/bridge/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | dependencies { 17 | "api"(libs.adventureApi) 18 | "compileOnly"(projects.wrapperJvm.wrapperJvmApi) 19 | } 20 | -------------------------------------------------------------------------------- /modules/bridge/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/java/eu/cloudnetservice/modules/bridge/impl/platform/fabric/access/CustomPayloadAccessor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.bridge.impl.platform.fabric.access; 18 | 19 | import io.netty.buffer.ByteBuf; 20 | 21 | public interface CustomPayloadAccessor { 22 | 23 | void cloudnet_bridge$setData(ByteBuf data); 24 | 25 | ByteBuf cloudnet_bridge$getData(); 26 | } 27 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/java/eu/cloudnetservice/modules/bridge/impl/platform/fallback/FallbackProfile.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.bridge.impl.platform.fallback; 18 | 19 | import java.util.HashSet; 20 | import java.util.Set; 21 | import lombok.NonNull; 22 | 23 | public final class FallbackProfile { 24 | 25 | private final Set triedServices = new HashSet<>(); 26 | 27 | public void reset() { 28 | this.triedServices.clear(); 29 | } 30 | 31 | public void selectService(@NonNull String service) { 32 | this.triedServices.add(service); 33 | } 34 | 35 | public boolean hasTried(@NonNull String service) { 36 | return this.triedServices.contains(service); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/java/eu/cloudnetservice/modules/bridge/impl/platform/minestom/MinestomDefaultPermissionChecker.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.bridge.impl.platform.minestom; 18 | 19 | import eu.cloudnetservice.driver.registry.AutoService; 20 | import lombok.NonNull; 21 | import net.minestom.server.entity.Player; 22 | 23 | @AutoService(services = MinestomPermissionChecker.class, name = "default", markAsDefault = true) 24 | public class MinestomDefaultPermissionChecker implements MinestomPermissionChecker { 25 | 26 | @Override 27 | public boolean hasPermission(@NonNull Player player, @NonNull String permission) { 28 | return player.getPermissionLevel() > 0; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/java/eu/cloudnetservice/modules/bridge/impl/platform/minestom/MinestomPermissionChecker.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.bridge.impl.platform.minestom; 18 | 19 | import lombok.NonNull; 20 | import net.minestom.server.entity.Player; 21 | 22 | @FunctionalInterface 23 | public interface MinestomPermissionChecker { 24 | 25 | boolean hasPermission(@NonNull Player player, @NonNull String permission); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/resources/META-INF/sponge_plugins.json.template: -------------------------------------------------------------------------------- 1 | { 2 | "license": "Apache-2.0" 3 | } 4 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/resources/cloudnet_bridge.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v2 named 2 | # fields 3 | accessible field net/minecraft/network/protocol/handshake/ClientIntentionPacket hostName Ljava/lang/String; 4 | mutable field net/minecraft/network/protocol/handshake/ClientIntentionPacket hostName Ljava/lang/String; 5 | accessible field net/minecraft/server/network/ServerCommonPacketListenerImpl connection Lnet/minecraft/network/Connection; 6 | accessible field net/minecraft/network/Connection channel Lio/netty/channel/Channel; 7 | accessible field net/minecraft/network/Connection address Ljava/net/SocketAddress; 8 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/resources/cloudnet_bridge.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "compatibilityLevel": "JAVA_16", 4 | "package": "eu.cloudnetservice.modules.bridge.impl.platform.fabric.mixin", 5 | "server": [ 6 | "forwarding.ClientIntentionPacketMixin", 7 | "forwarding.CompressionThresholdMixin", 8 | "forwarding.ServerHandshakePacketListenerMixin", 9 | "forwarding.ServerLoginPacketListenerMixin", 10 | "handling.MinecraftServerMixin", 11 | "handling.PlayerListMixin", 12 | "payload.CustomPayloadMixin" 13 | ], 14 | "injectors": { 15 | "defaultRequire": 1 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /modules/bridge/impl/src/main/resources/fabric.mod.json.template: -------------------------------------------------------------------------------- 1 | { 2 | "license": "Apache 2.0", 3 | "mixins": [ 4 | "cloudnet_bridge.mixins.json" 5 | ], 6 | "accessWidener": "cloudnet_bridge.accesswidener" 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloudflare/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "compileOnly"(projects.utils.utilsBase) 19 | } 20 | -------------------------------------------------------------------------------- /modules/cloudflare/api/src/main/java/eu/cloudnetservice/modules/cloudflare/config/CloudflareConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.cloudflare.config; 18 | 19 | import java.util.Collection; 20 | import lombok.NonNull; 21 | 22 | public record CloudflareConfiguration(@NonNull Collection entries) { 23 | 24 | } 25 | -------------------------------------------------------------------------------- /modules/cloudflare/api/src/main/java/eu/cloudnetservice/modules/cloudflare/config/CloudflareGroupConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.cloudflare.config; 18 | 19 | import lombok.NonNull; 20 | 21 | public record CloudflareGroupConfiguration(@NonNull String name, @NonNull String sub, int priority, int weight) { 22 | 23 | } 24 | -------------------------------------------------------------------------------- /modules/cloudflare/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/cloudflare/impl/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | alias(libs.plugins.shadow) 19 | } 20 | 21 | tasks.withType { 22 | archiveFileName.set(Files.cloudflare) 23 | } 24 | 25 | dependencies { 26 | "compileOnly"(libs.bundles.unirest) 27 | "compileOnly"(projects.node.nodeImpl) 28 | "compileOnly"(projects.utils.utilsBase) 29 | 30 | "implementation"(projects.modules.cloudflare.cloudflareApi) 31 | } 32 | 33 | moduleJson { 34 | author = "CloudNetService" 35 | name = "CloudNet-CloudFlare" 36 | main = "eu.cloudnetservice.modules.cloudflare.impl.CloudNetCloudflareModule" 37 | description = "Node extension for automatic creation of SRV entries for proxy services" 38 | storesSensitiveData = true 39 | } 40 | -------------------------------------------------------------------------------- /modules/cloudflare/impl/src/main/java/eu/cloudnetservice/modules/cloudflare/impl/cloudflare/DnsRecordDetail.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.cloudflare.impl.cloudflare; 18 | 19 | import eu.cloudnetservice.modules.cloudflare.config.CloudflareConfigurationEntry; 20 | import eu.cloudnetservice.modules.cloudflare.impl.dns.DnsRecord; 21 | import lombok.NonNull; 22 | 23 | public record DnsRecordDetail( 24 | @NonNull String id, 25 | @NonNull DnsRecord dnsRecord, 26 | @NonNull CloudflareConfigurationEntry configurationEntry 27 | ) { 28 | 29 | } 30 | -------------------------------------------------------------------------------- /modules/cloudflare/impl/src/main/java/eu/cloudnetservice/modules/cloudflare/impl/dns/DnsType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.cloudflare.impl.dns; 18 | 19 | public enum DnsType { 20 | 21 | A, 22 | AAAA, 23 | HTTPS, 24 | TXT, 25 | SRV, 26 | LOC, 27 | MX, 28 | NS, 29 | SPF, 30 | CERT, 31 | DNSKEY, 32 | DS, 33 | NAPTR, 34 | SMIMEA, 35 | SSHFP, 36 | SVCB, 37 | TLSA, 38 | URI 39 | } 40 | -------------------------------------------------------------------------------- /modules/database-mongodb/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/database-mongodb/impl/src/test/java/eu/cloudnetservice/modules/mongodb/junit/EnableServicesInject.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.mongodb.junit; 18 | 19 | import java.lang.annotation.ElementType; 20 | import java.lang.annotation.Inherited; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | import org.junit.jupiter.api.extension.ExtendWith; 25 | 26 | @Inherited 27 | @Target(ElementType.TYPE) 28 | @Retention(RetentionPolicy.RUNTIME) 29 | @ExtendWith(EnableServicesInjectExtension.class) 30 | public @interface EnableServicesInject { 31 | 32 | } 33 | -------------------------------------------------------------------------------- /modules/database-mongodb/impl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | [%d{dd.MM HH:mm:ss.SSS}] %-5level: %msg%n 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /modules/database-mysql/api/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/modules/database-mysql/api/build.gradle.kts -------------------------------------------------------------------------------- /modules/database-mysql/api/src/main/java/eu/cloudnetservice/modules/mysql/config/MySQLConnectionEndpoint.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.mysql.config; 18 | 19 | import eu.cloudnetservice.driver.network.HostAndPort; 20 | import lombok.NonNull; 21 | 22 | public record MySQLConnectionEndpoint(@NonNull String database, @NonNull HostAndPort address) { 23 | 24 | } 25 | -------------------------------------------------------------------------------- /modules/database-mysql/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/modules/database-mysql/build.gradle.kts -------------------------------------------------------------------------------- /modules/database-mysql/impl/src/test/java/eu/cloudnetservice/modules/mysql/impl/junit/EnableServicesInject.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.mysql.impl.junit; 18 | 19 | import java.lang.annotation.ElementType; 20 | import java.lang.annotation.Inherited; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | import org.junit.jupiter.api.extension.ExtendWith; 25 | 26 | @Inherited 27 | @Target(ElementType.TYPE) 28 | @Retention(RetentionPolicy.RUNTIME) 29 | @ExtendWith(EnableServicesInjectExtension.class) 30 | public @interface EnableServicesInject { 31 | 32 | } 33 | -------------------------------------------------------------------------------- /modules/database-mysql/impl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | [%d{dd.MM HH:mm:ss.SSS}] %-5level: %msg%n 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /modules/dockerized-services/api/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/modules/dockerized-services/api/build.gradle.kts -------------------------------------------------------------------------------- /modules/dockerized-services/api/src/main/java/eu/cloudnetservice/modules/docker/config/DockerPortMapping.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.docker.config; 18 | 19 | import lombok.NonNull; 20 | import org.jetbrains.annotations.Range; 21 | 22 | public record DockerPortMapping(@NonNull Protocol protocol, @Range(from = 0, to = 0xFFFF) int port) { 23 | 24 | public enum Protocol { 25 | TCP, 26 | UDP, 27 | SCTP, 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /modules/dockerized-services/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/modules/dockerized-services/build.gradle.kts -------------------------------------------------------------------------------- /modules/influx/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "compileOnly"(libs.influxClient) 19 | } 20 | -------------------------------------------------------------------------------- /modules/influx/api/src/main/java/eu/cloudnetservice/modules/influx/InfluxConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.influx; 18 | 19 | import eu.cloudnetservice.driver.network.HostAndPort; 20 | import lombok.NonNull; 21 | 22 | public record InfluxConfiguration( 23 | @NonNull HostAndPort databaseAddress, 24 | @NonNull String token, 25 | @NonNull String org, 26 | @NonNull String bucket, 27 | int publishDelaySeconds 28 | ) { 29 | 30 | public @NonNull String connectUrl() { 31 | // ignore ports < 0 32 | if (this.databaseAddress.validPort()) { 33 | return this.databaseAddress.toString(); 34 | } else { 35 | return this.databaseAddress.host(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /modules/influx/api/src/main/java/eu/cloudnetservice/modules/influx/publish/Publisher.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.influx.publish; 18 | 19 | import com.influxdb.client.write.Point; 20 | import java.util.Collection; 21 | import lombok.NonNull; 22 | 23 | @FunctionalInterface 24 | public interface Publisher { 25 | 26 | @NonNull Collection createPoints(); 27 | } 28 | -------------------------------------------------------------------------------- /modules/influx/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/influx/impl/src/main/java/eu/cloudnetservice/modules/influx/impl/util/PointUtil.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.influx.impl.util; 18 | 19 | import com.influxdb.client.domain.WritePrecision; 20 | import com.influxdb.client.write.Point; 21 | import lombok.NonNull; 22 | 23 | public final class PointUtil { 24 | 25 | private PointUtil() { 26 | throw new UnsupportedOperationException(); 27 | } 28 | 29 | public static @NonNull Point point(@NonNull String measurement) { 30 | return Point.measurement(measurement).time(System.currentTimeMillis(), WritePrecision.MS); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /modules/labymod/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "compileOnly"(projects.modules.bridge.bridgeApi) 19 | } 20 | -------------------------------------------------------------------------------- /modules/labymod/api/src/main/java/eu/cloudnetservice/modules/labymod/LabyModManagement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.labymod; 18 | 19 | import eu.cloudnetservice.modules.labymod.config.LabyModConfiguration; 20 | import lombok.NonNull; 21 | 22 | public interface LabyModManagement { 23 | 24 | String LABYMOD_CLIENT_CHANNEL = "labymod3:main"; 25 | String LABYMOD_MODULE_CHANNEL = "labymod_internal"; 26 | String LABYMOD_UPDATE_CONFIG = "update_labymod_config"; 27 | 28 | @NonNull 29 | LabyModConfiguration configuration(); 30 | 31 | void configuration(@NonNull LabyModConfiguration configuration); 32 | } 33 | -------------------------------------------------------------------------------- /modules/labymod/api/src/main/java/eu/cloudnetservice/modules/labymod/config/LabyModBanner.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.labymod.config; 18 | 19 | import lombok.NonNull; 20 | 21 | public record LabyModBanner(boolean enabled, @NonNull String bannerUrl) { 22 | 23 | } 24 | -------------------------------------------------------------------------------- /modules/labymod/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/npcs/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "compileOnly"(projects.modules.bridge.bridgeApi) 19 | } 20 | -------------------------------------------------------------------------------- /modules/npcs/impl/src/main/java/eu/cloudnetservice/modules/npc/impl/InternalNPCManagement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.npc.impl; 18 | 19 | import eu.cloudnetservice.modules.bridge.WorldPosition; 20 | import eu.cloudnetservice.modules.npc.NPC; 21 | import eu.cloudnetservice.modules.npc.NPCManagement; 22 | import eu.cloudnetservice.modules.npc.configuration.NPCConfiguration; 23 | import lombok.NonNull; 24 | 25 | public interface InternalNPCManagement extends NPCManagement { 26 | 27 | void handleInternalNPCCreate(@NonNull NPC npc); 28 | 29 | void handleInternalNPCRemove(@NonNull WorldPosition position); 30 | 31 | void handleInternalNPCConfigUpdate(@NonNull NPCConfiguration configuration); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /modules/npcs/impl/src/main/java/eu/cloudnetservice/modules/npc/impl/_deprecated/NPCAction.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.npc.impl._deprecated; 18 | 19 | 20 | public enum NPCAction { 21 | 22 | OPEN_INVENTORY, 23 | DIRECT_CONNECT_RANDOM, 24 | DIRECT_CONNECT_LOWEST_PLAYERS, 25 | DIRECT_CONNECT_HIGHEST_PLAYERS, 26 | NOTHING 27 | 28 | } 29 | -------------------------------------------------------------------------------- /modules/npcs/impl/src/main/java/eu/cloudnetservice/modules/npc/impl/_deprecated/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @Deprecated 18 | @ApiStatus.ScheduledForRemoval 19 | package eu.cloudnetservice.modules.npc.impl._deprecated; 20 | 21 | import org.jetbrains.annotations.ApiStatus; 22 | -------------------------------------------------------------------------------- /modules/report/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/report/api/src/main/java/eu/cloudnetservice/modules/report/config/ReportConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.report.config; 18 | 19 | import java.util.Collection; 20 | import lombok.NonNull; 21 | 22 | public record ReportConfiguration(@NonNull Collection pasteServers) { 23 | 24 | } 25 | -------------------------------------------------------------------------------- /modules/report/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/report/impl/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | alias(libs.plugins.shadow) 19 | } 20 | 21 | tasks.withType { 22 | archiveFileName.set(Files.report) 23 | } 24 | 25 | dependencies { 26 | "moduleLibrary"(libs.oshi) 27 | "compileOnly"(libs.unirest) 28 | "compileOnly"(projects.utils.utilsBase) 29 | "implementation"(projects.modules.report.reportApi) 30 | 31 | "annotationProcessor"(projects.driver.driverAp) 32 | } 33 | 34 | moduleJson { 35 | name = "CloudNet-Report" 36 | author = "CloudNetService" 37 | main = "eu.cloudnetservice.modules.report.impl.CloudNetReportModule" 38 | description = "Node extension to automatically report and paste a snapshot of the current CloudNet runtime" 39 | } 40 | -------------------------------------------------------------------------------- /modules/report/impl/src/main/java/eu/cloudnetservice/modules/report/impl/emitter/ReportDataEmitter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.report.impl.emitter; 18 | 19 | import lombok.NonNull; 20 | 21 | public interface ReportDataEmitter { 22 | 23 | default @NonNull Class emittingType() { 24 | return Object.class; 25 | } 26 | 27 | @NonNull ReportDataWriter emitData(@NonNull ReportDataWriter writer); 28 | } 29 | -------------------------------------------------------------------------------- /modules/report/impl/src/main/java/eu/cloudnetservice/modules/report/impl/util/ReportConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.report.impl.util; 18 | 19 | import java.time.format.DateTimeFormatter; 20 | 21 | public final class ReportConstants { 22 | 23 | public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); 24 | 25 | private ReportConstants() { 26 | throw new UnsupportedOperationException(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /modules/report/impl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | [%d{dd.MM HH:mm:ss.SSS}] %-5level: %msg%n 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /modules/signs/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "compileOnly"(projects.modules.bridge.bridgeApi) 19 | } 20 | -------------------------------------------------------------------------------- /modules/signs/impl/src/main/java/eu/cloudnetservice/modules/signs/impl/_deprecated/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Placeholder to bridge the old objects to the new mappings for auto conversation. Will be removed in the next 19 | * release. 20 | */ 21 | @Deprecated 22 | @ApiStatus.ScheduledForRemoval 23 | package eu.cloudnetservice.modules.signs.impl._deprecated; 24 | 25 | import org.jetbrains.annotations.ApiStatus; 26 | -------------------------------------------------------------------------------- /modules/signs/impl/src/main/resources/META-INF/sponge_plugins.json.template: -------------------------------------------------------------------------------- 1 | { 2 | "license": "Apache-2.0" 3 | } 4 | -------------------------------------------------------------------------------- /modules/smart/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/modules/smart/build.gradle.kts -------------------------------------------------------------------------------- /modules/storage-s3/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/storage-s3/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/storage-s3/impl/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | alias(libs.plugins.shadow) 19 | } 20 | 21 | tasks.withType { 22 | archiveFileName.set(Files.storageS3) 23 | } 24 | 25 | dependencies { 26 | "moduleLibrary"(libs.awsSdk) 27 | "compileOnly"(projects.utils.utilsBase) 28 | "implementation"(projects.modules.storageS3.storageS3Api) 29 | 30 | "testImplementation"(projects.utils.utilsBase) 31 | } 32 | 33 | moduleJson { 34 | author = "CloudNetService" 35 | name = "CloudNet-Storage-S3" 36 | main = "eu.cloudnetservice.modules.s3.impl.S3TemplateStorageModule" 37 | description = "CloudNet extension, which includes the s3 storage system" 38 | runtimeModule = true 39 | storesSensitiveData = true 40 | } 41 | -------------------------------------------------------------------------------- /modules/storage-s3/impl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | [%d{dd.MM HH:mm:ss.SSS}] %-5level: %msg%n 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /modules/storage-sftp/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/storage-sftp/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/storage-sftp/impl/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | alias(libs.plugins.shadow) 19 | } 20 | 21 | tasks.withType { 22 | archiveFileName.set(Files.storageSftp) 23 | } 24 | 25 | dependencies { 26 | "moduleLibrary"(libs.sshj) 27 | "compileOnly"(projects.utils.utilsBase) 28 | "implementation"(projects.modules.storageSftp.storageSftpApi) 29 | } 30 | 31 | moduleJson { 32 | author = "CloudNetService" 33 | name = "CloudNet-Storage-SFTP" 34 | main = "eu.cloudnetservice.modules.sftp.impl.SFTPTemplateStorageModule" 35 | description = "CloudNet extension, which includes the sftp storage system" 36 | storesSensitiveData = true 37 | runtimeModule = true 38 | } 39 | -------------------------------------------------------------------------------- /modules/storage-sftp/impl/src/test/resources/hostkey.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIICXAIBAAKBgQDdfIWeSV4o68dRrKSzFd/Bk51E65UTmmSrmW0O1ohtzi6HzsDP 3 | jXgCtlTt3FqTcfFfI92IlTr4JWqC9UK1QT1ZTeng0MkPQmv68hDANHbt5CpETZHj 4 | W5q4OOgWhVvj5IyOC2NZHtKlJBkdsMAa15ouOOJLzBvAvbqOR/yUROsEiQIDAQAB 5 | AoGBANG3JDW6NoP8rF/zXoeLgLCj+tfVUPSczhGFVrQkAk4mWfyRkhN0WlwHFOec 6 | K89MpkV1ij/XPVzU4MNbQ2yod1KiDylzvweYv+EaEhASCmYNs6LS03punml42SL9 7 | 97tOmWfVJXxlQoLiY6jHPU97vTc65k8gL+gmmrpchsW0aqmZAkEA/c8zfmKvY37T 8 | cxcLLwzwsqqH7g2KZGTf9aRmx2ebdW+QKviJJhbdluDgl1TNNFj5vCLznFDRHiqJ 9 | wq0wkZ39cwJBAN9l5v3kdXj21UrurNPdlV0n2GZBt2vblooQC37XHF97r2zM7Ou+ 10 | Lg6MyfJClyguhWL9dxnGbf3btQ0l3KDstxMCQCRaiEqjAfIjWVATzeNIXDWLHXso 11 | b1kf5cA+cwY+vdKdTy4IeUR+Y/DXdvPWDqpf0C11aCVMohdLCn5a5ikFUycCQDhV 12 | K/BuAallJNfmY7JxN87r00fF3ojWMJnT/fIYMFFrkQrwifXQWTDWE76BSDibsosJ 13 | u1TGksnm8zrDh2UVC/0CQFrHTiSl/3DHvWAbOJawGKg46cnlDcAhSyV8Frs8/dlP 14 | 7YGG3eqkw++lsghqmFO6mRUTKsBmiiB2wgLGhL5pyYY= 15 | -----END RSA PRIVATE KEY----- 16 | -------------------------------------------------------------------------------- /modules/storage-sftp/impl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | [%d{dd.MM HH:mm:ss.SSS}] %-5level: %msg%n 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /modules/syncproxy/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | dependencies { 17 | "compileOnly"(projects.modules.bridge.bridgeApi) 18 | } 19 | -------------------------------------------------------------------------------- /modules/syncproxy/api/src/main/java/eu/cloudnetservice/modules/syncproxy/SyncProxyConfigurationUpdateEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.syncproxy; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.modules.syncproxy.config.SyncProxyConfiguration; 21 | import lombok.NonNull; 22 | 23 | public class SyncProxyConfigurationUpdateEvent extends Event { 24 | 25 | private final SyncProxyConfiguration configuration; 26 | 27 | public SyncProxyConfigurationUpdateEvent(@NonNull SyncProxyConfiguration configuration) { 28 | this.configuration = configuration; 29 | } 30 | 31 | public @NonNull SyncProxyConfiguration configuration() { 32 | return this.configuration; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /modules/syncproxy/api/src/main/java/eu/cloudnetservice/modules/syncproxy/SyncProxyConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.syncproxy; 18 | 19 | public final class SyncProxyConstants { 20 | 21 | public static final String SYNC_PROXY_CHANNEL = "sync_proxy_internal"; 22 | public static final String SYNC_PROXY_UPDATE_CONFIG = "update_syncproxy_config"; 23 | public static final String SYNC_PROXY_CONFIG_REQUEST = "request_syncproxy_config"; 24 | 25 | private SyncProxyConstants() { 26 | throw new UnsupportedOperationException(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /modules/syncproxy/api/src/main/java/eu/cloudnetservice/modules/syncproxy/SyncProxyManagement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.modules.syncproxy; 18 | 19 | import eu.cloudnetservice.modules.syncproxy.config.SyncProxyConfiguration; 20 | import lombok.NonNull; 21 | 22 | public interface SyncProxyManagement { 23 | 24 | @NonNull 25 | SyncProxyConfiguration configuration(); 26 | 27 | void configuration(@NonNull SyncProxyConfiguration configuration); 28 | } 29 | -------------------------------------------------------------------------------- /modules/syncproxy/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /modules/syncproxy/impl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | [%d{dd.MM HH:mm:ss.SSS}] %-5level: %msg%n 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /node/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | api(projects.driver.driverApi) 19 | compileOnlyApi(libs.bundles.cloud) 20 | } 21 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/cluster/LocalNodeServer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.cluster; 18 | 19 | public interface LocalNodeServer extends NodeServer { 20 | 21 | void updateLocalSnapshot(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/cluster/NodeServerState.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.cluster; 18 | 19 | public enum NodeServerState { 20 | UNAVAILABLE, 21 | SYNCING, 22 | READY, 23 | DISCONNECTED 24 | } 25 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/CloudNetNodePostInitializationEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | 21 | public final class CloudNetNodePostInitializationEvent extends Event { 22 | 23 | } 24 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/cluster/LocalNodeSnapshotConfigureEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.cluster; 18 | 19 | import eu.cloudnetservice.driver.cluster.NodeInfoSnapshot; 20 | import eu.cloudnetservice.driver.event.Event; 21 | import lombok.NonNull; 22 | 23 | public final class LocalNodeSnapshotConfigureEvent extends Event { 24 | 25 | private final NodeInfoSnapshot nodeInfoSnapshot; 26 | 27 | public LocalNodeSnapshotConfigureEvent(@NonNull NodeInfoSnapshot nodeInfoSnapshot) { 28 | this.nodeInfoSnapshot = nodeInfoSnapshot; 29 | } 30 | 31 | public @NonNull NodeInfoSnapshot snapshot() { 32 | return this.nodeInfoSnapshot; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/group/LocalGroupConfigurationAddEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.group; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.driver.service.GroupConfiguration; 21 | import lombok.NonNull; 22 | 23 | public class LocalGroupConfigurationAddEvent extends Event { 24 | 25 | private GroupConfiguration group; 26 | 27 | public LocalGroupConfigurationAddEvent(@NonNull GroupConfiguration group) { 28 | this.group = group; 29 | } 30 | 31 | public @NonNull GroupConfiguration group() { 32 | return this.group; 33 | } 34 | 35 | public void group(@NonNull GroupConfiguration group) { 36 | this.group = group; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/group/LocalGroupConfigurationRemoveEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.group; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.driver.service.GroupConfiguration; 21 | import lombok.NonNull; 22 | 23 | public class LocalGroupConfigurationRemoveEvent extends Event { 24 | 25 | private final GroupConfiguration group; 26 | 27 | public LocalGroupConfigurationRemoveEvent(@NonNull GroupConfiguration group) { 28 | this.group = group; 29 | } 30 | 31 | public @NonNull GroupConfiguration group() { 32 | return this.group; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/instance/CloudNetTickEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.instance; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.node.tick.TickLoop; 21 | import lombok.NonNull; 22 | 23 | public final class CloudNetTickEvent extends Event { 24 | 25 | private final TickLoop ticker; 26 | 27 | public CloudNetTickEvent(@NonNull TickLoop ticker) { 28 | this.ticker = ticker; 29 | } 30 | 31 | public @NonNull TickLoop ticker() { 32 | return this.ticker; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/instance/CloudNetTickServiceStartEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.instance; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.node.tick.TickLoop; 21 | import lombok.NonNull; 22 | 23 | public class CloudNetTickServiceStartEvent extends Event { 24 | 25 | private final TickLoop ticker; 26 | 27 | public CloudNetTickServiceStartEvent(@NonNull TickLoop ticker) { 28 | this.ticker = ticker; 29 | } 30 | 31 | public @NonNull TickLoop ticker() { 32 | return this.ticker; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/service/CloudServiceCreateEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.service; 18 | 19 | import eu.cloudnetservice.node.service.CloudService; 20 | import lombok.NonNull; 21 | 22 | public final class CloudServiceCreateEvent extends CloudServiceEvent { 23 | 24 | public CloudServiceCreateEvent(@NonNull CloudService service) { 25 | super(service); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/service/CloudServicePostPrepareEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.service; 18 | 19 | import eu.cloudnetservice.node.service.CloudService; 20 | import lombok.NonNull; 21 | 22 | public final class CloudServicePostPrepareEvent extends CloudServiceEvent { 23 | 24 | public CloudServicePostPrepareEvent(@NonNull CloudService service) { 25 | super(service); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/service/CloudServicePostProcessStartEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.service; 18 | 19 | import eu.cloudnetservice.node.service.CloudService; 20 | import lombok.NonNull; 21 | 22 | public final class CloudServicePostProcessStartEvent extends CloudServiceEvent { 23 | 24 | public CloudServicePostProcessStartEvent(@NonNull CloudService service) { 25 | super(service); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/service/CloudServicePreForceStopEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.service; 18 | 19 | import eu.cloudnetservice.node.service.CloudService; 20 | import lombok.NonNull; 21 | 22 | public final class CloudServicePreForceStopEvent extends CloudServiceEvent { 23 | 24 | public CloudServicePreForceStopEvent(@NonNull CloudService service) { 25 | super(service); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/service/CloudServicePrePrepareEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.service; 18 | 19 | import eu.cloudnetservice.node.service.CloudService; 20 | import lombok.NonNull; 21 | 22 | public final class CloudServicePrePrepareEvent extends CloudServiceEvent { 23 | 24 | public CloudServicePrePrepareEvent(@NonNull CloudService service) { 25 | super(service); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/service/CloudServicePreProcessStartEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.service; 18 | 19 | import eu.cloudnetservice.node.service.CloudService; 20 | import lombok.NonNull; 21 | 22 | public final class CloudServicePreProcessStartEvent extends CloudServiceEvent { 23 | 24 | public CloudServicePreProcessStartEvent(@NonNull CloudService service) { 25 | super(service); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/task/LocalServiceTaskAddEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.task; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.driver.service.ServiceTask; 21 | import lombok.NonNull; 22 | 23 | public final class LocalServiceTaskAddEvent extends Event { 24 | 25 | private ServiceTask task; 26 | 27 | public LocalServiceTaskAddEvent(@NonNull ServiceTask task) { 28 | this.task = task; 29 | } 30 | 31 | public @NonNull ServiceTask task() { 32 | return this.task; 33 | } 34 | 35 | public void task(@NonNull ServiceTask task) { 36 | this.task = task; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/event/task/LocalServiceTaskRemoveEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.event.task; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.driver.service.ServiceTask; 21 | import lombok.NonNull; 22 | 23 | public class LocalServiceTaskRemoveEvent extends Event { 24 | 25 | private final ServiceTask task; 26 | 27 | public LocalServiceTaskRemoveEvent(@NonNull ServiceTask task) { 28 | this.task = task; 29 | } 30 | 31 | public @NonNull ServiceTask task() { 32 | return this.task; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/service/LocalCloudServiceFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.service; 18 | 19 | import eu.cloudnetservice.driver.base.Named; 20 | import eu.cloudnetservice.driver.service.ServiceConfiguration; 21 | import lombok.NonNull; 22 | 23 | public interface LocalCloudServiceFactory extends Named { 24 | 25 | @NonNull CloudService createCloudService(@NonNull CloudServiceManager manager, @NonNull ServiceConfiguration configuration); 26 | } 27 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/service/ServiceConfigurationPreparer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.service; 18 | 19 | import lombok.NonNull; 20 | 21 | @FunctionalInterface 22 | public interface ServiceConfigurationPreparer { 23 | 24 | void configure(@NonNull CloudService cloudService); 25 | } 26 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/service/ServiceConsoleLineHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.service; 18 | 19 | import lombok.NonNull; 20 | 21 | @FunctionalInterface 22 | public interface ServiceConsoleLineHandler { 23 | 24 | void handleLine(@NonNull ServiceConsoleLogCache source, @NonNull String line, boolean stderr); 25 | } 26 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/tick/ShutdownHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.tick; 18 | 19 | public interface ShutdownHandler { 20 | 21 | void shutdown(); 22 | } 23 | -------------------------------------------------------------------------------- /node/api/src/main/java/eu/cloudnetservice/node/tick/TickLoop.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.tick; 18 | 19 | import lombok.NonNull; 20 | 21 | public interface TickLoop { 22 | 23 | int TPS = 10; 24 | 25 | @NonNull Scheduler scheduler(); 26 | 27 | boolean running(); 28 | 29 | void pause(); 30 | 31 | void resume(); 32 | 33 | long currentTick(); 34 | } 35 | -------------------------------------------------------------------------------- /node/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | 18 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/cluster/sync/prettyprint/GulfHelper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.cluster.sync.prettyprint; 18 | 19 | import dev.derklaro.gulf.Gulf; 20 | import dev.derklaro.gulf.diff.Change; 21 | import java.util.Collection; 22 | import lombok.NonNull; 23 | import org.jetbrains.annotations.Nullable; 24 | 25 | public final class GulfHelper { 26 | 27 | private static final Gulf GULF = Gulf.builder().build(); 28 | 29 | private GulfHelper() { 30 | throw new UnsupportedOperationException(); 31 | } 32 | 33 | public static @NonNull Collection> findChanges(@Nullable Object left, @Nullable Object right) { 34 | return GULF.findChanges(left, right); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/command/sub/ClearCommand.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.command.sub; 18 | 19 | import eu.cloudnetservice.node.command.annotation.Description; 20 | import eu.cloudnetservice.node.impl.console.Console; 21 | import jakarta.inject.Singleton; 22 | import lombok.NonNull; 23 | import org.incendo.cloud.annotations.Command; 24 | import org.incendo.cloud.annotations.Permission; 25 | 26 | @Singleton 27 | @Permission("cloudnet.command.clear") 28 | @Description("command-clear-description") 29 | public final class ClearCommand { 30 | 31 | @Command("clear") 32 | public void clearConsole(@NonNull Console console) { 33 | console.clearScreen(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/console/handler/ConsoleInputHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.console.handler; 18 | 19 | import lombok.NonNull; 20 | 21 | public abstract class ConsoleInputHandler extends Toggleable { 22 | 23 | public abstract void handleInput(@NonNull String line); 24 | } 25 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/console/handler/ConsoleTabCompleteHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.console.handler; 18 | 19 | import java.util.Collection; 20 | import lombok.NonNull; 21 | 22 | public abstract class ConsoleTabCompleteHandler extends Toggleable { 23 | 24 | public abstract @NonNull Collection completeInput(@NonNull String line); 25 | } 26 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/console/handler/Toggleable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.console.handler; 18 | 19 | public abstract class Toggleable { 20 | 21 | private boolean enabled = true; 22 | 23 | public boolean enabled() { 24 | return this.enabled; 25 | } 26 | 27 | public void enabled(boolean enabled) { 28 | this.enabled = enabled; 29 | } 30 | 31 | public void toggle() { 32 | this.enabled = !this.enabled; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/database/NodeDatabaseProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.database; 18 | 19 | import eu.cloudnetservice.driver.base.Named; 20 | import eu.cloudnetservice.driver.database.DatabaseProvider; 21 | import eu.cloudnetservice.node.database.LocalDatabase; 22 | import lombok.NonNull; 23 | 24 | public interface NodeDatabaseProvider extends DatabaseProvider, Named, AutoCloseable { 25 | 26 | boolean init() throws Exception; 27 | 28 | @Override 29 | @NonNull 30 | LocalDatabase database(@NonNull String name); 31 | } 32 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/event/log/LoggingEntryEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.event.log; 18 | 19 | import ch.qos.logback.classic.spi.ILoggingEvent; 20 | import eu.cloudnetservice.driver.event.Event; 21 | import lombok.NonNull; 22 | 23 | public final class LoggingEntryEvent extends Event { 24 | 25 | private final ILoggingEvent record; 26 | 27 | public LoggingEntryEvent(@NonNull ILoggingEvent record) { 28 | this.record = record; 29 | } 30 | 31 | public @NonNull ILoggingEvent logEntry() { 32 | return this.record; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/event/setup/SetupCancelledEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.event.setup; 18 | 19 | import eu.cloudnetservice.node.impl.console.animation.setup.ConsoleSetupAnimation; 20 | import lombok.NonNull; 21 | 22 | public class SetupCancelledEvent extends SetupEvent { 23 | 24 | public SetupCancelledEvent(@NonNull ConsoleSetupAnimation setup) { 25 | super(setup); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/event/setup/SetupCompleteEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.event.setup; 18 | 19 | import eu.cloudnetservice.node.impl.console.animation.setup.ConsoleSetupAnimation; 20 | import lombok.NonNull; 21 | 22 | public class SetupCompleteEvent extends SetupEvent { 23 | 24 | public SetupCompleteEvent(@NonNull ConsoleSetupAnimation setup) { 25 | super(setup); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/event/setup/SetupEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.event.setup; 18 | 19 | import eu.cloudnetservice.driver.event.Event; 20 | import eu.cloudnetservice.node.impl.console.animation.setup.ConsoleSetupAnimation; 21 | import lombok.NonNull; 22 | 23 | public class SetupEvent extends Event { 24 | 25 | private final ConsoleSetupAnimation setup; 26 | 27 | public SetupEvent(@NonNull ConsoleSetupAnimation setup) { 28 | this.setup = setup; 29 | } 30 | 31 | public @NonNull ConsoleSetupAnimation setup() { 32 | return this.setup; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/event/setup/SetupInitiateEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.event.setup; 18 | 19 | import eu.cloudnetservice.node.impl.console.animation.setup.ConsoleSetupAnimation; 20 | import lombok.NonNull; 21 | 22 | public class SetupInitiateEvent extends SetupEvent { 23 | 24 | public SetupInitiateEvent(@NonNull ConsoleSetupAnimation setup) { 25 | super(setup); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/module/updater/ModuleUpdaterContext.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.module.updater; 18 | 19 | import eu.cloudnetservice.node.impl.module.ModulesHolder; 20 | import java.nio.file.Path; 21 | import java.util.Map; 22 | import lombok.NonNull; 23 | 24 | public record ModuleUpdaterContext( 25 | @NonNull ModulesHolder modules, 26 | @NonNull Map moduleNames, 27 | @NonNull String updaterRepo, 28 | @NonNull String updaterBranch 29 | ) { 30 | 31 | } 32 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/service/InternalCloudService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.service; 18 | 19 | import eu.cloudnetservice.driver.network.NetworkChannel; 20 | import eu.cloudnetservice.driver.service.ServiceInfoSnapshot; 21 | import eu.cloudnetservice.node.service.CloudService; 22 | import lombok.NonNull; 23 | import org.jetbrains.annotations.Nullable; 24 | 25 | public interface InternalCloudService extends CloudService { 26 | 27 | void networkChannel(@Nullable NetworkChannel channel); 28 | 29 | void handleServiceRegister(); 30 | 31 | void updateServiceInfoSnapshot(@NonNull ServiceInfoSnapshot serviceInfoSnapshot); 32 | } 33 | -------------------------------------------------------------------------------- /node/impl/src/main/java/eu/cloudnetservice/node/impl/setup/DefaultSetup.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.setup; 18 | 19 | import eu.cloudnetservice.node.impl.console.animation.setup.ConsoleSetupAnimation; 20 | import lombok.NonNull; 21 | 22 | public interface DefaultSetup { 23 | 24 | void applyQuestions(@NonNull ConsoleSetupAnimation animation); 25 | 26 | default void handleResults(@NonNull ConsoleSetupAnimation animation) { 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /node/impl/src/main/resources/files/limboloohp/server.properties: -------------------------------------------------------------------------------- 1 | #For explaination of what each of the options does, please visit: 2 | #https://github.com/LOOHP/Limbo/blob/master/src/main/resources/server.properties 3 | #Thu May 23 16:16:17 CEST 2024 4 | allow-chat=true 5 | allow-flight=false 6 | bungee-guard=false 7 | bungeecord=true 8 | default-gamemode=creative 9 | enforce-whitelist=false 10 | forwarding-secrets= 11 | handshake-verbose=true 12 | level-dimension=minecraft\:overworld 13 | level-name=world;spawn.schem 14 | log-player-ip-addresses=true 15 | max-players=500 16 | motd={"text"\:"","extra"\:[{"text"\:"Limbo Server\!","color"\:"yellow"}]} 17 | reduced-debug-info=true 18 | required-resource-pack=false 19 | resource-pack= 20 | resource-pack-prompt={"text"\:"","extra"\:[{"text"\:"Install server resource pack\!","color"\:"yellow"}]} 21 | resource-pack-sha1= 22 | server-ip=0.0.0.0 23 | server-port=30000 24 | tab-footer= 25 | tab-header= 26 | ticks-per-second=5 27 | velocity-modern=false 28 | version=Limbo\! 29 | view-distance=6 30 | world-spawn=world;20.5;17;22.5;-90;0 31 | -------------------------------------------------------------------------------- /node/impl/src/main/resources/files/limboloohp/spawn.schem: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/node/impl/src/main/resources/files/limboloohp/spawn.schem -------------------------------------------------------------------------------- /node/impl/src/main/resources/files/nms/bukkit.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | allow-end: true 3 | warn-on-overload: true 4 | permissions-file: permissions.yml 5 | update-folder: update 6 | plugin-profiling: false 7 | connection-throttle: 0 8 | query-plugins: true 9 | deprecated-verbose: default 10 | shutdown-message: Server closed 11 | minimum-api: none 12 | use-map-color-cache: true 13 | spawn-limits: 14 | monsters: 70 15 | animals: 10 16 | water-animals: 5 17 | water-ambient: 20 18 | water-underground-creature: 5 19 | axolotls: 5 20 | ambient: 15 21 | chunk-gc: 22 | period-in-ticks: 600 23 | ticks-per: 24 | animal-spawns: 400 25 | monster-spawns: 1 26 | water-spawns: 1 27 | water-ambient-spawns: 1 28 | water-underground-creature-spawns: 1 29 | axolotl-spawns: 1 30 | ambient-spawns: 1 31 | autosave: -1 32 | aliases: now-in-commands.yml 33 | -------------------------------------------------------------------------------- /node/impl/src/main/resources/files/nukkit/server.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | #Properties Config file 18 | #2022-07-16 09:50:15 19 | motd=A Nukkit Powered Server 20 | sub-motd=https://nukkitx.com 21 | server-port=19132 22 | server-ip=0.0.0.0 23 | view-distance=10 24 | white-list=off 25 | achievements=on 26 | announce-player-achievements=on 27 | spawn-protection=16 28 | max-players=20 29 | allow-flight=off 30 | spawn-animals=on 31 | spawn-mobs=on 32 | gamemode=0 33 | force-gamemode=off 34 | hardcore=off 35 | pvp=on 36 | difficulty=1 37 | generator-settings= 38 | level-name=world 39 | level-seed= 40 | level-type=DEFAULT 41 | allow-nether=on 42 | enable-query=on 43 | enable-rcon=off 44 | rcon.password= 45 | auto-save=on 46 | force-resources=off 47 | xbox-auth=off 48 | -------------------------------------------------------------------------------- /node/impl/src/main/resources/files/server-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/node/impl/src/main/resources/files/server-icon.png -------------------------------------------------------------------------------- /node/impl/src/main/resources/header.txt: -------------------------------------------------------------------------------- 1 | 2 | &c ___ _ _ &b __ __ _____ &8[&7%codename%&8] 3 | &c / __\ | ___ _ _ __| |&b /\ \ \/__\/__ \ 4 | &c / / | |/ _ \| | | |/ _` |&b/ \/ /_\ / /\/ 5 | &c / /___| | (_) | |_| | (_| &b/ /\ //__ / / 6 | &c \____/|_|\___/ \__,_|\__,_&b\_\ \/\__/ \/ 7 | &7 (%version%) 8 | 9 | &8«&b*&8»&7 The Cloud Network Environment Technology 10 | &8«&b*&8»&7 The modern Minecraft service management solution 11 | &8«&b*&8»&7 Discord Support: https://discord.cloudnetservice.eu/ 12 | 13 | -------------------------------------------------------------------------------- /node/impl/src/test/java/eu/cloudnetservice/node/impl/junit/EnableServicesInject.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.node.impl.junit; 18 | 19 | import java.lang.annotation.ElementType; 20 | import java.lang.annotation.Inherited; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | import org.junit.jupiter.api.extension.ExtendWith; 25 | 26 | @Inherited 27 | @Target(ElementType.TYPE) 28 | @Retention(RetentionPolicy.RUNTIME) 29 | @ExtendWith(EnableServicesInjectExtension.class) 30 | public @interface EnableServicesInject { 31 | 32 | } 33 | -------------------------------------------------------------------------------- /node/impl/src/test/resources/local_template_storage.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/node/impl/src/test/resources/local_template_storage.zip -------------------------------------------------------------------------------- /node/impl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | [%d{dd.MM HH:mm:ss.SSS}] %-5level: %msg%n 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /plugins/luckperms/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import net.fabricmc.loom.task.RemapJarTask 2 | 3 | /* 4 | * Copyright 2019-2023 CloudNetService team & contributors 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | plugins { 20 | alias(libs.plugins.fabricLoom) 21 | } 22 | 23 | 24 | dependencies { 25 | "compileOnly"(libs.bundles.proxyPlatform) 26 | "compileOnly"(libs.bundles.serverPlatform) 27 | 28 | "compileOnly"(libs.luckPermsApi) 29 | "compileOnly"(projects.wrapperJvm.wrapperJvmApi) 30 | "compileOnly"(projects.modules.bridge.bridgeApi) 31 | 32 | "minecraft"(libs.minecraft) 33 | "modCompileOnly"(libs.fabricLoader) 34 | "mappings"(loom.officialMojangMappings()) 35 | } 36 | 37 | tasks.withType { 38 | // base setup 39 | archiveFileName.set(Files.luckPermsPlugin) 40 | } 41 | -------------------------------------------------------------------------------- /plugins/papi-expansion/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | tasks.withType { 18 | archiveFileName.set(Files.papiExpansion) 19 | } 20 | 21 | repositories { 22 | maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") 23 | } 24 | 25 | dependencies { 26 | compileOnly(libs.spigot) 27 | compileOnly(libs.placeholderApi) 28 | compileOnly(projects.wrapperJvm.wrapperJvmApi) 29 | compileOnly(projects.modules.bridge.bridgeApi) 30 | } 31 | -------------------------------------------------------------------------------- /utils/base/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "api"(libs.vavr) 19 | "implementation"(libs.guava) 20 | // todo(derklaro): well this dependency is here now but i'm not really happy with that - util classes 21 | // should not be responsible for logging, any they should especially not just log 22 | // all exceptions instead of passing them to the caller (see primarily FileUtil) 23 | "implementation"(libs.slf4jApi) 24 | } 25 | -------------------------------------------------------------------------------- /utils/base/src/test/java/eu/cloudnetservice/utils/base/resource/CpuUsageResolverTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.utils.base.resource; 18 | 19 | import org.junit.jupiter.api.Assertions; 20 | import org.junit.jupiter.api.Test; 21 | 22 | public class CpuUsageResolverTest { 23 | 24 | @Test 25 | void testCpuUsageResolve() { 26 | var processCpuUsage = Assertions.assertDoesNotThrow(CpuUsageResolver::processCpuLoad); 27 | Assertions.assertTrue(processCpuUsage >= -1 && processCpuUsage <= 100); 28 | 29 | var systemCpuUsage = Assertions.assertDoesNotThrow(CpuUsageResolver::systemCpuLoad); 30 | Assertions.assertTrue(systemCpuUsage >= -1 && systemCpuUsage <= 100); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /utils/base/src/test/resources/empty_zip_file.zip: -------------------------------------------------------------------------------- 1 | PK -------------------------------------------------------------------------------- /utils/base/src/test/resources/file_utils_resources.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CloudNetService/CloudNet/adbe832b8864908c17b9161c2ff69395d6527273/utils/base/src/test/resources/file_utils_resources.zip -------------------------------------------------------------------------------- /utils/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /wrapper-jvm/api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | dependencies { 18 | "api"(projects.driver.driverApi) 19 | } 20 | -------------------------------------------------------------------------------- /wrapper-jvm/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /wrapper-jvm/impl/src/main/java/eu/cloudnetservice/wrapper/impl/database/WrapperDatabase.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019-2024 CloudNetService team & contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package eu.cloudnetservice.wrapper.impl.database; 18 | 19 | import eu.cloudnetservice.driver.database.Database; 20 | import eu.cloudnetservice.driver.network.rpc.annotation.RPCInvocationTarget; 21 | import lombok.NonNull; 22 | 23 | public abstract class WrapperDatabase implements Database { 24 | 25 | private final String name; 26 | 27 | @RPCInvocationTarget 28 | public WrapperDatabase(@NonNull String name) { 29 | this.name = name; 30 | } 31 | 32 | @Override 33 | public @NonNull String name() { 34 | return this.name; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /wrapper-jvm/impl/src/main/resources/META-INF/services/org.jboss.shrinkwrap.resolver.spi.format.FormatProcessor: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | org.jboss.shrinkwrap.resolver.impl.maven.format.MavenResolvedArtifactProcessor 18 | -------------------------------------------------------------------------------- /wrapper-jvm/impl/src/main/resources/lang/en_US.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019-2024 CloudNetService team & contributors 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | --------------------------------------------------------------------------------