Skip to content

Releases: CloudNetService/CloudNet

4.0.0-RC11.2 - Blizzard

20 Dec 20:14
b38fb78
Compare
Choose a tag to compare
Pre-release

Update 4.0.0-RC11.2 - Blizzard

We are pleased to announce the release candidate 11.2 for CloudNet 4.0. This release contains support for the latest minecraft versions. We urge all users to install the update, as we will no longer provide support for RC11.1. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Please also see the changelog for RC6, this contains the detailed information about the switch to Dependency Injection in the API.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Important notice

  • CloudNet requires Java 23

Changelog

Features

  • Minecraft 1.21.3 and 1.21.4 are now supported (#1553)

Fixes

  • The CloudNet Luckperms integration now also works on bungeecord and nukkit (#1547)
  • Interaction with NPC inventories do not lead to exceptions any more (#1554)
  • The service copy command does not fail on services without default template anymore (#1558)
  • The cluster command is now migrated to cloud 2.0 and is working correctly again (#1555)
Dependencies
artifact id usage
driver When developing plugins or modules, available on all platforms.
node When developing a module which needs more specific access to node functions than the driver can offer.
wrapper-jvm When developing plugins which need some more specific access to the service api than the driver can offer.
bridge When trying to catch player events and/or interacting with players regardless where they are on the network.
bom When you want to import all dependencies with the same version based on the imported bill of materials.

To add the CloudNet dependency using gradle:

repositories {
  // ensure maven central is added
  mavenCentral()
}

dependencies {
  // optional - you can also specify versions directly
  implementation platform('eu.cloudnetservice.cloudnet:bom:4.0.0-RC11.2')
  compileOnly 'eu.cloudnetservice.cloudnet:driver'

  // without bom
  compileOnly 'eu.cloudnetservice.cloudnet:driver:4.0.0-RC11.2'
}

To add the CloudNet dependency using maven:

<!-- optional - you can also specify versions directly -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>eu.cloudnetservice.cloudnet</groupId>
      <artifactId>bom</artifactId>
      <version>4.0.0-RC11.2</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>eu.cloudnetservice.cloudnet</groupId>
    <artifactId>driver</artifactId>
    <version>4.0.0-RC11.2</version> <!-- only needed when bom is not used -->
    <scope>provided</scope>
  </dependency>
</dependencies>

🔗 Links

4.0.0-RC11.1 - Blizzard

23 Oct 17:15
38c60eb
Compare
Choose a tag to compare
Pre-release

Update 4.0.0-RC11.1 - Blizzard

We are pleased to announce the release candidate 11.1 for CloudNet 4.0. This release contains some hotfixes for problems that arised with the release of RC11. We urge all users to install the update, as we will no longer provide support for RC11. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Please also see the changelog for RC6, this contains the detailed information about the switch to Dependency Injection in the API.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Important notice

  • Make sure to update ProtocolLib to the latest 5.3.0-RELEASE
  • Everybody who disabled Spark can re-enable Spark now safely
  • Ensure that CloudPerms is removed from all your templates

Changelog

Fixes

  • Spark async-profiler is disabled on non arm systems as it causes server crashes (#1533)
  • Recent versions of Spigot/Paper no longer crash with a java.lang.VerifyError: Bad return type error (#1535)
  • The default task setup is back when executing the CloudNet setup for the first time (#1534)
Dependencies
artifact id usage
driver When developing plugins or modules, available on all platforms.
node When developing a module which needs more specific access to node functions than the driver can offer.
wrapper-jvm When developing plugins which need some more specific access to the service api than the driver can offer.
bridge When trying to catch player events and/or interacting with players regardless where they are on the network.
bom When you want to import all dependencies with the same version based on the imported bill of materials.

To add the CloudNet dependency using gradle:

repositories {
  // ensure maven central is added
  mavenCentral()
}

dependencies {
  // optional - you can also specify versions directly
  implementation platform('eu.cloudnetservice.cloudnet:bom:4.0.0-RC11.1')
  compileOnly 'eu.cloudnetservice.cloudnet:driver'

  // without bom
  compileOnly 'eu.cloudnetservice.cloudnet:driver:4.0.0-RC11.1'
}

To add the CloudNet dependency using maven:

<!-- optional - you can also specify versions directly -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>eu.cloudnetservice.cloudnet</groupId>
      <artifactId>bom</artifactId>
      <version>4.0.0-RC11</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>eu.cloudnetservice.cloudnet</groupId>
    <artifactId>driver</artifactId>
    <version>4.0.0-RC11</version> <!-- only needed when bom is not used -->
    <scope>provided</scope>
  </dependency>
</dependencies>

🔗 Links

4.0.0-RC11 - Blizzard

18 Oct 17:58
64051ae
Compare
Choose a tag to compare
4.0.0-RC11 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC11 - Blizzard

We are pleased to announce the eleventh release candidate for CloudNet 4.0. This release includes fixes for reported issues and some improvements. We urge all users to install the update, as we will no longer provide support for RC10. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Please also see the changelog for RC6, this contains the detailed information about the switch to Dependency Injection in the API.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Upgrading

Due to some changes the upgrading step is a bit more complicated this time.

  • CloudNet requires JDK 23 everywhere now.
  • Velocity 3.3.0-SNAPSHOT is required now.

After installing JDK 23 download the CloudNet.zip and replace your launcher.jar with the one from the archive.

As announced the CloudPerms module and thus the SimpleNameTags and Chat plugins are not available anymore. Please delete the CloudPerms module before starting.

Changelog

Breaking API

  • The Task class was replaced with the CompletableFutures from the standard library. Some helper methods can be found in the TaskUtil class.

Improvements

  • Minecraft 1.21.1 is now fully supported (#1477)
  • Limbo Minecraft servers are now supported (#1412)
  • ServiceRemoteInclusions have a new cache strategy option to determine how to cache them (#1413)
  • NPCs can now be rotated using the new rotate command (#1497)
  • The networking was fully rewritten to the new JDK 22 classfile api (#1433)
  • The terminal is now using a new implementation (#1441)
  • WorldEdit and FAWE can now be used in older Minecraft Versions together with JDK 22 (#1429)
  • New cloudnet luckperms plugin to bring tasks and groups into luckperms (#1258)

Fixes

  • The npc command sets the showfullservices option now correctly.
  • Fabric fake players are not detected as real players anymore.
  • Skipping the proxy fallback question is now working again.
Dependencies
artifact id usage
driver When developing plugins or modules, available on all platforms.
node When developing a module which needs more specific access to node functions than the driver can offer.
wrapper-jvm When developing plugins which need some more specific access to the service api than the driver can offer.
bridge When trying to catch player events and/or interacting with players regardless where they are on the network.
bom When you want to import all dependencies with the same version based on the imported bill of materials.

To add the CloudNet dependency using gradle:

repositories {
  // ensure maven central is added
  mavenCentral()
}

dependencies {
  // optional - you can also specify versions directly
  implementation platform('eu.cloudnetservice.cloudnet:bom:4.0.0-RC11')
  compileOnly 'eu.cloudnetservice.cloudnet:driver'

  // without bom
  compileOnly 'eu.cloudnetservice.cloudnet:driver:4.0.0-RC11'
}

To add the CloudNet dependency using maven:

<!-- optional - you can also specify versions directly -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>eu.cloudnetservice.cloudnet</groupId>
      <artifactId>bom</artifactId>
      <version>4.0.0-RC11</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>eu.cloudnetservice.cloudnet</groupId>
    <artifactId>driver</artifactId>
    <version>4.0.0-RC11</version> <!-- only needed when bom is not used -->
    <scope>provided</scope>
  </dependency>
</dependencies>

🔗 Links

4.0.0-RC10 - Blizzard

01 Apr 15:07
887ad7c
Compare
Choose a tag to compare
4.0.0-RC10 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC10 - Blizzard

We are pleased to announce the tenth release candidate for CloudNet 4.0. This release includes fixes for reported issues and some improvements. We urge all users to install the update, as we will no longer provide support for RC9. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Please also see the changelog for RC6, this contains the detailed information about the switch to Dependency Injection in the API.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Changelog

🐛 Fixes

  • Fixed that npc inventories might exceed 54 slots and cause errors (#1306)
  • Fixed that services started by the smart module ignored the allowed nodes option (#1315)
  • Fixed that parent directories might not be created when using a sftp storage (#1225)
  • Fixed that the node would not start services if the exact memory limit was reached (#1322)
  • Fixed that npcs and info lines are not removed on static services (#1349)
  • Fixed that group configurations are not converted correctly due to nullabilty (#1274)

✨ Improvements

  • Minecraft 1.20.4 is now fully supported (#1351)
  • The adventure component format is now supported in npc info lines (#1321)
  • The LabyMod module was updated to the standard of LabyMod 4 (#1309)
  • Added support for all kind of java time serialization to the databuf (#1285)
  • The syncproxy module checks permissions now later in the login process (#1308)
  • When creating velocity templates the forwarding secret file is generated automatically by cloudnet (#1355)
  • Non-existant signs are ignored when a new sign is choosen (#1371)
Dependencies
artifact id usage
driver When developing plugins or modules, available on all platforms.
node When developing a module which needs more specific access to node functions than the driver can offer.
wrapper-jvm When developing plugins which need some more specific access to the service api than the driver can offer.
bridge When trying to catch player events and/or interacting with players regardless where they are on the network.
bom When you want to import all dependencies with the same version based on the imported bill of materials.

To add the CloudNet dependency using gradle:

repositories {
  // ensure maven central is added
  mavenCentral()
}

dependencies {
  // optional - you can also specify versions directly
  implementation platform('eu.cloudnetservice.cloudnet:bom:4.0.0-RC10')
  compileOnly 'eu.cloudnetservice.cloudnet:driver'

  // without bom
  compileOnly 'eu.cloudnetservice.cloudnet:driver:4.0.0-RC10'
}

To add the CloudNet dependency using maven:

<!-- optional - you can also specify versions directly -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>eu.cloudnetservice.cloudnet</groupId>
      <artifactId>bom</artifactId>
      <version>4.0.0-RC10</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>eu.cloudnetservice.cloudnet</groupId>
    <artifactId>driver</artifactId>
    <version>4.0.0-RC10</version> <!-- only needed when bom is not used -->
    <scope>provided</scope>
  </dependency>
</dependencies>

🔗 Links

4.0.0-RC9 - Blizzard

09 Jul 17:44
f6ca4c3
Compare
Choose a tag to compare
4.0.0-RC9 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC9 - Blizzard

We are pleased to announce the ninth release candidate for CloudNet 4.0. This release includes fixes for reported issues and some improvements. We urge all users to install the update, as we will no longer provide support for RC8. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Please also see the changelog for RC6, this contains the detailed information about the switch to Dependency Injection in the API.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Changelog

🐛 Fixes

  • Fixed an issue that led to console tab suggestions being in the wrong order (#1152)
  • Fixed that some buffers were not closed resulting in memory leaks (#1146)
  • Fixed an issue with the service create rest api which had request method assigned (#1166)
  • Fixed an issue that resulted in assigning default templates on both the group and the task when using the task setup (#1175)
  • Fixed an issue with opaque URIs causing exceptions in the rest api (#1181)
  • Fixed that http header in service inclusions were required instead of optional (#1188)
  • Fixed that exceptions in the sign module are not printed (#1219)
  • Fixed an issue where http handlers were called in reversed order (#1227)
  • Fixed an issue in the mysql module which would set ssl explicitly to false leading to connection problems when using recent database versions (#1256)
  • Fixed an issue that would result in npcs not spawning at all due to the fact that chunks were already loaded (#1255)
  • Fixed an issue where setting the floating npc item to AIR would break the armorstands settings (#1249)
  • Fixed an issue with http session handlers having the wrong http method (#1269)
  • Fixed an issue where module dependencies are loaded from repositories first instead of the url if given (#1259)
  • Fixed an issue with syncproxy placeholders overlapping with some bridge placeholders (#1254)
  • Fixed that the memory applied to the cloudnet launcher affected the memory of the node too (#1221)

✨ Improvements

  • The jvmOptions of a task or a group are repeatable now (#1163)
  • The document api was rewritten allowing for custom document types (#1178)
  • Updated the openapi spec according to changes in the ServiceConfiguration (#1218)
  • The cloud now warns about missing manifests and main classes in jars it is trying to start (#1217)
  • Improved the look of the default signs layout (#1230)
  • Added a new @Service annotation to integrate the service registry into dependency injection (#1232)
  • Added a placeholder to the syncproxy tablist to display the name of the player (#1235)
  • Minecraft 1.20(.1) is now fully supported (#1252)

⚠️ Important notice

It is important to note that setting the -xmx and -xms parameters in the startup scripts now has no effect on the node's memory. To set the memory for the node the property cloudnet.node.memory must be set in the launcher.cnl. The value in launcher.cnl is always set in MB for the xmx and xms parameters. The default value is 256MB.

You can add the following lines to your launcher.cnl to control the memory setting.

# This value sets the memory settings of the JVM for the cloudnet node.
# The value set here is to be specified in megabytes and describes -xmx as well as -xms.
#
# A change in the associated start files (e.g. start.sh) has no effect on the node and should therefore not be changed.
var cloudnet.node.memory 256

🔗 Links

4.0.0-RC8 - Blizzard

06 Mar 18:54
90a5b0a
Compare
Choose a tag to compare
4.0.0-RC8 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC8 - Blizzard

We are pleased to announce the eighth release candidate for CloudNet 4.0. This release includes fixes for reported issues and some improvements. We urge all users to install the update, as we will no longer provide support for RC7. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Please also see the changelog for RC6, this contains the detailed information about the switch Dependency Injection in the API.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Changelog

🐛 Fixes

  • Fixed an issue that caused invalid mod IDs to be generated for Fabric (#1104)
  • Fixed an invalid SQL query that caused a client deadlock when used in combination with a mysql server (#1106)
  • Fixed an regression from RC6 which lead to an exception when trying to use the DatabaseProvider api from the wrapper (#1107)
  • Fixed that server selectors were connecting players to the wrong servers. Connecting to LOWEST_PLAYERS would connect to the server with the highest player count and vice-versa (#1111)
  • Fixed a network warning log message that occurred when running CloudNet on a non-linux system (#1130)
  • Fixed invalid code generation when parameters of type long or double were present on constructors or methods (#1123)
  • Fixed an issue that caused passwords containing a : to not be accepted when trying to send them with Basic Auth. Note that a user's username still cannot contain a : (#1136)
  • Fixed an issue that caused the injection of the first constructed plugin instead of the current plugin when using platform inject (#1143)
  • Fixed an issue that was causing the accidental use of multiple ObjectMapper instances which resulted in issues when custom type serializers were registered (an example would be #1112) (#1149)

✨ Improvements

  • The potency, duration and target group arguments of the permission add command are now flags. For this reason, previous optional arguments no longer need to be specified when trying to change one of these values (#1100)
  • The scope (or network interface) of an IPv6 address is no longer considered when checking if an IP is whitelisted (#1116)
  • The CloudServiceConfigurationPrePrepareEvent was added, allowing modules to change a service configuration on the head node before a service is created from it (#1129)
  • The DocProperty api has been unified. There is no longer a difference between a ServiceProperty and a DocProperty. Note that some properties were removed from the bridge, in case they were not really representing a property. Replacement methods for these properties were added to BridgeServiceHelper (#1138)

📦 Other

  • Java 21 was added to the list of supported java versions. This means that f. ex. JavaVersion.runtimeVersion() no longer returns JAVA_NEXT when running Java 21 (#1118)

🔗 Links

4.0.0-RC7 - Blizzard

29 Jan 19:32
ffd3174
Compare
Choose a tag to compare
4.0.0-RC7 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC7 - Blizzard

We are pleased to announce the seventh release candidate for CloudNet 4.0. This release includes fixes for reported issues and some improvements. We urge all users to install the update, as we will no longer provide support for RC6. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Please also see the changelog for RC6, this contains the detailed information about the switch Dependency Injection in the API.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Changelog

🐛 Fixes

  • Fixed a regression from RC6 which caused initial node connections to have data desyncs in special cases
  • Fixed an issue in CloudPerms which caused the Vault hook to not work properly
  • Fixed an issue with task and group specific player provider methods throwing an exception when called on the wrapper
  • Fixed an issue with service starting in the cluster that could lead to duplicated services
  • Fixed an issue related to missing channel options which caused the node network server to not recover from the tcp timed wait state when restarting the node, leading to "no network listener could be bound" error messages

✨ Improvements

  • Improved the tab completion in the console to support partial matches
  • When adding a deployment to a service includes and excludes can be specified using the command directly
  • Renamed the event method of @ModuleTask to lifecycle to better reflect the return type
  • Added information about the file descriptors limits of the node process to the report output

🔗 Links

4.0.0-RC6 - Blizzard

20 Jan 20:12
ba9d666
Compare
Choose a tag to compare
4.0.0-RC6 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC6 - Blizzard

We are pleased to announce the sixth release candidate for CloudNet 4.0. This release mainly focuses on the migration from static instance usages to dependency injection - internally as well as for external api consumers. Please see the dedicated information section for dependency injection below for further info. We urge all users to install the update, as we will no longer provide support for RC5. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Changelog

🐛 Fixes

  • Fixed an issue that SyncProxy configurations which were applied to velocity proxy instances could not be applied to Bungeecord or Waterdog proxies as-is
  • Fixed an issue that caused wildcard characters to not be escaped correctly when using the mysql database
  • Fixed an issue that caused an exception when the profile which should be assigned to a npc cannot be resolved
  • Fixed an issue with invalid npc info items which were causing exceptions
  • Fixed an issue which caused a player to be connected to all matching services when calling any PlayerExecutor#connect method rather than the best matching service
  • Fixed an issue that caused a start loop when using the smart module with auto stop enabled due to an invalid check if enough services are running to satisfy the min service count
  • Fixed an exception thrown when a channel message query got no response
  • Fixed an issue that caused expired permissions to not be removed from a player
  • Fixed an issue with SyncProxy permission tablist placeholders that were overridden by equivalently named bridge placeholders. The new placeholders are now prefixed with perms_group_

✨ Improvements

  • Add support for 1.19.3
  • Migrated from the usage of static instances to dependency injection
  • Improved accessibility to information in CommandPreProcess and CommandPostProcess event
  • Renamed the ColouredLogFormatter to ColoredLogFormatter and ConsoleColor.toColouredString to ConsoleColor.toColoredString to keep the spelling of color consistent

🔗 Links

Dependency Injection

❓ Why DI

There are a few reasons why we deided to go for dependency injection. The top three include:

  1. Improved testability: DI allows for more easily replacing dependencies with mock objects in unit tests, which can help to improve the quality of the code and reduce bugs.
  2. Increased flexibility: DI makes it easier to change the implementation of a dependency without affecting the code that uses it. This allows for more easily making changes and adapting the codebase to new requirements.
  3. Loose coupling: DI allows for a more loosely-coupled architecture, which makes it easier to change or extend the codebase. This can lead to more maintainable code and also facilitates reusability and scalability of the code.

💡 What to note when using DI

What is DI?

Dependency injection is a design pattern that allows objects to be constructed without needing to know how their dependencies are created. A dependency is an object that another object relies on in order to function properly. In traditional software development, objects are responsible for creating and managing their own dependencies. However, with dependency injection, the responsibility of creating and managing dependencies is shifted to a separate component, known as an injector.

The injector is responsible for providing the necessary dependencies to objects at runtime. This is done by injecting the dependencies directly into the objects that need them, rather than having the objects create or manage the dependencies themselves. By doing so, the objects become less tightly coupled and more flexible, making it easier to change or replace dependencies without affecting the rest of the application.

Constructor injection is the most common form of dependency injection, where dependencies are passed in through the constructor of a class. The class is defined with a constructor that takes the dependencies as arguments, and the injector is responsible for providing these dependencies when the class is instantiated. The target constructor to inject is detected by using either of:

  1. The constructor which is annotated as @Inject (⚠️ Make sure to use the correct inject annotation. It should either be dev.derklaro.aerogel.Inject or jakarta.inject.Inject).
  2. The constructor which takes no arguments.
  3. The constructor which takes all record components as its arguments (only applied for record classes).

When the injector constructed the type completely member injection is executed. Member injection will be done on

  1. all fields that are annoted as @Inject (Note that final fields might get ignored from injection)
  2. all methods that are annotated as @Inject will be executed. These methods are allowed to take arguments.
  3. all methods that are annotated as @PostConstruct will be executed. These methods are not allowed to take arguments.

The injection order of injectable methods and post construct listeners can be constrolled with the @Order annotation.

A quickstart guide for dependency injection

  1. Identify dependencies: Identify the dependencies that need to be injected into an object and create interfaces or abstract classes for them.
  2. Use constructor injection: Constructor injection is the most common form of dependency injection, where dependencies are passed in through the constructor of a class.
  3. Avoid tight coupling: Dependency injection allows for loose coupling between objects, making it easier to change or replace dependencies.
  4. Use interfaces: Use interfaces or abstract classes to define dependencies, rather than concrete implementations, to make it easier to change or replace them.
  5. Understand the difference between singleton and prototype scope: The singleton scope will give a single instance of an object throughout the application, whereas the prototype scope will give a new instance of an object every time it is requested.
  6. Use annotations: Annotations are used to mark a class, constructor or a method, in order to let the framework know that it should be injected and how. For example the @Inject annotation markes constructors and classes that should be injected and the @Singleton annotation lets aerogel know that only a single instance of the annotated type should be constructed.
  7. Avoid circular dependencies: Be careful when defining dependencies to avoid circular dependencies, which can cause issues with object creation and injection. This only applies if the requested type is not an interface and therefore not proxyable.

⛅ How did we implement it in CloudNet

Because of the little flexibility and many outside influences we have due to the supported Minecraft server/proxy implementation, we had to implement DI to be as flexible as possible.

For this reason, some decisions had to be made that would not have been a problem in a normal standalone application:

  • We use Aerogel as our DI library. This decision was made for the most part because:
    • Bi-directional proxies are supported, unlike (for example) Google Guice. This means that if a circular injection request arises, and (e.g.) the parameter of a constructor cannot be proxied, then the type from which the circular reference arises is tried to be proxied. See the Aerogel documentation for more information on how the injection tree works.
    • The library supports "specified" injectors. These are injectors that have certain types bound to them that do not get into the parent injector (e.g. useful for plugins: the description of a plugin should not be passed to the other plugin instances).
    • The library supports automated binding of classes to interfaces and factory methods. More information about this can be found below.
  • The complete creation of plugin information and main classes is now abstracted. This allows us to inject dependencies directly into the main classes of plugins without having to make an intermediate step (e.g. through another extra class).
  • More annotations have been added to extend the previously mentioned Binding System for Platforms. Thus, multiple implementations for (e.g.) an interface can be created, which are bound (and later injected) to the interface based on the platform. More information about this is also available below.

🔌 Support for Plugins

Support for plugins can be achieved with the platform inject api. This generates classes during compile time based on annotations added to classes (a list of these annotations is below). It is important that the dependency for the annotation processor is only available at compile time and not at runtime:

// adds the api for platform inject, do not compile!
compileOnly 'eu.cloudnetservice.cloudnet:platform-inject-api:4.0.0-RC6'
// adds the annotation processor for the inject-api annotations
annotationProcessor 'eu.cloudnetservice.cloudnet:platform-inject-processor:4.0.0-RC6'

The supported annotations

  • @PlatformPlugin: This annotates the main class of the plugin. Due to the abstraction of CloudNet extended/implemented, the annotated class no longer implements an implementation-specific class (such as JavaPlu...
Read more

4.0.0-RC5 - Blizzard

14 Nov 20:07
Compare
Choose a tag to compare
4.0.0-RC5 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC5 - Blizzard

We are pleased to announce the fifth release candidate for CloudNet 4.0. This release includes fixes for reported issues and improvements. We urge all users to install the update, as we will no longer provide support for RC4. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Changelog

🐛 Fixes

  • Fixed an issue that nodes could get marked as disconnected because the time between two nodes wasn't synced properly.
  • Fixed the chat plugin to work with Sponge v10 (1.19+) correctly.
  • Fixed an exception caused by old group configurations which weren't upgraded correctly after the RC4 release.
  • Fixed an issue that caused ingame service items to still appear in npc inventories but without receiving any updates.
  • Fixed an issue where http handlers added to the root path (/) were not called.
  • Fixed an issue where inclusion file downloads would fail if the target temporary inclusion directory didn't exist.
  • Fixed that templates downloaded from the sftp template storage were located inside a separate directory rather than the service directory.

✨ Improvements

  • Improved the handling of the chat plugin config.
  • Replaced the old javers library which was used to compare objects from a remote node versus the local variant. This change should improve the look and detail when promted to accept or reject changes from a remote node.
  • Bumped the default file chunk size from 1MB to 50MB when executing cluster syncs. This should reduce the load on the file system.
  • The option to display all services in an NPC inventory has been moved from the configuration level to the NPC level and can therefore now be configured per NPC.
  • Added an option to display ingame services in a npc inventory.
  • Bridge messages can now be disabled by setting their value to null.

📦 Other

  • All commands which are changing the lifecycle of a module are now only available from the console and will no longer work when executed by an ingame user.
  • The download of dependencies is no longer depending on jitpack, making the whole system more resistant against issues with their build queue.

🔗 Links

4.0.0-RC4 - Blizzard

16 Oct 16:54
ab12241
Compare
Choose a tag to compare
4.0.0-RC4 - Blizzard Pre-release
Pre-release

Update 4.0.0-RC4 - Blizzard

We are pleased to announce the fourth release candidate for CloudNet 4.0. This release includes some smaller fixes for reported issues and improvements. Additionally this release contains a fix for a major regression with templates that was introduced in RC3. We urge all users to install the update, as we will no longer provide support for RC3. Users who want to switch from 3.4.X to 4.0 can find instructions in the release information for RC1.

Cheers!
(Please remember, CloudNet is provided as-is - we are not responsible for data loss or corruption. You are encouraged to back up your files before any updates!)

Changelog

🐛 Fixes

  • Fixed a smaller issue with the sponge permission system which caused the system subjects (like the console) to not have any permissions at all (this caused for example issues when shutting down the server as the console had no permissions to execute stop which always leaded to forceful shutdowns)
  • Fixed a regression in the smart module which caused templates to get installed wrongly and even on static services causing the override of files
  • Fixed two small issues with packet decoding which lead to exceptions when too little data was received to decode the packet length or the source channel became inactive while trying to decode transmitted data

✨ Improvements

  • Added SpongeVanilla 1.19.2 to the template installer
  • All ssh connection exceptions are now logged to the console rather than getting silently ignored internally. This should make it easier to find issues when using the sftp template storage
  • When using tasks task <name> remove... the removed element is now getting displayed in the message rather than null

🔗 Links