diff --git a/.gitignore b/.gitignore index 59518501..03d7f0bc 100644 --- a/.gitignore +++ b/.gitignore @@ -48,11 +48,11 @@ bin/ /logs/ /sessions/ -### Test Stuff ### -test/ - ### Mac OS ### .DS_Store +### JFR ### +*.jfr + .env -.env.repo \ No newline at end of file +.env.repo diff --git a/build.gradle b/build.gradle index cce8f7e8..625bd919 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,8 @@ plugins { id "java-library" id "application" - id "de.craftsblock.gradle.publish" version "0.0.20" + id "de.craftsblock.gradle.publish" version "0.0.21" + id("com.autonomousapps.dependency-analysis") version "3.8.0" } java { @@ -17,7 +18,7 @@ application { } group = "de.craftsblock" -version = "3.7.1" +version = "3.7.2-2" repositories { mavenCentral() @@ -29,7 +30,7 @@ dependencies { // CraftsBlock related dependencies --------------------------------------------------------------------------------------- // https://repo.craftsblock.de/#/releases/de/craftsblock/craftscore/bom - implementation platform("de.craftsblock.craftscore:bom:3.8.13-pre9") + implementation platform("de.craftsblock.craftscore:bom:3.8.15") // https://repo.craftsblock.de/#/releases/de/craftsblock/craftscore/buffer api "de.craftsblock.craftscore:buffer" @@ -49,7 +50,7 @@ dependencies { // Third party needed dependencies ---------------------------------------------------------------------------------------- // https://mvnrepository.com/artifact/org.apache.tika/tika-core - implementation "org.apache.tika:tika-core:3.2.3" + implementation "org.apache.tika:tika-core:3.3.0" // https://mvnrepository.com/artifact/org.jetbrains/annotations implementation "org.jetbrains:annotations:26.1.0" @@ -76,6 +77,20 @@ dependencies { // https://mvnrepository.com/artifact/org.apache.maven.resolver/maven-resolver-util implementation "org.apache.maven.resolver:maven-resolver-util:2.0.16" + + // Testing ---------------------------------------------------------------------------------------------------------------- + + // https://mvnrepository.com/artifact/org.junit/junit-bom + testImplementation platform('org.junit:junit-bom:6.1.0-M1') + + // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api + testImplementation 'org.junit.jupiter:junit-jupiter-api' + + // https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + // https://mvnrepository.com/artifact/org.assertj/assertj-core + testImplementation 'org.assertj:assertj-core:4.0.0-M1' } tasks.withType(JavaCompile).configureEach { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bad7c246..c61a118f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/de/craftsblock/craftsnet/CraftsNet.java b/src/main/java/de/craftsblock/craftsnet/CraftsNet.java index e8634090..1e990713 100644 --- a/src/main/java/de/craftsblock/craftsnet/CraftsNet.java +++ b/src/main/java/de/craftsblock/craftsnet/CraftsNet.java @@ -35,7 +35,6 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.security.CodeSource; -import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.jar.JarFile; @@ -46,7 +45,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 3.6.1 * @since 1.0.0-SNAPSHOT */ public class CraftsNet { @@ -54,7 +52,7 @@ public class CraftsNet { /** * The current version of CraftsNet. */ - public static final String version = "3.7.1"; + public static final String version = "3.7.2-2"; private static CraftsNet instance; @@ -121,10 +119,10 @@ public void start(CraftsNetBuilder builder) throws IOException { logStream.start(); if (instance != null) { - Arrays.stream(new Logger[]{logger, instance.logger}).forEach(log -> { + for (Logger log : new Logger[]{logger, instance.logger}) { log.warning("Detected another instance of CraftsNet in the jvm!"); log.warning("This may cause some errors."); - }); + } } instance = this; @@ -134,8 +132,8 @@ public void start(CraftsNetBuilder builder) throws IOException { logger.debug("JVM Version: %s; Max recognizable class file version: %s.%s", jvmVersion.toString(), jvmVersion.feature() + 44, jvmVersion.interim()); - if (!builder.shouldSkipVersionCheck() && version.matches("^\\d+(?:\\.\\d+)*$")) { - Versions.verbalCheck(this); + if (!builder.shouldSkipVersionCheck() && version.matches("^\\d+(?:[.-]\\d+)*$")) { + Versions.verbalCheckCraftsNet(this); } logger.debug("Preloading gson for faster processing"); @@ -547,7 +545,7 @@ public static CraftsNetBuilder create() { */ @SafeVarargs public static AddonContainingBuilder create(Class... addons) { - return CraftsNet.create(List.of(addons)); + return create(ReflectionUtils.getCallerClass(), List.of(addons)); } /** @@ -560,8 +558,21 @@ public static AddonContainingBuilder create(Class... addons) { * @return A new {@link AddonContainingBuilder} instance initialized with the specified addons. */ public static AddonContainingBuilder create(Collection> addons) { + return create(ReflectionUtils.getCallerClass(), addons); + } + + /** + * Creates a new builder instance for configuring CraftsNet with the specified addons + * and caller class. + * + * @param caller The caller that called the create method. + * @param addons A {@link Collection} of {@link Addon} classes to include in the configuration. + * @return A new {@link AddonContainingBuilder} instance initialized with the specified addons. + * @since 3.8.14 + */ + private static AddonContainingBuilder create(Class caller, Collection> addons) { return new AddonContainingBuilder(addons) - .addCodeSource(ReflectionUtils.getCallerClass().getProtectionDomain().getCodeSource()); + .addCodeSource(caller.getProtectionDomain().getCodeSource()); } } diff --git a/src/main/java/de/craftsblock/craftsnet/addon/Addon.java b/src/main/java/de/craftsblock/craftsnet/addon/Addon.java index 2c9379db..8c8a12fd 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/Addon.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/Addon.java @@ -45,7 +45,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 1.4.1 * @see AddonLoader * @see AddonManager * @since 1.0.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/addon/AddonManager.java b/src/main/java/de/craftsblock/craftsnet/addon/AddonManager.java index 69f81d2b..9e4834b2 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/AddonManager.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/AddonManager.java @@ -24,7 +24,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 1.3.4 * @see Addon * @see AddonLoader * @since 1.0.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/addon/HollowAddon.java b/src/main/java/de/craftsblock/craftsnet/addon/HollowAddon.java index b0525c8b..b135ca06 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/HollowAddon.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/HollowAddon.java @@ -9,7 +9,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.2 * @see Addon * @since 3.3.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/addon/artifacts/ArtifactLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/artifacts/ArtifactLoader.java index e6d159d0..9b3312b9 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/artifacts/ArtifactLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/artifacts/ArtifactLoader.java @@ -19,7 +19,6 @@ import org.eclipse.aether.resolution.DependencyResult; import org.eclipse.aether.supplier.RepositorySystemSupplier; import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry; -import org.eclipse.aether.util.filter.OrDependencyFilter; import org.eclipse.aether.util.graph.manager.ClassicDependencyManager; import org.eclipse.aether.util.graph.selector.AndDependencySelector; import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector; @@ -40,22 +39,25 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 2.1.2 * @see Eclipse Aether * @since 3.0.0-SNAPSHOT */ public final class ArtifactLoader { - private final RepositorySystem repository; - private final RepositorySystemSession.CloseableSession session; - private final List repositories; - private final List defaultRepos; + private RepositorySystem repository; + private RepositorySystemSession.CloseableSession session; + private List repositories; + private List defaultRepos; /** - * Creates a new instance of the artifact loader + * Sets up the artifact loading. */ @SuppressWarnings("deprecation") - public ArtifactLoader() { + public void setup() { + if (repository != null) { + return; + } + RepositorySystemSupplier repositorySupplier = new RepositorySystemSupplier(); repository = repositorySupplier.get(); @@ -91,6 +93,10 @@ public ArtifactLoader() { * Cleanup internal repository cache */ public void cleanup() { + if (repositories == null) { + return; + } + repositories.removeIf(remoteRepository -> !defaultRepos.contains(remoteRepository)); } @@ -98,6 +104,10 @@ public void cleanup() { * Cleanup and shutdown of the internal repository resolver */ public void stop() { + if (repository == null) { + return; + } + cleanup(); session.close(); repository.shutdown(); diff --git a/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonClassLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonClassLoader.java index 86158e48..4b839997 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonClassLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonClassLoader.java @@ -5,6 +5,8 @@ import de.craftsblock.craftsnet.addon.Addon; import de.craftsblock.craftsnet.addon.meta.AddonConfiguration; import de.craftsblock.craftsnet.logging.Logger; +import de.craftsblock.craftsnet.utils.reflection.ReflectionUtils; +import org.jetbrains.annotations.ApiStatus; import java.util.*; import java.util.concurrent.CopyOnWriteArraySet; @@ -14,7 +16,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 1.3.0 * @see CraftsNetUrlClassLoader * @since 3.0.3-SNAPSHOT */ @@ -40,8 +41,10 @@ public final class AddonClassLoader extends CraftsNetUrlClassLoaderThis implementation is based on a directed dependency graph and uses + * a topological sorting algorithm (Kahn's Algorithm) to determine a valid + * and efficient load order.

+ * * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @since 3.0.2-SNAPSHOT */ -final class AddonLoadOrder implements Closeable { +public final class AddonLoadOrder implements Closeable { + + /** + * Stores all known addons mapped by their name. + */ + private final Map addonLoadOrder = + Collections.synchronizedMap(new LinkedHashMap<>()); + + /** + * Stores required dependencies. + */ + private final Map> dependencies = new HashMap<>(); - private final Map addonLoadOrder = Collections.synchronizedMap(new LinkedHashMap<>()); + /** + * Stores optional dependencies. + */ + private final Map> softDependencies = new HashMap<>(); /** - * Adds an Addon to the system, considering its load order. - * The method utilizes a ConcurrentHashMap to efficiently manage the load order of addons based on their names. - * If an addon with the same name already exists, the load order is updated accordingly. + * Adds an Addon to the system. * - * @param addon The Addon object to be added to the system. + * @param addon The Addon to add */ public void addAddon(Addon addon) { - addonLoadOrder.compute(addon.getName(), (name, bootMapping) -> - (bootMapping == null) ? new BootMapping(name, 0, addon, true) : bootMapping.addon(addon)); + addonLoadOrder.compute( + addon.getName(), + (name, mapping) -> { + if (mapping == null) { + return new BootMapping(name, addon, true); + } + + return mapping.setAddon(addon); + } + ); } /** - * Perform cleanup for the current {@link AddonLoadOrder} - * when it is no longer used. + * Clears all stored data. */ @Override public void close() { addonLoadOrder.clear(); + dependencies.clear(); + softDependencies.clear(); } /** - * Checks if the specified addon is present in the addon load order and has a non-null association. + * Checks if the given addon exists. * - * @param addon The addon to be checked for presence. - * @return true if the addon is present in the addon load order and has a non-null association, false otherwise. + * @param addon The addon instance + * @return true if present */ public boolean contains(Addon addon) { return contains(addon.getName()); } /** - * Checks if the specified addon is present in the addon load order and has a non-null association. + * Checks if the given addon exists. * - * @param addon The addon to be checked for presence. - * @return true if the addon is present in the addon load order and has a non-null association, false otherwise. + * @param addon The addon name + * @return true if present */ public boolean contains(String addon) { - return addonLoadOrder.containsKey(addon) && addonLoadOrder.get(addon).addon() != null; + return addonLoadOrder.containsKey(addon) + && addonLoadOrder.get(addon).getAddon() != null; } /** - * Registers a required dependency for the specified addon. + * Registers a required dependency. * - * @param addon the addon that declares the dependency - * @param dependsOn the name of the addon that is depended on + * @param addon The addon declaring the dependency + * @param dependsOn The required dependency */ public void depends(String addon, String dependsOn) { - this.dryDepends(addon, dependsOn, true); + dryDepends(addon, dependsOn, dependencies, true); } /** - * Registers an optional (soft) dependency for the specified addon. + * Registers an optional dependency. * - * @param addon the addon that declares the dependency - * @param dependsOn the name of the addon that is optionally depended on - * @since 3.3.4-SNAPSHOT + * @param addon The addon declaring the dependency + * @param dependsOn The optional dependency */ public void softDepends(String addon, String dependsOn) { - this.dryDepends(addon, dependsOn, false); + this.dryDepends(addon, dependsOn, softDependencies, false); } /** - * Registers a dependency for the specified addon on another addon. - *

- * The dependency can be either required or optional based on the {@code required} parameter. - * This method updates the internal addon load order by merging a new {@link BootMapping} into the existing mapping. - * If a dependency mapping for {@code dependsOn} already exists, the method adjusts its priority and, if necessary, - * marks it as required. - *

+ * Registers a dependency with the specified required state. * - * @param addon the addon that declares the dependency - * @param dependsOn the name of the addon that is being depended on - * @param required {@code true} if the dependency is required, {@code false} otherwise. - * @throws IllegalStateException if the addon attempts to depend on itself - * @since 3.3.4-SNAPSHOT + * @param addon The addon declaring the dependency. + * @param dependsOn The dependency. + * @param dependencies The dependencies the dependency should be registered to. + * @param required Whether the dependency is forcibly required. */ - private void dryDepends(String addon, String dependsOn, boolean required) { - if (addon.equalsIgnoreCase(dependsOn)) { - throw new IllegalStateException("Can not add " + addon + " as depends to itself!"); + private void dryDepends(String addon, String dependsOn, + Map> dependencies, + boolean required) { + validateSelfDependency(addon, dependsOn); + + dependencies.computeIfAbsent(addon, k -> new HashSet<>()) + .add(dependsOn); + + addonLoadOrder.putIfAbsent(addon, new BootMapping(addon, null, false)); + + if (addonLoadOrder.containsKey(dependsOn)) { + addonLoadOrder.get(dependsOn).mergeRequired(required); + } else { + addonLoadOrder.put(dependsOn, new BootMapping(dependsOn, null, required)); } + } - final int addonPriority = getPriority(addon); - addonLoadOrder.merge(dependsOn, new BootMapping(dependsOn, addonPriority + 1, null, required), - (existingMapping, newMapping) -> { - int dependsOnPriority = getPriority(dependsOn); + /** + * Creates a new sorted stream of the currently registered + * {@link BootMapping}'s. + * + * @return The created and sorted stream. + */ + private @Unmodifiable Stream createSortedBootMappingStream() { + Map> graph = new HashMap<>(); + Map inDegree = new HashMap<>(); - if (required) { - existingMapping.require(); - } + for (String name : addonLoadOrder.keySet()) { + graph.putIfAbsent(name, new ArrayList<>()); + inDegree.putIfAbsent(name, 0); + } + + for (Map.Entry> entry : dependencies.entrySet()) { + String addon = entry.getKey(); - return (addonPriority <= dependsOnPriority) ? - existingMapping.priority(addonPriority + 1) : - existingMapping; - }); + for (String dep : entry.getValue()) { + if (!addonLoadOrder.containsKey(dep)) { + throw new IllegalStateException("Missing required dependency: " + dep); + } + + graph.computeIfAbsent(dep, k -> new ArrayList<>()).add(addon); + inDegree.put(addon, inDegree.getOrDefault(addon, 0) + 1); + } + } + + for (Map.Entry> entry : softDependencies.entrySet()) { + String addon = entry.getKey(); + + for (String dep : entry.getValue()) { + if (!addonLoadOrder.containsKey(dep)) { + continue; + } + + graph.computeIfAbsent(dep, k -> new ArrayList<>()).add(addon); + inDegree.put(addon, inDegree.getOrDefault(addon, 0) + 1); + } + } + + Queue queue = new ArrayDeque<>(); + for (Map.Entry entry : inDegree.entrySet()) { + if (entry.getValue() == 0) { + queue.add(entry.getKey()); + } + } + + List sorted = new ArrayList<>(); + while (!queue.isEmpty()) { + String current = queue.poll(); + sorted.add(current); + + for (String next : graph.getOrDefault(current, Collections.emptyList())) { + int newDegree = inDegree.merge(next, -1, Integer::sum); + if (newDegree == 0) { + queue.add(next); + } + } + } + + if (sorted.size() != addonLoadOrder.size()) { + throw new IllegalStateException("Dependency cycle detected!"); + } + + return sorted.stream().map(addonLoadOrder::get); } /** - * Retrieves an unmodifiable collection representing the load order of addons names. - * The method generates a sorted list of addon names based on their load priorities, - * and then maps the names to their corresponding addons using the addonLoadOrder map. + * Builds and returns the final load order. + * + *

This method performs a topological sort over the dependency graph.

* - * @return An unmodifiable Collection of addons, representing the load order. - * @since 3.4.3 + * @return ordered list of addons + * @throws IllegalStateException if dependencies are missing or cyclic */ public @Unmodifiable List getPreLoadOrder() { - List bootOrderList = new ArrayList<>(addonLoadOrder.keySet()); - bootOrderList.sort(Comparator.comparingInt(value -> addonLoadOrder.get(value.toString()).priority()).reversed()); - return bootOrderList; + return createSortedBootMappingStream() + .filter(Objects::nonNull) + .map(BootMapping::getName) + .toList(); } /** - * Retrieves an unmodifiable collection representing the load order of addons. - * The resulting list of addons is filtered to exclude any null values, and the final collection is returned. + * Builds and returns the final load order. + * + *

This method performs a topological sort over the dependency graph.

* - * @return An unmodifiable Collection of addons, representing the load order. + * @return ordered list of addons + * @throws IllegalStateException if dependencies are missing or cyclic */ public @Unmodifiable List getLoadOrder() { - return getPreLoadOrder().stream() - .map(addonLoadOrder::get) + return createSortedBootMappingStream() .filter(Objects::nonNull) .filter(BootMapping::presenceFilter) - .sorted((o1, o2) -> Integer.compare(o2.priority(), o1.priority())) - .map(BootMapping::addon) + .map(BootMapping::getAddon) .filter(Objects::nonNull) - .collect(Collectors.toCollection(ArrayList::new)); + .toList(); } /** - * Retrieves the priority of an addon in the load order. - * If the addon is not found in the load order, a default BootMapping with priority 0 is used. - * - * @param addon The name of the addon for which the priority is to be retrieved. - * @return The priority of the specified addon in the load order. + * Validates that an addon does not depend on itself. */ - private int getPriority(String addon) { - if (addonLoadOrder.containsKey(addon)) { - return addonLoadOrder.get(addon).priority(); + private void validateSelfDependency(String addon, String dependsOn) { + if (addon.equalsIgnoreCase(dependsOn)) { + throw new IllegalStateException("Can not add " + addon + " as depends to itself!"); } - - return 0; } /** - * Represents a mapping used in the context of addon load order, associating a priority level with an addon. - * This class is utilized for organizing and managing the load order of addons within the system. + * Represents an internal mapping for an addon. */ private static class BootMapping { private final String name; - private int priority; - private Addon addon; private boolean required; + private Addon addon; /** - * Constructs a BootMapping with the specified priority and addon. + * Constructs a BootMapping for the specified addon. * * @param name The name of the addon. - * @param priority The priority level assigned to the addon in the load order. * @param addon The addon associated with this mapping. * @param required Whether this {@link BootMapping} is required to properly start or not. */ - public BootMapping(@NotNull String name, int priority, @Nullable Addon addon, boolean required) { + public BootMapping(@NotNull String name, + @Nullable Addon addon, + boolean required) { this.name = name; - this.priority = priority; this.addon = addon; this.required = required; } /** - * Sets the priority level for the addon in the load order. + * Gets the addon name associated with this mapping. * - * @param priority The new priority level to be set. - * @return The modified BootMapping instance with the updated priority. + * @return The addon name. */ - public BootMapping priority(int priority) { - this.priority = priority; - return this; + public String getName() { + return name; } /** @@ -212,56 +280,46 @@ public BootMapping priority(int priority) { * @param addon The addon to be associated with this mapping. * @return The modified BootMapping instance with the updated addon. */ - public BootMapping addon(Addon addon) { + public BootMapping setAddon(Addon addon) { this.addon = addon; return this; } /** - * Marks this {@link BootMapping} as required to properly start. + * Retrieves the addon associated with this mapping. * - * @since 3.3.4-SNAPSHOT + * @return The addon associated with this mapping. */ - public void require() { - this.required = true; + public Addon getAddon() { + return addon; } /** - * Retrieves the priority level assigned to the addon in the load order. + * Merges the required state into this mapping. * - * @return The priority level of the addon in the load order. + * @param required The required state to apply if this mapping is not already required. */ - public int priority() { - return priority; - } + public void mergeRequired(boolean required) { + if (this.required) { + return; + } - /** - * Retrieves the addon associated with this mapping. - * - * @return The addon associated with this mapping. - */ - public Addon addon() { - return addon; + this.required = required; } /** - * Filter for the presence check of this {@link BootMapping}. + * Ensures required addons are present. * - * @return {@code true} if the {@link BootMapping} is properly present. - * @throws IllegalStateException If the addon is required but not present. - * @since 3.3.4-SNAPSHOT + * @return true if valid */ public boolean presenceFilter() { - if (!required) { + if (!required || addon != null) { return true; } - if (addon != null) { - return true; - } - - throw new IllegalStateException("The addon \"" + this.name + "\" is required but not found!"); + throw new IllegalStateException( + "The addon " + this.name + " is required but not found!" + ); } - } -} +} \ No newline at end of file diff --git a/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonLoader.java index 9bebe330..22d52193 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/loaders/AddonLoader.java @@ -17,7 +17,6 @@ import de.craftsblock.craftsnet.events.addons.AllAddonsLoadedEvent; import de.craftsblock.craftsnet.logging.Logger; import de.craftsblock.craftsnet.utils.reflection.ReflectionUtils; -import org.jetbrains.annotations.NotNull; import java.io.*; import java.net.URI; @@ -30,7 +29,6 @@ import java.util.function.BiConsumer; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import java.util.regex.Pattern; import java.util.zip.ZipFile; /** @@ -39,7 +37,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 2.3.4 * @see Addon * @see AddonManager * @since 1.0.0-SNAPSHOT @@ -158,22 +155,29 @@ public Collection load() throws IOException { } artifactLoader.cleanup(); - if (addon.contains("repositories")) { - for (String repo : addon.getStringList("repositories")) { - artifactLoader.addRepository(repo); - } + + var mavenRepositories = addon.getStringList("repositories"); + if (!mavenRepositories.isEmpty()) { + artifactLoader.setup(); + mavenRepositories.forEach(artifactLoader::addRepository); } URL[] dependencies; - if (addon.contains("dependencies")) { - dependencies = artifactLoader.loadLibraries(this.craftsNet, this, configuration.services(), - name, addon.getStringList("dependencies").toArray(String[]::new)); + var mavenDependencies = addon.getStringList("dependencies"); + if (!mavenDependencies.isEmpty()) { + artifactLoader.setup(); + dependencies = artifactLoader.loadLibraries( + this.craftsNet, this, + configuration.services(), + name, mavenDependencies.toArray(String[]::new) + ); } else { dependencies = new URL[0]; } DependencyClassLoader[] dependencyClassLoaders = Arrays.stream(dependencies) - .map(url -> DependencyClassLoader.safelyNew(craftsNet, url)).toArray(DependencyClassLoader[]::new); + .map(url -> DependencyClassLoader.safelyNew(craftsNet, url)) + .toArray(DependencyClassLoader[]::new); URL[] classpath = new URL[]{path.toUri().toURL()}; configurations.put(name, new AddonConfiguration(path, configuration.json(), classpath, dependencyClassLoaders, @@ -201,49 +205,40 @@ public void load(List rawConfigurations) { configurations = new ArrayList<>(rawConfigurations); } - AddonLoadOrder loadOrder = new AddonLoadOrder(); - HashMap>> codesSources = new HashMap<>(); - - configurations.forEach(configuration -> { - configuration.meta().set(AddonMeta.of(configuration)); - - configuration.classLoader().set(new AddonClassLoader(this.craftsNet, configuration)); - preBuildLoadOrder(loadOrder, configuration); - }); - sortConfigurations(loadOrder, configurations); + try (AddonLoadOrder loadOrder = new AddonLoadOrder()) { + configurations.forEach(configuration -> { + configuration.meta().set(AddonMeta.of(configuration)); - // Initialize tasks - configurations.forEach(configuration -> { - Addon addon = instantiateAddon(configuration); - if (addon == null) { - return; - } + configuration.classLoader().set(new AddonClassLoader(this.craftsNet, configuration)); + preBuildLoadOrder(loadOrder, configuration); + }); - craftsNet.getAddonManager().register(addon); - configuration.addon().set(addon); + sortConfigurations(loadOrder, configurations); - addToLoadOrder(loadOrder, addon); - addCodeSource(configuration, addon, codesSources); - }); + HashMap>> codesSources = new HashMap<>(); + configurations.forEach(configuration -> { + Addon addon = instantiateAddon(configuration); + if (addon == null) { + return; + } - configurations.forEach(this::loadServices); + craftsNet.getAddonManager().register(addon); + configuration.addon().set(addon); - HashMap> autoRegisterInfos; - try (AutoRegisterLoader autoRegisterLoader = new AutoRegisterLoader()) { - autoRegisterInfos = convertToAutoRegister(autoRegisterLoader, codesSources); - } + addToLoadOrder(loadOrder, addon); + addCodeSource(configuration, addon, codesSources); + }); - Collection orderedLoad = enableAddons(loadOrder, autoRegisterInfos); + configurations.forEach(this::loadServices); - autoRegisterInfos.clear(); - orderedLoad.clear(); - loadOrder.close(); + HashMap> autoRegisterInfos; + try (AutoRegisterLoader autoRegisterLoader = new AutoRegisterLoader()) { + autoRegisterInfos = convertToAutoRegister(autoRegisterLoader, codesSources); + } - try { + enableAddons(loadOrder, autoRegisterInfos); craftsNet.getListenerRegistry().call(new AllAddonsLoadedEvent()); - } catch (Exception e) { - logger.error("Can not fire addons loaded event!", e); } } @@ -252,10 +247,9 @@ public void load(List rawConfigurations) { * * @param loadOrder The {@link AddonLoadOrder load order} in which the addons will be loaded. * @param autoRegisterInfos A list of {@link AutoRegisterInfo} which should be applied for the addons. - * @return The list of all loaded addons. * @since 3.5.0 */ - private @NotNull Collection enableAddons(AddonLoadOrder loadOrder, HashMap> autoRegisterInfos) { + private void enableAddons(AddonLoadOrder loadOrder, HashMap> autoRegisterInfos) { Collection orderedLoad = loadOrder.getLoadOrder(); // Loading all addons @@ -281,8 +275,6 @@ public void load(List rawConfigurations) { craftsNet.getAutoRegisterRegistry().handleAll(autoRegisterInfos.get(addon), Startup.ENABLE); }); - - return orderedLoad; } /** @@ -293,7 +285,7 @@ public void load(List rawConfigurations) { * @since 3.4.3 */ private void sortConfigurations(AddonLoadOrder loadOrder, List configurations) { - var orderedConfigurationNames = loadOrder.getPreLoadOrder(); + List orderedConfigurationNames = loadOrder.getPreLoadOrder(); Map sortMap = new HashMap<>(); for (int i = 0; i < orderedConfigurationNames.size(); i++) { sortMap.put(orderedConfigurationNames.get(i), i); @@ -313,7 +305,7 @@ private void preBuildLoadOrder(AddonLoadOrder loadOrder, AddonConfiguration conf AddonMeta meta = configuration.meta().get(); String name = meta.name(); if (loadOrder.contains(name)) { - throw new IllegalStateException("There are two plugins with the same name: \"%s\"!".formatted(name)); + throw new IllegalStateException("There are two addons with the same name: \"%s\"!".formatted(name)); } processDepends(name, meta.depends(), loadOrder::depends); @@ -387,12 +379,7 @@ private void addCodeSource(AddonConfiguration configuration, Addon addon, private Addon instantiateAddon(AddonConfiguration configuration) { try { AddonMeta meta = configuration.meta().get(); - - String name = meta.name(); - Pattern pattern = Pattern.compile("^[a-zA-Z0-9]*$"); - if (!pattern.matcher(name).matches()) { - throw new IllegalArgumentException("Plugin names must not contain special characters / spaces! Plugin name: \"" + name + "\""); - } + String name = AddonConfiguration.ensureValidAddonName(meta.name()); logger.info("Found addon %s, add it to load order", name); @@ -408,7 +395,6 @@ private Addon instantiateAddon(AddonConfiguration configuration) { ") is not an instance of " + Addon.class.getSimpleName() + "!"); } - // Create an instance of the main class and inject dependencies using reflection Class addonClass = clazz.asSubclass(Addon.class); Addon addon = ReflectionUtils.getNewInstance(addonClass); ReflectionUtils.setField("craftsNet", addon, craftsNet); diff --git a/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetClassLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetClassLoader.java index 940a00f3..9b69687e 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetClassLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetClassLoader.java @@ -18,7 +18,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 2.0.1 * @see CraftsNet * @see CraftsNetUrlClassLoader * @since 3.5.0 diff --git a/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetUrlClassLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetUrlClassLoader.java index 957aed8c..d4a2f0e4 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetUrlClassLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/loaders/CraftsNetUrlClassLoader.java @@ -13,8 +13,8 @@ * An abstract base implementation of a {@link URLClassLoader} that is tied to a specific * {@link CraftsNet} instance. * + * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.0 * @see CraftsNetClassLoader * @see AddonClassLoader * @see DependencyClassLoader diff --git a/src/main/java/de/craftsblock/craftsnet/addon/loaders/DependencyClassLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/loaders/DependencyClassLoader.java index ddc37134..173ac910 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/loaders/DependencyClassLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/loaders/DependencyClassLoader.java @@ -14,9 +14,8 @@ /** * Class responsible for loading dependencies dynamically into the CraftsNet framework. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see CraftsNetUrlClassLoader * @since 3.4.3 */ diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonConfiguration.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonConfiguration.java index e940cd45..bb3d9b10 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonConfiguration.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonConfiguration.java @@ -17,7 +17,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Pattern; -import java.util.stream.Collectors; /** * Represents the configuration details of an {@link Addon}, including its metadata, classpath, and dependencies. @@ -36,7 +35,6 @@ * @param meta Reference to the {@link AddonMeta} metadata of the addon. * @author Philipp Maywald * @author CraftsBlock - * @version 1.4.0 * @since 3.1.0-SNAPSHOT */ public record AddonConfiguration(Path path, Json json, URL[] classpath, DependencyClassLoader[] dependencyLoaders, @@ -44,6 +42,11 @@ public record AddonConfiguration(Path path, Json json, URL[] classpath, Dependen AtomicReference meta, AtomicReference classLoader) implements Comparable { + /** + * Pattern for validating addon names. + */ + public static final Pattern ADDON_NAME_VALIDATOR = Pattern.compile("^[a-zA-Z0-9\\-_.]{1,128}$"); + @ApiStatus.Internal private static final ConcurrentHashMap, String> MAPPED_NAMES = new ConcurrentHashMap<>(); @@ -75,36 +78,45 @@ public static AddonConfiguration of(Path path, Json json, URL[] classpath, Depen * @throws IllegalStateException If the provided addon class is not annotated with {@link Meta}. */ public static List of(CraftsNet craftsNet, AddonLoader loader, Class addon) { + String name; Meta meta = addon.getDeclaredAnnotation(Meta.class); - if (meta == null && !MAPPED_NAMES.containsKey(addon)) - throw new IllegalStateException("The addon class " + addon.getName() + " is not annotated with @" + Meta.class.getSimpleName() + "!"); + if (meta != null) { + name = meta.name(); + } else if (MAPPED_NAMES.containsKey(addon)) { + name = MAPPED_NAMES.get(addon); + craftsNet.getLogger().warning("Deprecated: " + addon.getName() + " still uses a mapped addon name!"); + } else { + name = addon.getSimpleName(); + } - String name = MAPPED_NAMES.getOrDefault(addon, meta != null ? meta.name() : null); + ensureValidAddonName(name); Depends depends = addon.getDeclaredAnnotation(Depends.class); List services = new ArrayList<>(); - List classpath = new ArrayList<>(); - classpath.add(addon.getProtectionDomain().getCodeSource().getLocation()); - - Json conf = Json.empty().set("name", sanitizeName(name)) + Json conf = Json.empty().set("name", name) .set("main", addon.getName()); Set classes = new HashSet<>(); - if (depends != null) classes.add(depends); - else { + if (depends != null) { + classes.add(depends); + } else { DependsCollection collection = addon.getDeclaredAnnotation(DependsCollection.class); - if (collection != null) classes.addAll(List.of(collection.value())); + if (collection != null) { + classes.addAll(List.of(collection.value())); + } } - List configurations = new ArrayList<>(); + Set configurations = new HashSet<>(); for (Depends depend : classes) { List subs = of(craftsNet, loader, depend.value()); - if (subs.isEmpty()) continue; + if (subs.isEmpty()) { + continue; + } configurations.addAll(subs); AddonConfiguration subConfig = subs.get(subs.size() - 1); conf.set((depend.soft() ? "softD" : "d") + "epends.$new", subConfig.json().get("name")); - classpath.addAll(Arrays.stream(subConfig.classpath()).collect(Collectors.toSet())); + configurations.addAll(subs); } // Create a new artifact loader @@ -112,30 +124,50 @@ public static List of(CraftsNet craftsNet, AddonLoader loade Shadow shadow = addon.getDeclaredAnnotation(Shadow.class); EnumMap> shadows = new EnumMap<>(ShadowType.class); - if (shadow != null) shadows.computeIfAbsent(shadow.type(), s -> new ArrayList<>()).add(shadow.value()); - else { + if (shadow != null) { + shadows.computeIfAbsent(shadow.type(), s -> new ArrayList<>()).add(shadow.value()); + } else { ShadowCollection collection = addon.getDeclaredAnnotation(ShadowCollection.class); - if (collection != null) - for (Shadow nested : collection.value()) + if (collection != null) { + for (Shadow nested : collection.value()) { shadows.computeIfAbsent(nested.type(), s -> new ArrayList<>()).add(nested.value()); + } + } } - // Inject all repositories - if (shadows.containsKey(ShadowType.REPOSITORY)) - for (String repo : shadows.get(ShadowType.REPOSITORY)) + var mavenRepos = shadows.get(ShadowType.REPOSITORY); + if (mavenRepos != null && !mavenRepos.isEmpty()) { + artifactLoader.setup(); + for (String repo : mavenRepos) { artifactLoader.addRepository(repo); + } + } // Load all required dependencies URL[] dependencies; - if (shadows.containsKey(ShadowType.DEPENDENCY)) - dependencies = artifactLoader.loadLibraries(craftsNet, loader, services, name, shadows.get(ShadowType.DEPENDENCY).toArray(String[]::new)); - else dependencies = new URL[0]; + var mavenDependencies = shadows.get(ShadowType.DEPENDENCY); + if (mavenDependencies != null && !mavenDependencies.isEmpty()) { + artifactLoader.setup(); + dependencies = artifactLoader.loadLibraries( + craftsNet, loader, + services, name, + shadows.get(ShadowType.DEPENDENCY).toArray(String[]::new) + ); + } else { + dependencies = new URL[0]; + } - classpath.addAll(Arrays.stream(dependencies).collect(Collectors.toSet())); artifactLoader.stop(); - configurations.add(of(null, conf, classpath.toArray(URL[]::new), new DependencyClassLoader[0], services)); - return configurations; + DependencyClassLoader[] dependencyClassLoaders = Arrays.stream(dependencies) + .map(url -> DependencyClassLoader.safelyNew(craftsNet, url)) + .toArray(DependencyClassLoader[]::new); + URL[] classpath = new URL[]{addon.getProtectionDomain().getCodeSource().getLocation()}; + + AddonConfiguration configuration = of(null, conf, classpath, dependencyClassLoaders, services); + configuration.classLoader().set(new AddonClassLoader(craftsNet, configuration)); + configurations.add(configuration); + return new ArrayList<>(configurations); } /** @@ -151,21 +183,20 @@ public int compareTo(@NotNull AddonConfiguration o) { } /** - * Pattern for validating addon names. - *

Addon names can only contain alphanumeric characters.

- */ - public static final Pattern NAME_VALIDATOR = Pattern.compile("^[a-zA-Z0-9]*$"); - - /** - * Sanitizes the name of the addon through checking the name against the {@link AddonConfiguration#NAME_VALIDATOR}. + * Sanitizes the name of the addon through checking the name against the {@link AddonConfiguration#ADDON_NAME_VALIDATOR}. * * @param name The name of the addon. * @return The sanitized name of the addon. - * @throws IllegalArgumentException If the addon name does not match with {@link AddonConfiguration#NAME_VALIDATOR}. + * @throws IllegalArgumentException If the addon name does not match with {@link AddonConfiguration#ADDON_NAME_VALIDATOR}. */ - private static String sanitizeName(String name) { - if (NAME_VALIDATOR.matcher(name).matches()) return name; - throw new IllegalArgumentException("Addon names must not contain special characters / spaces! Provided: \"" + name + "\""); + public static String ensureValidAddonName(String name) { + if (ADDON_NAME_VALIDATOR.matcher(name).matches()) { + return name; + } + + throw new IllegalArgumentException("Invalid addon name: " + name.substring(0, 128) + ". " + + "Only letters, numbers, hyphens, underscores and dots are allowed, " + + "up to 128 characters."); } /** @@ -173,7 +204,13 @@ private static String sanitizeName(String name) { * * @param addon The addon class. * @param name The name to associate with the addon class. + * @deprecated Addon classes will use the class name as it's mapped name + * if no {@link de.craftsblock.craftsnet.addon.meta.annotations.Meta} annotation is present. + * There will be no replacement as custom mapped names are no longer supported. */ + @ApiStatus.Internal + @Deprecated(since = "3.7.2", forRemoval = true) + @ApiStatus.ScheduledForRemoval(inVersion = "3.8.0") public static void map(Class addon, String name) { MAPPED_NAMES.put(addon, name); } diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonMeta.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonMeta.java index 1e55bc0f..acd59fc4 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonMeta.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/AddonMeta.java @@ -26,7 +26,6 @@ * @param dependencies The maven dependencies this addon needs. * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.2 * @since 3.1.0-SNAPSHOT */ public record AddonMeta(String name, String mainClass, String description, List authors, diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/ShadowType.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/ShadowType.java index df0b72e5..67de4aa7 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/ShadowType.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/ShadowType.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.4-SNAPSHOT */ public enum ShadowType { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/Startup.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/Startup.java index 886f854e..931ff864 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/Startup.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/Startup.java @@ -5,7 +5,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.2.0-SNAPSHOT */ public enum Startup { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Depends.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Depends.java index d295415e..1e98a907 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Depends.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Depends.java @@ -15,7 +15,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @see DependsCollection * @since 3.1.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/DependsCollection.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/DependsCollection.java index bb15127c..44031867 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/DependsCollection.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/DependsCollection.java @@ -17,7 +17,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Depends * @since 3.1.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Meta.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Meta.java index c053e25e..56024111 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Meta.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Meta.java @@ -1,5 +1,7 @@ package de.craftsblock.craftsnet.addon.meta.annotations; +import org.intellij.lang.annotations.Pattern; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -14,7 +16,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.1.0-SNAPSHOT */ @Target(ElementType.TYPE) @@ -30,6 +31,6 @@ * * @return The name of the addon. */ - String name(); + @Pattern("^[a-zA-Z0-9\\-_.]{1,128}$") String name(); } diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Shadow.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Shadow.java index 59c7fc5a..aad6f43f 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Shadow.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/Shadow.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see ShadowCollection * @see ShadowType * @since 3.3.4-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/ShadowCollection.java b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/ShadowCollection.java index 90502bcd..4d042dda 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/ShadowCollection.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/meta/annotations/ShadowCollection.java @@ -12,7 +12,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Shadow * @since 3.3.4-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceLoader.java index 43e40ef2..5d38504c 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceLoader.java @@ -10,9 +10,8 @@ * to create a new instance of a class and to load a service provider for further processing. * * @param The type of service to be loaded. - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.0.0-SNAPSHOT */ public interface ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceManager.java b/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceManager.java index 8f584d5a..e38e6991 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceManager.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/ServiceManager.java @@ -22,9 +22,8 @@ * The ServiceManager class represents a manager responsible for handling various service loaders in a system. * It manages the registration, unregistration, and loading of service providers through the use of ServiceLoader instances. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.6 + * @author CraftsBlock * @since 3.0.0-SNAPSHOT */ public class ServiceManager { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/IIOServiceLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/IIOServiceLoader.java index 03969bc7..8ecb02a4 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/IIOServiceLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/IIOServiceLoader.java @@ -10,9 +10,8 @@ * This class specifically focuses on loading instances of {@link IIOServiceProvider} into the default * {@link IIORegistry}. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.0-SNAPSHOT */ public class IIOServiceLoader implements ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/SQLDriverLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/SQLDriverLoader.java index 107cb5f0..b2d0ec20 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/SQLDriverLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/SQLDriverLoader.java @@ -11,9 +11,8 @@ * A concrete implementation of the {@link ServiceLoader} interface for managing instances of {@link Driver}. * This class specifically focuses on loading instances of {@link Driver} into the {@link DriverManager}. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.0-SNAPSHOT */ public class SQLDriverLoader implements ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/GenericHandlerLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/GenericHandlerLoader.java index a4fc22b1..4a131b36 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/GenericHandlerLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/GenericHandlerLoader.java @@ -9,9 +9,8 @@ * A concrete implementation of the {@link ServiceLoader} interface for managing instances of {@link Handler}. * This class specifically focuses on loading instances of {@link Handler} into the {@link RouteRegistry}. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.1.0-SNAPSHOT */ public class GenericHandlerLoader implements ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/MiddlewareHandlerLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/MiddlewareHandlerLoader.java index 62fb735b..6414e0ec 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/MiddlewareHandlerLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/MiddlewareHandlerLoader.java @@ -9,9 +9,8 @@ * A concrete implementation of the {@link ServiceLoader} interface for managing instances of {@link Middleware}. * This class specifically focuses on loading instances of {@link Middleware} into the {@link MiddlewareRegistry}. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.4.0-SNAPSHOT */ public class MiddlewareHandlerLoader implements ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/RequestHandlerLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/RequestHandlerLoader.java index 35110fdc..b119ba5a 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/RequestHandlerLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/RequestHandlerLoader.java @@ -9,9 +9,8 @@ * A concrete implementation of the {@link ServiceLoader} interface for managing instances of {@link RequestHandler}. * This class specifically focuses on loading instances of {@link RequestHandler} into the {@link RouteRegistry}. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.1.0-SNAPSHOT */ public class RequestHandlerLoader implements ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/SocketHandlerLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/SocketHandlerLoader.java index 21ed517d..39541e8f 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/SocketHandlerLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/handlers/SocketHandlerLoader.java @@ -9,9 +9,8 @@ * A concrete implementation of the {@link ServiceLoader} interface for managing instances of {@link SocketHandler}. * This class specifically focuses on loading instances of {@link SocketHandler} into the {@link RouteRegistry}. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.1.0-SNAPSHOT */ public class SocketHandlerLoader implements ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/listeners/ListenerAdapterLoader.java b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/listeners/ListenerAdapterLoader.java index 30c33be4..35c1695e 100644 --- a/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/listeners/ListenerAdapterLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/addon/services/builtin/listeners/ListenerAdapterLoader.java @@ -9,9 +9,8 @@ * A concrete implementation of the {@link ServiceLoader} interface for managing instances of {@link ListenerAdapter}. * This class specifically focuses on loading instances of {@link ListenerAdapter} into the {@link ListenerRegistry}. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.1.0-SNAPSHOT */ public class ListenerAdapterLoader implements ServiceLoader { diff --git a/src/main/java/de/craftsblock/craftsnet/api/BaseExchange.java b/src/main/java/de/craftsblock/craftsnet/api/BaseExchange.java index e70f38fa..3d76d04a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/BaseExchange.java +++ b/src/main/java/de/craftsblock/craftsnet/api/BaseExchange.java @@ -10,7 +10,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.5.0 * @since 1.0.0-SNAPSHOT */ public interface BaseExchange extends AutoCloseable { diff --git a/src/main/java/de/craftsblock/craftsnet/api/Handler.java b/src/main/java/de/craftsblock/craftsnet/api/Handler.java index efaa2b03..edb9c116 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/Handler.java +++ b/src/main/java/de/craftsblock/craftsnet/api/Handler.java @@ -5,9 +5,8 @@ /** * Represents a contract for classes that handle any type of connections in a server application. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Socket * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/RouteRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/RouteRegistry.java index 904bcad7..aabf7240 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/RouteRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/RouteRegistry.java @@ -40,9 +40,8 @@ * The RouteRegistry class manages the registration and unregistration of {@link RequestHandler} (routes) and {@link SocketHandler} (websockets). * It stores and maps the registered routes and sockets based on their patterns, allowing for efficient handling of incoming requests. * - * @author CraftsBlock * @author Philipp Maywald - * @version 3.5.6 + * @author CraftsBlock * @since 1.0.0-SNAPSHOT */ public class RouteRegistry { @@ -641,7 +640,6 @@ public CraftsNet getCraftsNet() { * @param validator The {@link Pattern} used for validating input related to the endpoint. * @param requirements A concurrent map of requirements, indexed by their annotation class. * @param middlewares A {@link Deque} containing locally present middlewares - * @version 2.0.0 * @since 3.0.5-SNAPSHOT */ public record EndpointMapping(@NotNull ProcessPriority.Priority priority, @NotNull Method method, @NotNull Handler handler, @@ -699,7 +697,6 @@ public record ShareMapping(@NotNull String filepath, boolean onlyGet) implements * The ServerMapping class represents a mapping of a server, and it's instance. * * @param rawServer The type of the server. - * @version 1.1.0 * @since 3.0.3-SNAPSHOT */ private record ServerMapping(Class rawServer) { @@ -737,7 +734,6 @@ public Server server(CraftsNet craftsNet) { *

Provides default methods for checking and retrieving metadata about requirements * indexed by annotation types.

* - * @version 2.0.0 * @since 3.0.3-SNAPSHOT */ public interface Mapping { diff --git a/src/main/java/de/craftsblock/craftsnet/api/Server.java b/src/main/java/de/craftsblock/craftsnet/api/Server.java index 9dcde664..3b0acfe6 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/Server.java +++ b/src/main/java/de/craftsblock/craftsnet/api/Server.java @@ -11,9 +11,8 @@ /** * Abstract class representing a server in the CraftsNet framework. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.3 + * @author CraftsBlock * @since 3.0.3-SNAPSHOT */ public abstract class Server { diff --git a/src/main/java/de/craftsblock/craftsnet/api/annotations/Domain.java b/src/main/java/de/craftsblock/craftsnet/api/annotations/Domain.java index 9329e911..f6ce24d5 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/annotations/Domain.java +++ b/src/main/java/de/craftsblock/craftsnet/api/annotations/Domain.java @@ -11,9 +11,8 @@ * Specifies the domain associated with an HTTP request handler or service. * This annotation can be applied to methods or classes. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see WebServer * @since 2.3.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/annotations/ProcessPriority.java b/src/main/java/de/craftsblock/craftsnet/api/annotations/ProcessPriority.java index 018c8e28..5c6c1e32 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/annotations/ProcessPriority.java +++ b/src/main/java/de/craftsblock/craftsnet/api/annotations/ProcessPriority.java @@ -11,9 +11,8 @@ * Methods annotated with this annotation can specify a priority level * to influence their execution order in a prioritized processing system. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.1-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/Codec.java b/src/main/java/de/craftsblock/craftsnet/api/codec/Codec.java index a4be73e1..ad4f3e8a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/Codec.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/Codec.java @@ -10,7 +10,6 @@ * @param The input type. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Encoder * @see Decoder * @since 3.5.0 diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/CodecMethodLink.java b/src/main/java/de/craftsblock/craftsnet/api/codec/CodecMethodLink.java index 2b5c944b..9fea79f5 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/CodecMethodLink.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/CodecMethodLink.java @@ -15,7 +15,6 @@ * @param The codec pair type. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Codec * @see CodecPair * @since 3.5.3 diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/CodecPair.java b/src/main/java/de/craftsblock/craftsnet/api/codec/CodecPair.java index f3ae7695..bcbfd069 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/CodecPair.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/CodecPair.java @@ -12,7 +12,6 @@ * @param The codec type, which must implement {@link Codec}. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see DecoderPair * @see EncoderPair * @since 3.5.0 diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/Decoder.java b/src/main/java/de/craftsblock/craftsnet/api/codec/Decoder.java index 20dca465..f37923ed 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/Decoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/Decoder.java @@ -10,7 +10,6 @@ * @param The input type to be decoded. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 */ public non-sealed interface Decoder extends Codec { diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/DecoderPair.java b/src/main/java/de/craftsblock/craftsnet/api/codec/DecoderPair.java index de73d813..c30c3925 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/DecoderPair.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/DecoderPair.java @@ -9,7 +9,6 @@ * @param The target type to be decoded. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Decoder * @see CodecPair * @since 3.5.0 diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/Encoder.java b/src/main/java/de/craftsblock/craftsnet/api/codec/Encoder.java index ba42e62e..cc6b72d1 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/Encoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/Encoder.java @@ -10,7 +10,6 @@ * @param The input type to be encoded. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 */ public non-sealed interface Encoder extends Codec { diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/EncoderPair.java b/src/main/java/de/craftsblock/craftsnet/api/codec/EncoderPair.java index 3658403c..d54b206a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/EncoderPair.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/EncoderPair.java @@ -9,7 +9,6 @@ * @param The target type to be encoded. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Encoder * @see CodecPair * @since 3.5.0 diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeDecoderRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeDecoderRegistry.java index fe233a13..7435a3dd 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeDecoderRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeDecoderRegistry.java @@ -17,7 +17,6 @@ * @param the type of decoder being managed * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Decoder * @see DecoderPair * @see TypeCodecRegistry diff --git a/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeEncoderRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeEncoderRegistry.java index 4cafc683..deacd205 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeEncoderRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/codec/registry/TypeEncoderRegistry.java @@ -20,7 +20,6 @@ * @param the type of encoder being managed * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Encoder * @see EncoderPair * @see TypeCodecRegistry diff --git a/src/main/java/de/craftsblock/craftsnet/api/exceptions/UnknownSchemeException.java b/src/main/java/de/craftsblock/craftsnet/api/exceptions/UnknownSchemeException.java index dbc14ce5..958d5196 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/exceptions/UnknownSchemeException.java +++ b/src/main/java/de/craftsblock/craftsnet/api/exceptions/UnknownSchemeException.java @@ -7,7 +7,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.2-SNAPSHOT */ public class UnknownSchemeException extends RuntimeException { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/DefaultPages.java b/src/main/java/de/craftsblock/craftsnet/api/http/DefaultPages.java index 6edd04f6..5d5e87ab 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/DefaultPages.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/DefaultPages.java @@ -6,9 +6,8 @@ * Default pages for HTTP error responses. * This class provides static methods to generate HTML content for common HTTP error responses such as 404 Not Found and 403 Forbidden. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 2.3.3-SNAPSHOT */ class DefaultPages { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/Exchange.java b/src/main/java/de/craftsblock/craftsnet/api/http/Exchange.java index d47c222d..4226c056 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/Exchange.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/Exchange.java @@ -14,9 +14,8 @@ * The Exchange object encapsulates the incoming request data (headers, parameters, cookies, body) as a {@link Request} object, * and the outgoing response data (headers, status code, body) as a {@link Response} object. * - * @author CraftsBlock * @author Philipp Maywald - * @version 3.1.1 + * @author CraftsBlock * @see BaseExchange * @see Request * @see Response diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/HttpMethod.java b/src/main/java/de/craftsblock/craftsnet/api/http/HttpMethod.java index 5854e987..263c5c74 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/HttpMethod.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/HttpMethod.java @@ -12,9 +12,8 @@ * It also includes the UNKNOWN value for unrecognized methods. * The enum provides methods to parse and convert these methods to strings and arrays for use in HTTP request handling. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.1 + * @author CraftsBlock * @see Route * @since 1.0.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/Request.java b/src/main/java/de/craftsblock/craftsnet/api/http/Request.java index 1b03f741..54565bad 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/Request.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/Request.java @@ -25,9 +25,8 @@ * The class is responsible for parsing and providing access to various elements of the request, making it easier for * request handlers to process and respond to the incoming requests. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.6.2 + * @author CraftsBlock * @see Exchange * @since 1.0.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/RequestHandler.java b/src/main/java/de/craftsblock/craftsnet/api/http/RequestHandler.java index 0d273cda..85c205fd 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/RequestHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/RequestHandler.java @@ -14,9 +14,8 @@ * Developers can implement this interface in classes that are designed to handle incoming requests and use it to easily * identify request handling components within a system or framework. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0 + * @author CraftsBlock * @since 1.0.0-SNAPSHOT */ public interface RequestHandler extends Handler { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/Response.java b/src/main/java/de/craftsblock/craftsnet/api/http/Response.java index ce277fde..d0ccc7e4 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/Response.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/Response.java @@ -34,9 +34,8 @@ * It is used internally by the WebServer to construct and send HTTP responses to client requests. * Developers should not create instances of this class directly but use the provided methods in the WebServer class. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.3.0 + * @author CraftsBlock * @see Exchange * @see WebServer * @since 1.0.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/WebHandler.java b/src/main/java/de/craftsblock/craftsnet/api/http/WebHandler.java index ab515302..012050b0 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/WebHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/WebHandler.java @@ -43,9 +43,8 @@ /** * Handles HTTP requests and routes them to the appropriate handlers based on the registered routes. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.7.1 + * @author CraftsBlock * @see WebServer * @since 3.0.1-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/WebServer.java b/src/main/java/de/craftsblock/craftsnet/api/http/WebServer.java index ecba6f04..88db5c1b 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/WebServer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/WebServer.java @@ -26,9 +26,8 @@ * The WebServer class represents a simple HTTP or HTTPS server that listens for incoming requests and handles * them based on registered API endpoints using the provided RouteRegistry. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.5.2 + * @author CraftsBlock * @see Exchange * @see RequestHandler * @see Route diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequestMethod.java b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequestMethod.java index 74c2852d..ad184f2a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequestMethod.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequestMethod.java @@ -11,9 +11,8 @@ * Specifies the HTTP request methods that are supported by the service method. * This annotation can be applied to methods or classes. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see Route * @see HttpMethod * @since 2.3.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireBody.java index 0cdf7bf7..4c30f243 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireBody.java @@ -11,9 +11,8 @@ * Annotation used to indicate that a request handler method requires specific types of request bodies. * This annotation can be applied to methods or classes to specify the required body types. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.4-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireContentType.java b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireContentType.java index 3da74475..6017102b 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireContentType.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireContentType.java @@ -10,9 +10,8 @@ * This annotation can be applied to methods or types to indicate that * certain content types are required for processing the request. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.4-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireCookie.java b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireCookie.java index fa91882b..bc4d9810 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireCookie.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireCookie.java @@ -11,9 +11,8 @@ * This annotation can be applied to methods or types to indicate that * certain cookies are required for processing the request. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.6-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireHeaders.java b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireHeaders.java index 53efb404..e19c2008 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireHeaders.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireHeaders.java @@ -11,9 +11,8 @@ * This annotation can be applied to methods or types to indicate that * certain HTTP headers are required for processing the request. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.2-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireParameter.java b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireParameter.java index c4071c55..e487687f 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireParameter.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/RequireParameter.java @@ -11,9 +11,8 @@ * This annotation can be applied to methods or types to indicate that * certain url parameter are required for processing the request. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.6-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/Route.java b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/Route.java index c8ed7761..0d03d868 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/annotations/Route.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/annotations/Route.java @@ -12,9 +12,8 @@ * Specifies the path associated with a service method or defines the parent path. * This annotation can be applied to methods or classes. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see WebServer * @see HttpMethod * @since 1.0.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/Body.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/Body.java index 100554a5..4aec7d0f 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/Body.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/Body.java @@ -21,9 +21,8 @@ * This abstract class serves to provide common properties and methods for different types of * request bodies. * - * @author CraftsBlock * @author Philipp Maywald - * @version 2.0.1 + * @author CraftsBlock * @see FormBody * @see JsonBody * @since 2.2.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/BodyRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/BodyRegistry.java index 0de159a0..98b5e936 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/BodyRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/BodyRegistry.java @@ -15,9 +15,8 @@ * It allows registering parsers for different types of request bodies, * and provides methods to retrieve and check the presence of a parser for a given body type. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.4 + * @author CraftsBlock * @see BodyParser * @since 3.0.4-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/ContentType.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/ContentType.java index 04ddb976..67e7fea0 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/ContentType.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/ContentType.java @@ -4,9 +4,8 @@ * This interface defines constants for commonly used Content-Type headers in HTTP requests and responses. * These constants can be used to specify the type of content being received in an HTTP request. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.4-SNAPSHOT */ public interface ContentType { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/FormBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/FormBody.java index 4108d656..13c6d28d 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/FormBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/FormBody.java @@ -13,9 +13,8 @@ * and field retrieval. * * @param The type of data that each field in the form body holds. - * @author CraftsBlock * @author Philipp Maywald - * @version 2.0.0 + * @author CraftsBlock * @see Body * @see MultipartFormBody * @see StandardFormBody diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/JsonBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/JsonBody.java index e579c7f0..a4bc3c82 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/JsonBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/JsonBody.java @@ -8,9 +8,8 @@ * The {@link JsonBody} class represents an http request body which * contains {@link Json} data. * - * @author CraftsBlock * @author Philipp Maywald - * @version 2.1.0 + * @author CraftsBlock * @see TypedBody * @since 2.2.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/MultipartFormBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/MultipartFormBody.java index 4b4b4986..35fa9774 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/MultipartFormBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/MultipartFormBody.java @@ -21,9 +21,8 @@ * multipart/form-data format. This format is often used to upload files and form fields in HTTP * requests. * - * @author CraftsBlock * @author Philipp Maywald - * @version 2.0.1 + * @author CraftsBlock * @see FormBody * @since 2.2.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/StandardFormBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/StandardFormBody.java index 7debd856..dccac626 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/StandardFormBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/StandardFormBody.java @@ -16,9 +16,8 @@ * This class extends the {@link FormBody} class and provides methods to deserialize the form data * from an input stream and access individual form fields. * - * @author CraftsBlock * @author Philipp Maywald - * @version 2.0.0 + * @author CraftsBlock * @see FormBody * @since 2.2.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/ByteArrayBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/ByteArrayBody.java index 495e7e02..6e5d8988 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/ByteArrayBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/ByteArrayBody.java @@ -7,9 +7,8 @@ * The {@link ByteArrayBody} class represents an http request body which * contains {@code byte[]} data. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see TypedBody * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/StringBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/StringBody.java index c5217520..bd8fbe00 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/StringBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/StringBody.java @@ -7,9 +7,8 @@ * The {@link StringBody} class represents an http request body which * contains {@link String} data. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see TypedBody * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/TypedBody.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/TypedBody.java index 5a8d73bc..37d34d68 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/TypedBody.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/bodies/typed/TypedBody.java @@ -10,7 +10,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Body * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/MultipartFormBodyParser.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/MultipartFormBodyParser.java index 7e14e6f9..5cf9a578 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/MultipartFormBodyParser.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/MultipartFormBodyParser.java @@ -13,9 +13,8 @@ * This class is a body parser specifically designed to parse multipart form data request bodies. * It extends the {@link BodyParser} class and provides an implementation to parse multipart form data from an input stream. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see BodyParser * @since 3.0.4-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/StandardFormBodyParser.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/StandardFormBodyParser.java index a7356c79..e59c67b2 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/StandardFormBodyParser.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/StandardFormBodyParser.java @@ -13,9 +13,8 @@ * This class is a body parser specifically designed to parse standard form request bodies. * It extends the {@link BodyParser} class and provides an implementation to parse standard form from an input stream. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see BodyParser * @since 3.0.4-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/ByteArrayBodyParser.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/ByteArrayBodyParser.java index 0f021447..8701a57a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/ByteArrayBodyParser.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/ByteArrayBodyParser.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see BodyParser * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/JsonBodyParser.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/JsonBodyParser.java index 28e1eef2..af4b360a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/JsonBodyParser.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/JsonBodyParser.java @@ -11,9 +11,8 @@ * This class is a body parser specifically designed to parse json request bodies. * It extends the {@link BodyParser} class and provides an implementation to parse json data from an input stream. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.0 + * @author CraftsBlock * @see BodyParser * @since 3.0.4-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/StringBodyParser.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/StringBodyParser.java index a9f4e5d6..3fe22dd7 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/StringBodyParser.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/StringBodyParser.java @@ -12,7 +12,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see BodyParser * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/TypedBodyParser.java b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/TypedBodyParser.java index 55c3df06..2c24f4bf 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/TypedBodyParser.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/body/parser/typed/TypedBodyParser.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see BodyParser * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/builtin/DefaultRoute.java b/src/main/java/de/craftsblock/craftsnet/api/http/builtin/DefaultRoute.java index 86439668..b9e6a717 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/builtin/DefaultRoute.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/builtin/DefaultRoute.java @@ -14,9 +14,8 @@ * Represents a default route handler implementation. * This class provides a default route for handling GET requests. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.3-SNAPSHOT */ public class DefaultRoute implements RequestHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/cookies/Cookie.java b/src/main/java/de/craftsblock/craftsnet/api/http/cookies/Cookie.java index fe6d3f13..4b482df0 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/cookies/Cookie.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/cookies/Cookie.java @@ -11,9 +11,8 @@ * Represents a http cookie with various attributes such as name, value, path, domain, expiry date, * same-site policy, security, and HttpOnly flag. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.0.6 */ public class Cookie { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/cookies/SameSite.java b/src/main/java/de/craftsblock/craftsnet/api/http/cookies/SameSite.java index be2c73d7..d48f70e7 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/cookies/SameSite.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/cookies/SameSite.java @@ -6,9 +6,8 @@ * The SameSite attribute allows you to declare if your cookie should be restricted to a first-party or same-site context. * This attribute helps to protect against Cross-Site Request Forgery (CSRF) attacks. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.6 */ public enum SameSite { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/cors/CorsPolicy.java b/src/main/java/de/craftsblock/craftsnet/api/http/cors/CorsPolicy.java index 691208ea..eddebe1a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/cors/CorsPolicy.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/cors/CorsPolicy.java @@ -26,7 +26,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.1.0 */ public class CorsPolicy { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/AcceptEncodingHelper.java b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/AcceptEncodingHelper.java index 6a0acbc9..419bbdaa 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/AcceptEncodingHelper.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/AcceptEncodingHelper.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.3-SNAPSHOT */ public final class AcceptEncodingHelper { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/StreamEncoderRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/StreamEncoderRegistry.java index 114f3aa8..3f8e5b08 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/StreamEncoderRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/StreamEncoderRegistry.java @@ -17,7 +17,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.3 * @since 3.3.3-SNAPSHOT */ public final class StreamEncoderRegistry { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/DeflateStreamEncoder.java b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/DeflateStreamEncoder.java index f50fae44..81cbeab1 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/DeflateStreamEncoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/DeflateStreamEncoder.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.3-SNAPSHOT */ public final class DeflateStreamEncoder extends StreamEncoder { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/GZIPStreamEncoder.java b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/GZIPStreamEncoder.java index e9c0cb6d..fb371e6b 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/GZIPStreamEncoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/GZIPStreamEncoder.java @@ -15,7 +15,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.3-SNAPSHOT */ public final class GZIPStreamEncoder extends StreamEncoder { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/IdentityStreamEncoder.java b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/IdentityStreamEncoder.java index e96e6739..f62a7fd5 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/IdentityStreamEncoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/encoding/builtin/IdentityStreamEncoder.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.3-SNAPSHOT */ public final class IdentityStreamEncoder extends StreamEncoder { diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatus.java b/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatus.java index b2ddcc03..6ed5ec1a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatus.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatus.java @@ -23,7 +23,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.7.0 */ public sealed interface HttpStatus diff --git a/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatusException.java b/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatusException.java index 77ef1410..5c97d086 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatusException.java +++ b/src/main/java/de/craftsblock/craftsnet/api/http/status/HttpStatusException.java @@ -16,7 +16,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see HttpStatus * @since 3.7.1 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/middlewares/HttpMiddleware.java b/src/main/java/de/craftsblock/craftsnet/api/middlewares/HttpMiddleware.java index 435e04f7..29a77f0c 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/middlewares/HttpMiddleware.java +++ b/src/main/java/de/craftsblock/craftsnet/api/middlewares/HttpMiddleware.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Middleware * @since 3.4.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/middlewares/Middleware.java b/src/main/java/de/craftsblock/craftsnet/api/middlewares/Middleware.java index 5f380156..3dfe5989 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/middlewares/Middleware.java +++ b/src/main/java/de/craftsblock/craftsnet/api/middlewares/Middleware.java @@ -10,7 +10,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see MiddlewareCallbackInfo * @since 3.4.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareCallbackInfo.java b/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareCallbackInfo.java index f5c2b93f..68580cf2 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareCallbackInfo.java +++ b/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareCallbackInfo.java @@ -7,7 +7,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.4.0-SNAPSHOT */ public class MiddlewareCallbackInfo { diff --git a/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareRegistry.java index 91831829..540d5679 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/middlewares/MiddlewareRegistry.java @@ -20,7 +20,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @see Middleware * @since 3.4.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/middlewares/WebsocketMiddleware.java b/src/main/java/de/craftsblock/craftsnet/api/middlewares/WebsocketMiddleware.java index 7b8ae837..13c58197 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/middlewares/WebsocketMiddleware.java +++ b/src/main/java/de/craftsblock/craftsnet/api/middlewares/WebsocketMiddleware.java @@ -16,7 +16,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Middleware * @since 3.4.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/middlewares/annotation/ApplyMiddleware.java b/src/main/java/de/craftsblock/craftsnet/api/middlewares/annotation/ApplyMiddleware.java index 0344f2fd..73d03c4a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/middlewares/annotation/ApplyMiddleware.java +++ b/src/main/java/de/craftsblock/craftsnet/api/middlewares/annotation/ApplyMiddleware.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.4.0-SNAPSHOT */ @Documented @@ -34,7 +33,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.4.0-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/RequireAble.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/RequireAble.java index 56552dd3..105a3646 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/RequireAble.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/RequireAble.java @@ -4,9 +4,8 @@ * Marker interface representing a class that contains information which can be used to * feed the requirement system. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.5-SNAPSHOT */ public interface RequireAble { diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/Requirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/Requirement.java index 51e8fe27..e1c5f096 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/Requirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/Requirement.java @@ -8,9 +8,8 @@ * Represents an abstract requirement that can be used in the requirement system. * * @param The type of the storage class that this requirement gets its data from. - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.5-SNAPSHOT */ public abstract class Requirement { diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/RequirementRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/RequirementRegistry.java index 56fc3dce..e93bab05 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/RequirementRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/RequirementRegistry.java @@ -28,7 +28,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.7 * @since 3.2.1-SNAPSHOT */ public class RequirementRegistry { diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementInfo.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementInfo.java index c922dd21..25e708b6 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementInfo.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementInfo.java @@ -21,7 +21,6 @@ * @param values A map of key-value pairs representing the annotation's values. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.2 * @see RequirementMeta * @see RequirementStore * @since 3.1.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMeta.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMeta.java index 1b7610e8..118f5fcb 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMeta.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMeta.java @@ -20,7 +20,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see RequirementType * @since 3.1.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMethodLink.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMethodLink.java index 71908b5c..647563d5 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMethodLink.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementMethodLink.java @@ -16,7 +16,6 @@ * @param The requirement type. * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.0 * @see Requirement * @since 3.5.3 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementStore.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementStore.java index a51c6cdc..e826a33c 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementStore.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementStore.java @@ -15,7 +15,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see RequirementMeta * @since 3.1.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementType.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementType.java index 46a96862..92bbafe7 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementType.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/meta/RequirementType.java @@ -16,7 +16,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.1.0-SNAPSHOT */ public enum RequirementType { diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/BodyRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/BodyRequirement.java index 316d2ec5..503ac86a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/BodyRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/BodyRequirement.java @@ -10,9 +10,8 @@ /** * A specific web requirement that checks if the body of an HTTP request matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see WebRequirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/ContentTypeRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/ContentTypeRequirement.java index cc368033..9cf90948 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/ContentTypeRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/ContentTypeRequirement.java @@ -11,9 +11,8 @@ /** * A specific web requirement that checks if the content-type of an HTTP request matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @see WebRequirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/CookieRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/CookieRequirement.java index 407a9148..08e9f470 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/CookieRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/CookieRequirement.java @@ -11,9 +11,8 @@ /** * A specific web requirement that checks if the cookie list of an HTTP request matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @see WebRequirement * @since 3.0.6-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HTTPDomainRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HTTPDomainRequirement.java index b8666ab3..6f14dffc 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HTTPDomainRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HTTPDomainRequirement.java @@ -9,9 +9,8 @@ /** * A specific web requirement that checks if the domain of an HTTP request matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see WebRequirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HeadersRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HeadersRequirement.java index 82938d8e..3f8c73e0 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HeadersRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/HeadersRequirement.java @@ -10,9 +10,8 @@ /** * A specific web requirement that checks if the headers of an HTTP request matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @see WebRequirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/MethodRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/MethodRequirement.java index 96b1512a..b0dfc381 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/MethodRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/MethodRequirement.java @@ -11,9 +11,8 @@ /** * A specific web requirement that checks if the request method of an HTTP request matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @see WebRequirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/QueryParameterRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/QueryParameterRequirement.java index 46d2cd65..59bc1303 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/QueryParameterRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/QueryParameterRequirement.java @@ -4,16 +4,14 @@ import de.craftsblock.craftsnet.api.http.Request; import de.craftsblock.craftsnet.api.http.annotations.RequireParameter; -import java.util.HashSet; import java.util.List; import java.util.Set; /** * A specific web requirement that checks if the url parameter list of an HTTP request matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @see WebRequirement * @since 3.0.6-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/WebRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/WebRequirement.java index 3b8f73a0..6ad8b1b3 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/web/WebRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/web/WebRequirement.java @@ -8,9 +8,8 @@ /** * Abstract class representing a web specific requirement. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see Requirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/MessageTypeRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/MessageTypeRequirement.java index 76c4c518..404fd089 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/MessageTypeRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/MessageTypeRequirement.java @@ -11,9 +11,8 @@ /** * A specific websocket requirement that checks if the domain of a websocket connection matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see WebRequirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WSDomainRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WSDomainRequirement.java index c76a794a..5d419bcf 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WSDomainRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WSDomainRequirement.java @@ -10,9 +10,8 @@ /** * A specific websocket requirement that checks if the domain of a websocket connection matches certain criteria. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see WebRequirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WebSocketRequirement.java b/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WebSocketRequirement.java index 967061a5..244d2d3e 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WebSocketRequirement.java +++ b/src/main/java/de/craftsblock/craftsnet/api/requirements/websocket/WebSocketRequirement.java @@ -8,9 +8,8 @@ /** * Abstract class representing a websocket specific requirement. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see Requirement * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/session/SessionCache.java b/src/main/java/de/craftsblock/craftsnet/api/session/SessionCache.java index 393bf60f..cf99043f 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/session/SessionCache.java +++ b/src/main/java/de/craftsblock/craftsnet/api/session/SessionCache.java @@ -1,6 +1,6 @@ package de.craftsblock.craftsnet.api.session; -import de.craftsblock.craftscore.cache.Cache; +import de.craftsblock.craftscore.cache.LruCache; /** * A specialized cache for managing {@link Session} objects, allowing efficient storage @@ -9,11 +9,10 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @see Session * @since 3.3.0-SNAPSHOT */ -public class SessionCache extends Cache { +public class SessionCache extends LruCache { /** * Constructs a new {@link SessionCache} with a specified maximum capacity. diff --git a/src/main/java/de/craftsblock/craftsnet/api/session/SessionInfo.java b/src/main/java/de/craftsblock/craftsnet/api/session/SessionInfo.java index c1e4ad91..2bd9c99d 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/session/SessionInfo.java +++ b/src/main/java/de/craftsblock/craftsnet/api/session/SessionInfo.java @@ -24,7 +24,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 3.1.7 * @see Session * @see BaseExchange * @since 3.0.6-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/session/SessionStorage.java b/src/main/java/de/craftsblock/craftsnet/api/session/SessionStorage.java index 6e3971f1..55b47db0 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/session/SessionStorage.java +++ b/src/main/java/de/craftsblock/craftsnet/api/session/SessionStorage.java @@ -21,7 +21,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 3.4.3 * @see Session * @since 3.3.0-SNAPSHOT */ @@ -233,7 +232,6 @@ public Session getSession() { * @param args Additional arguments. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.4.0-SNAPSHOT */ private record QueuedJob(JobType type, Object... args) { @@ -245,7 +243,6 @@ private record QueuedJob(JobType type, Object... args) { * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @since 3.3.5-SNAPSHOT */ public enum JobType { diff --git a/src/main/java/de/craftsblock/craftsnet/api/session/drivers/SessionDriver.java b/src/main/java/de/craftsblock/craftsnet/api/session/drivers/SessionDriver.java index a1c57aee..af5b2184 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/session/drivers/SessionDriver.java +++ b/src/main/java/de/craftsblock/craftsnet/api/session/drivers/SessionDriver.java @@ -9,7 +9,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.2.0 * @see Session * @since 3.3.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/session/drivers/builtin/FileSessionDriver.java b/src/main/java/de/craftsblock/craftsnet/api/session/drivers/builtin/FileSessionDriver.java index 8f9d7472..5810c401 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/session/drivers/builtin/FileSessionDriver.java +++ b/src/main/java/de/craftsblock/craftsnet/api/session/drivers/builtin/FileSessionDriver.java @@ -28,7 +28,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.2.2 * @see Session * @see SessionDriver * @since 3.3.5-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/ssl/SSL.java b/src/main/java/de/craftsblock/craftsnet/api/ssl/SSL.java index be50c088..701d5e16 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/ssl/SSL.java +++ b/src/main/java/de/craftsblock/craftsnet/api/ssl/SSL.java @@ -27,9 +27,8 @@ * SSL-related operations, including the loading of SSL contexts using either default or custom * certificate chain and private key files. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.6 + * @author CraftsBlock * @since 2.1.1-SNAPSHOT */ public class SSL { diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/Transformable.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/Transformable.java index d004daa6..b9260d10 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/Transformable.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/Transformable.java @@ -9,9 +9,8 @@ * * @param The type to which the parameter is transformed. * @param The type from which the transformer transforms the param. - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.2-SNAPSHOT */ public interface Transformable { diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerErrorCallback.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerErrorCallback.java index dc77d534..09e8c61b 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerErrorCallback.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerErrorCallback.java @@ -13,9 +13,8 @@ * which receives a TransformerException object representing the error that occurred during transformation. * Within this method, developers can implement custom error-handling logic, such as logging, error reporting, or recovery actions.

* - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see TransformerException * @since 3.0.3-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerPerformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerPerformer.java index 62fc4320..f5a23638 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerPerformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/TransformerPerformer.java @@ -1,6 +1,7 @@ package de.craftsblock.craftsnet.api.transformers; import de.craftsblock.craftscore.cache.DoubleKeyedCache; +import de.craftsblock.craftscore.cache.DoubleKeyedLruCache; import de.craftsblock.craftsnet.CraftsNet; import de.craftsblock.craftsnet.api.Handler; import de.craftsblock.craftsnet.api.transformers.annotations.Transformer; @@ -30,7 +31,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 1.4.0 * @see Transformer * @see TransformerCollection * @see Transformable @@ -40,7 +40,7 @@ public class TransformerPerformer { private final Logger logger; - private final DoubleKeyedCache>, Object, Object> transformerCache = new DoubleKeyedCache<>(10); + private final DoubleKeyedLruCache>, Object, Object> transformerCache = new DoubleKeyedLruCache<>(10); private final List groupNames = new ArrayList<>(); private final int argsOffset; diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/Transformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/Transformer.java index ebca7a0b..360e461e 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/Transformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/Transformer.java @@ -13,9 +13,8 @@ * of input parameters into desired output types. This can be particularly useful in scenarios where * data needs to be converted between different formats or representations.

* - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Transformable * @see TransformerCollection * @since 3.0.2-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/TransformerCollection.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/TransformerCollection.java index c6994dab..755cbf44 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/TransformerCollection.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/annotations/TransformerCollection.java @@ -17,9 +17,8 @@ *

This annotation is marked with {@link ApiStatus.Internal}, indicating that it is for internal use only * and should not be relied upon by external code.

* - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see Transformer * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/BooleanTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/BooleanTransformer.java index 8d98bc28..b90fd2af 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/BooleanTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/BooleanTransformer.java @@ -2,7 +2,6 @@ import de.craftsblock.craftsnet.api.transformers.Transformable; import de.craftsblock.craftsnet.api.transformers.exceptions.NotTransformableException; -import org.jetbrains.annotations.Nullable; /** * A transformer class for converting a string representation of a boolean value to a Boolean object. @@ -10,7 +9,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 * @see Transformable * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ByteTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ByteTransformer.java index 837c106f..132b7912 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ByteTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ByteTransformer.java @@ -7,9 +7,8 @@ * A transformer class for converting a string representation of a byte value to a Byte object. * Implements the {@link Transformable} interface. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Transformable * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/DoubleTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/DoubleTransformer.java index e26b02fe..b4fab266 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/DoubleTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/DoubleTransformer.java @@ -7,9 +7,8 @@ * A transformer class for converting a string representation of a double value to a Double object. * Implements the {@link Transformable} interface. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Transformable * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/FloatTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/FloatTransformer.java index f142eaa5..bbac8195 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/FloatTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/FloatTransformer.java @@ -7,9 +7,8 @@ * A transformer class for converting a string representation of a float value to a Float object. * Implements the {@link Transformable} interface. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Transformable * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/IntTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/IntTransformer.java index de450895..cc4425ea 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/IntTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/IntTransformer.java @@ -7,9 +7,8 @@ * A transformer class for converting a string representation of an integer value to an Integer object. * Implements the {@link Transformable} interface. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Transformable * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/LongTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/LongTransformer.java index 6188b5f5..c670d438 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/LongTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/LongTransformer.java @@ -7,9 +7,8 @@ * A transformer class for converting a string representation of a long value to a Long object. * Implements the {@link Transformable} interface. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Transformable * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ShortTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ShortTransformer.java index 97019ab5..cdc9e06c 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ShortTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/ShortTransformer.java @@ -7,9 +7,8 @@ * A transformer class for converting a string representation of a short value to a Short object. * Implements the {@link Transformable} interface. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @see Transformable * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/UUIDTransformer.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/UUIDTransformer.java index 389666fc..5c6a0cc2 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/UUIDTransformer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/builtin/UUIDTransformer.java @@ -9,9 +9,8 @@ * A transformer class for converting a string representation of an uuid value to an {@link UUID} object. * Implements the {@link Transformable} interface. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see Transformable * @since 3.5.5 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/NotTransformableException.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/NotTransformableException.java index 347231ce..72b58cff 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/NotTransformableException.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/NotTransformableException.java @@ -4,9 +4,8 @@ * This exception is thrown when a parameter cannot be transformed to a specified target type. * It extends the TransformerException class, indicating a specific type of transformation failure. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see TransformerException * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/TransformerException.java b/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/TransformerException.java index 18a16266..c4362ed4 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/TransformerException.java +++ b/src/main/java/de/craftsblock/craftsnet/api/transformers/exceptions/TransformerException.java @@ -4,9 +4,8 @@ * This class represents an exception that occurs during data transformation operations. * It extends the RuntimeException class, making it an unchecked exception. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.2-SNAPSHOT */ public class TransformerException extends RuntimeException { diff --git a/src/main/java/de/craftsblock/craftsnet/api/utils/Context.java b/src/main/java/de/craftsblock/craftsnet/api/utils/Context.java index 8e1392f1..a70774e3 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/utils/Context.java +++ b/src/main/java/de/craftsblock/craftsnet/api/utils/Context.java @@ -12,9 +12,8 @@ * A specialized {@link ConcurrentHashMap} implementation that serves as a type-safe context * for storing and retrieving objects associated with their respective {@link Class} types. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.6.0 */ public class Context extends ConcurrentHashMap, Object> { diff --git a/src/main/java/de/craftsblock/craftsnet/api/utils/ProtocolVersion.java b/src/main/java/de/craftsblock/craftsnet/api/utils/ProtocolVersion.java index b911f112..08fb00f3 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/utils/ProtocolVersion.java +++ b/src/main/java/de/craftsblock/craftsnet/api/utils/ProtocolVersion.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.2-SNAPSHOT */ public record ProtocolVersion(@NotNull Scheme scheme, @Range(from = 0, to = Integer.MAX_VALUE) int major, diff --git a/src/main/java/de/craftsblock/craftsnet/api/utils/Scheme.java b/src/main/java/de/craftsblock/craftsnet/api/utils/Scheme.java index 8fbfb3d6..dc049d82 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/utils/Scheme.java +++ b/src/main/java/de/craftsblock/craftsnet/api/utils/Scheme.java @@ -17,7 +17,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @since 3.3.2-SNAPSHOT */ public enum Scheme { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/ClosureCode.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/ClosureCode.java index f3bb1f55..120ad63c 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/ClosureCode.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/ClosureCode.java @@ -7,9 +7,8 @@ * Enumeration representing WebSocket closure codes along with their integer values and internal status. * These codes are defined in RFC 6455 (https://datatracker.ietf.org/doc/html/rfc6455#section-7.4.1). * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.0 + * @author CraftsBlock * @since 3.0.5-SNAPSHOT */ public enum ClosureCode { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/DefaultPingResponder.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/DefaultPingResponder.java index d03c4fc6..3d322b87 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/DefaultPingResponder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/DefaultPingResponder.java @@ -9,9 +9,8 @@ * A default implementation of a ping responder for handling incoming ping messages. * This responder sends a pong message back to the client when a ping message is received. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.2 + * @author CraftsBlock * @see ReceivedPingMessageEvent * @see WebSocketClient * @since 3.0.5-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/Frame.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/Frame.java index 334d737a..c3dc0546 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/Frame.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/Frame.java @@ -37,9 +37,8 @@ * and decoding the payload data. It also provides methods to access frame attributes * and manipulate the payload data. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.6-SNAPSHOT */ public class Frame implements RequireAble { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/Opcode.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/Opcode.java index 40dc8854..d00cfe26 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/Opcode.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/Opcode.java @@ -8,9 +8,8 @@ * Enumeration representing WebSocket opcodes along with their integer values. * These opcodes are defined in the WebSocket protocol. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.5-SNAPSHOT */ public enum Opcode { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketExchange.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketExchange.java index fc9bc924..e5eb9c0a 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketExchange.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketExchange.java @@ -12,9 +12,8 @@ * with the WebSocket server and client within the context of a WebSocket connection. * It allows sending broadcast messages to all clients connected to the same WebSocket path. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.3.1 + * @author CraftsBlock * @see BaseExchange * @see Socket * @see SocketHandler diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketHandler.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketHandler.java index deea84c6..9201319f 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/SocketHandler.java @@ -7,9 +7,8 @@ * Represents a contract for classes that handle WebSocket connections in a server application. * WebSocket server handlers must implement this interface to define their behavior. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0 + * @author CraftsBlock * @see Socket * @since 2.1.1-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketClient.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketClient.java index 9bfc2a2a..22704340 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketClient.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketClient.java @@ -61,9 +61,8 @@ *

* The class also handles the disconnection of the client, sending messages, and reading headers and messages from the socket. * - * @author CraftsBlock * @author Philipp Maywald - * @version 3.8.1 + * @author CraftsBlock * @see WebSocketServer * @since 2.1.1-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketServer.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketServer.java index c9afd280..9c20f51f 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketServer.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/WebSocketServer.java @@ -31,9 +31,8 @@ * The server can be configured to use SSL encryption by providing the necessary SSL key file. * It uses a ServerSocket to listen for incoming connections on the specified port. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.5 + * @author CraftsBlock * @see WebSocketClient * @since 2.1.1-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/ApplyDecoder.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/ApplyDecoder.java index 70c421b5..3edaea51 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/ApplyDecoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/ApplyDecoder.java @@ -17,7 +17,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see WebSocketSafeTypeDecoder * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/RequireMessageType.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/RequireMessageType.java index 46e26991..4edb8420 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/RequireMessageType.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/RequireMessageType.java @@ -12,9 +12,8 @@ * Specifies the message type that should be received. * This annotation can be applied to methods or classes. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see WebServer * @since 3.0.5-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/Socket.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/Socket.java index ef1324c2..ba851608 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/Socket.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/annotations/Socket.java @@ -10,9 +10,8 @@ /** * Custom annotation used to mark classes as WebSocket handlers. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see SocketHandler * @since 2.1.1-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeDecoder.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeDecoder.java index 55f60adc..53892723 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeDecoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeDecoder.java @@ -12,7 +12,6 @@ * @param The result type produced after decoding the WebSocket {@link Frame}. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 */ public interface WebSocketSafeTypeDecoder extends Decoder { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeEncoder.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeEncoder.java index eb2b09ff..67d9e3d0 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeEncoder.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/codec/WebSocketSafeTypeEncoder.java @@ -20,7 +20,6 @@ * @param The input type to be encoded. * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.0 * @see TypeToBufferUtilEncoder * @see TypeToByteArrayEncoder * @see TypeToByteBufferEncoder @@ -41,7 +40,6 @@ public sealed interface WebSocketSafeTypeEncoder extends Encoder * @param The type of the object to encode. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 */ non-sealed interface TypeToByteArrayEncoder extends WebSocketSafeTypeEncoder { @@ -53,7 +51,6 @@ non-sealed interface TypeToByteArrayEncoder extends WebSocketSafeTypeEncoder< * @param The type of the object to encode. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.7.0 */ non-sealed interface TypeToBufferUtilEncoder extends WebSocketSafeTypeEncoder { @@ -65,7 +62,6 @@ non-sealed interface TypeToBufferUtilEncoder extends WebSocketSafeTypeEncoder * @param The type of the object to encode. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.7.0 */ non-sealed interface TypeToByteBufferEncoder extends WebSocketSafeTypeEncoder { @@ -77,7 +73,6 @@ non-sealed interface TypeToByteBufferEncoder extends WebSocketSafeTypeEncoder * @param The type of the object to encode. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 * @deprecated in favor of {@link TypeToBufferUtilEncoder} */ @@ -94,7 +89,6 @@ non-sealed interface TypeToCraftsByteBufferEncoder extends WebSocketSafeTypeE * @param The type of the object to encode. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 */ non-sealed interface TypeToJsonEncoder extends WebSocketSafeTypeEncoder { @@ -107,7 +101,6 @@ non-sealed interface TypeToJsonEncoder extends WebSocketSafeTypeEncoder The type of the object to encode. * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 */ non-sealed interface TypeToStringEncoder extends WebSocketSafeTypeEncoder { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtension.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtension.java index 8aa263eb..8aab0624 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtension.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtension.java @@ -12,9 +12,8 @@ * the {@link #encode(Frame)} and {@link #decode(Frame)} methods to define how frames * are transformed by the extension. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.6-SNAPSHOT */ public abstract class WebSocketExtension { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtensionRegistry.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtensionRegistry.java index 129945dd..fab0a624 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtensionRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/WebSocketExtensionRegistry.java @@ -8,9 +8,8 @@ * unregistration, and lookup of WebSocket extensions by their protocol names. It is designed * to be thread-safe, using a concurrent hash map to store the extensions. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.0.6-SNAPSHOT */ public class WebSocketExtensionRegistry { diff --git a/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/builtin/PerMessageDeflateExtension.java b/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/builtin/PerMessageDeflateExtension.java index 67f0ab63..914943e0 100644 --- a/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/builtin/PerMessageDeflateExtension.java +++ b/src/main/java/de/craftsblock/craftsnet/api/websocket/extensions/builtin/PerMessageDeflateExtension.java @@ -16,9 +16,8 @@ * RFC 7692. This extension allows for * compressing and decompressing WebSocket frames. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.6-SNAPSHOT */ public class PerMessageDeflateExtension extends WebSocketExtension { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterHandler.java index f22d0833..a974467d 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterHandler.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.0 * @since 3.2.0-SNAPSHOT */ public abstract class AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterRegistry.java b/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterRegistry.java index d2687e50..5740cfb3 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterRegistry.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/AutoRegisterRegistry.java @@ -36,7 +36,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.2.5 * @see AutoRegisterInfo * @see AutoRegisterHandler * @since 3.2.0-SNAPSHOT diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/MiddlewareAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/MiddlewareAutoRegisterHandler.java index 847442d5..bed49d29 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/MiddlewareAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/MiddlewareAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @since 3.4.0-SNAPSHOT */ public class MiddlewareAutoRegisterHandler extends AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/addons/ServiceLoaderAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/addons/ServiceLoaderAutoRegisterHandler.java index b17f87a7..702bce5f 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/addons/ServiceLoaderAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/addons/ServiceLoaderAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.2.0-SNAPSHOT */ public class ServiceLoaderAutoRegisterHandler extends AutoRegisterHandler> { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/cli/LogStreamMutatorAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/cli/LogStreamMutatorAutoRegisterHandler.java index 13f069e5..8a2deec9 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/cli/LogStreamMutatorAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/cli/LogStreamMutatorAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.2 */ public class LogStreamMutatorAutoRegisterHandler extends AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/events/ListenerAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/events/ListenerAutoRegisterHandler.java index 2eec2e49..3caa1bbf 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/events/ListenerAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/events/ListenerAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.2.0-SNAPSHOT */ public class ListenerAutoRegisterHandler extends AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/BodyAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/BodyAutoRegisterHandler.java index 827eb094..46fe3f0a 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/BodyAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/BodyAutoRegisterHandler.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.2.0-SNAPSHOT */ public class BodyAutoRegisterHandler extends AutoRegisterHandler> { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/HandlerAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/HandlerAutoRegisterHandler.java index 50351a17..15cecf38 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/HandlerAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/HandlerAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.2.0-SNAPSHOT */ public class HandlerAutoRegisterHandler extends AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/StreamEncoderAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/StreamEncoderAutoRegisterHandler.java index f1e6b38f..224d45ee 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/StreamEncoderAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/StreamEncoderAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.3.3-SNAPSHOT */ public class StreamEncoderAutoRegisterHandler extends AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/WebRequirementAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/WebRequirementAutoRegisterHandler.java index 58d438b6..fec229f0 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/WebRequirementAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/http/WebRequirementAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.2.0-SNAPSHOT */ public class WebRequirementAutoRegisterHandler extends AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketExtensionAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketExtensionAutoRegisterHandler.java index f1501dbc..e6c03b3f 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketExtensionAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketExtensionAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.2.0-SNAPSHOT */ public class WebSocketExtensionAutoRegisterHandler extends AutoRegisterHandler { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketRequirementAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketRequirementAutoRegisterHandler.java index 77684a2a..d86bc3b7 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketRequirementAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/WebSocketRequirementAutoRegisterHandler.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.4 * @since 3.2.0-SNAPSHOT */ public class WebSocketRequirementAutoRegisterHandler extends AutoRegisterHandler> { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeDecoderAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeDecoderAutoRegisterHandler.java index f928a855..03bb4a9b 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeDecoderAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeDecoderAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @since 3.5.0 */ public class WebSocketTypeDecoderAutoRegisterHandler extends AutoRegisterHandler> { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeEncoderAutoRegisterHandler.java b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeEncoderAutoRegisterHandler.java index 0b2a4f83..f8c430d1 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeEncoderAutoRegisterHandler.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/builtin/sockets/codec/WebSocketTypeEncoderAutoRegisterHandler.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.0 */ public class WebSocketTypeEncoderAutoRegisterHandler extends AutoRegisterHandler> { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/loaders/AutoRegisterLoader.java b/src/main/java/de/craftsblock/craftsnet/autoregister/loaders/AutoRegisterLoader.java index 89f7a741..df2ec154 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/loaders/AutoRegisterLoader.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/loaders/AutoRegisterLoader.java @@ -25,7 +25,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.2.2 * @see AutoRegisterInfo * @since 3.2.0-SNAPSHOT */ @@ -84,22 +83,21 @@ protected List loadFrom(@Nullable ClassLoader loader, @Nullabl Set infos = Collections.newSetFromMap(new ConcurrentHashMap<>()); ClassLoader classLoader = (loader != null ? loader : ClassLoader.getSystemClassLoader()); - ConcurrentLinkedQueue> futures = new ConcurrentLinkedQueue<>(); - - // Process each entry in the JAR file + Collection> futures = new ArrayList<>(); StreamSupport.stream(file.stream().spliterator(), true) .filter(this::isValidClassEntry) .map(JarEntry::getName) .map(this::convertToJvmName) - .map(jvmName -> executor.submit(() -> processEntry(jvmName, bounding, classLoader, type, infos))) - .forEach(futures::add); - - // Wait for all futures to complete - for (Future future : futures) - try { - future.get(); - } catch (InterruptedException | ExecutionException ignored) { - } + .map(jvmName -> CompletableFuture.runAsync( + () -> processEntry(jvmName, bounding, classLoader, type, infos), + executor + )).forEach(futures::add); + + try { + CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException("Failed to await auto registration", e); + } futures.clear(); return infos.stream().distinct().collect(Collectors.toCollection(ArrayList::new)); @@ -112,14 +110,17 @@ protected List loadFrom(@Nullable ClassLoader loader, @Nullabl * @return True if the entry is a valid class file, false otherwise. */ private boolean isValidClassEntry(JarEntry entry) { - if (entry.isDirectory()) return false; + if (entry.isDirectory()) { + return false; + } String name = entry.getName(); - // Skip classes that belong to certain packages - for (String skip : SKIP_PACKAGES) - if (name.startsWith(skip)) return false; + for (String skip : SKIP_PACKAGES) { + if (name.startsWith(skip)) { + return false; + } + } - // Only process .class files and exclude module-info.class return name.endsWith(".class") && !entry.getName().endsWith("module-info.class"); } @@ -146,8 +147,11 @@ private void processEntry(@NotNull String jvmName, @Nullable Collection b @NotNull Class type, @NotNull Set infos) { try { Class clazz = Class.forName(jvmName, false, classLoader); - if (clazz.isInterface() || clazz.isEnum() || Modifier.isAbstract(clazz.getModifiers())) return; - if (!clazz.isAnnotationPresent(type)) return; + if (clazz.isInterface() || clazz.isEnum() + || Modifier.isAbstract(clazz.getModifiers()) + || !clazz.isAnnotationPresent(type)) { + return; + } Annotation annotation = clazz.getDeclaredAnnotation(type); List parentTypes = new ArrayList<>(); @@ -170,8 +174,9 @@ private List loadSuperclasses(Class clazz) { while (clazz != null && !clazz.equals(Object.class)) { clazz = clazz.getSuperclass(); - if (clazz != null) + if (clazz != null) { superclasses.add(clazz.getName()); + } } return superclasses; @@ -196,7 +201,9 @@ private List loadInterfaces(Class clazz) { * @param interfaces A set to collect interface names. */ private void collectInterfaces(Class clazz, Set interfaces) { - if (clazz == null || clazz.equals(Object.class)) return; + if (clazz == null || clazz.equals(Object.class)) { + return; + } for (Class iface : clazz.getInterfaces()) { if (interfaces.add(iface.getName())) { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/AutoRegister.java b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/AutoRegister.java index 4cf530ea..0e54ab4c 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/AutoRegister.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/AutoRegister.java @@ -12,9 +12,8 @@ *

The default value of the annotation is {@link Startup#ENABLE}, meaning auto registration * is performed after the addon has been enabled.

* - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.2 + * @author CraftsBlock * @since 3.2.0-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/Instantiate.java b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/Instantiate.java index 5f612d28..caa42a3c 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/Instantiate.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/Instantiate.java @@ -10,7 +10,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.2 * @since 3.3.2-SNAPSHOT */ public enum Instantiate { diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/ConstructorType.java b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/ConstructorType.java index 07108163..e255b6b5 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/ConstructorType.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/ConstructorType.java @@ -13,7 +13,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see FallbackConstructor * @see IgnoreConstructor * @see PreferConstructor diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/FallbackConstructor.java b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/FallbackConstructor.java index ff7a3f99..6eb0e601 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/FallbackConstructor.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/FallbackConstructor.java @@ -8,7 +8,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.5-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/IgnoreConstructor.java b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/IgnoreConstructor.java index 83b67c21..6e7cb27c 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/IgnoreConstructor.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/IgnoreConstructor.java @@ -9,7 +9,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.5-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/PreferConstructor.java b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/PreferConstructor.java index 6d55c91b..9e040893 100644 --- a/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/PreferConstructor.java +++ b/src/main/java/de/craftsblock/craftsnet/autoregister/meta/constructors/PreferConstructor.java @@ -10,7 +10,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.3.5-SNAPSHOT */ @Documented diff --git a/src/main/java/de/craftsblock/craftsnet/builder/ActivateType.java b/src/main/java/de/craftsblock/craftsnet/builder/ActivateType.java index f85f3726..4366b0a9 100644 --- a/src/main/java/de/craftsblock/craftsnet/builder/ActivateType.java +++ b/src/main/java/de/craftsblock/craftsnet/builder/ActivateType.java @@ -3,9 +3,8 @@ /** * Enum representing activation types for various components in the CraftsNet framework. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.3 */ public enum ActivateType { diff --git a/src/main/java/de/craftsblock/craftsnet/builder/AddonContainingBuilder.java b/src/main/java/de/craftsblock/craftsnet/builder/AddonContainingBuilder.java index 389ef434..b50dfd8a 100644 --- a/src/main/java/de/craftsblock/craftsnet/builder/AddonContainingBuilder.java +++ b/src/main/java/de/craftsblock/craftsnet/builder/AddonContainingBuilder.java @@ -19,9 +19,8 @@ /** * Builder class for configuring the CraftsNet with a set of addons. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.3.2 + * @author CraftsBlock * @see CraftsNetBuilder * @since 3.1.0-SNAPSHOT */ @@ -45,7 +44,13 @@ public AddonContainingBuilder(Collection> addons) { * @param type The addon class. * @param name The name to associate with the addon class. * @return The {@link AddonContainingBuilder} instance. + * @deprecated Addon classes will use the class name as it's mapped name + * if no {@link de.craftsblock.craftsnet.addon.meta.annotations.Meta} annotation is present. + * There will be no replacement as custom mapped names are no longer supported. */ + @SuppressWarnings("removal") + @Deprecated(since = "3.7.2", forRemoval = true) + @ApiStatus.ScheduledForRemoval(inVersion = "3.8.0") public AddonContainingBuilder map(Class type, String name) { AddonConfiguration.map(type, name); return this; diff --git a/src/main/java/de/craftsblock/craftsnet/builder/CraftsNetBuilder.java b/src/main/java/de/craftsblock/craftsnet/builder/CraftsNetBuilder.java index 88c097c0..04f901b5 100644 --- a/src/main/java/de/craftsblock/craftsnet/builder/CraftsNetBuilder.java +++ b/src/main/java/de/craftsblock/craftsnet/builder/CraftsNetBuilder.java @@ -16,9 +16,8 @@ /** * Builder class for configuring the CraftsNet. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.3 + * @author CraftsBlock * @see ActivateType * @since 3.0.3-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/events/EventWithCancelReason.java b/src/main/java/de/craftsblock/craftsnet/events/EventWithCancelReason.java index f0b55cf9..d167047a 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/EventWithCancelReason.java +++ b/src/main/java/de/craftsblock/craftsnet/events/EventWithCancelReason.java @@ -6,9 +6,8 @@ * An abstract class extending {@link CancellableEvent}, providing the ability to set and retrieve * a custom cancellation reason. It can be used by listeners to communicate why an event was canceled. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @see CancellableEvent * @since 3.1.0-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsDisabledEvent.java b/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsDisabledEvent.java index c3c45c41..957dd8a8 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsDisabledEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsDisabledEvent.java @@ -6,10 +6,20 @@ *

The {@link AllAddonsDisabledEvent} class represents an event triggered when all addons are disabled within CraftsNet. * This event serves as a notification mechanism to inform listeners that all addons have been successfully disabled.

* - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.4.2-SNAPSHOT */ public class AllAddonsDisabledEvent extends Event { + + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + } diff --git a/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsLoadedEvent.java b/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsLoadedEvent.java index 1a98060b..5e1bde17 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsLoadedEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/addons/AllAddonsLoadedEvent.java @@ -9,11 +9,20 @@ *

By listening for this event, developers can perform additional actions or initialization steps * that depend on the availability of addons within the application environment.

* - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.0 + * @author CraftsBlock * @since 3.0.3-SNAPSHOT */ public class AllAddonsLoadedEvent extends Event { + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + } diff --git a/src/main/java/de/craftsblock/craftsnet/events/requests/GenericRequestEventBase.java b/src/main/java/de/craftsblock/craftsnet/events/requests/GenericRequestEventBase.java index 791cdcaf..32937d12 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/requests/GenericRequestEventBase.java +++ b/src/main/java/de/craftsblock/craftsnet/events/requests/GenericRequestEventBase.java @@ -10,7 +10,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @see Exchange * @see Request * @see Response diff --git a/src/main/java/de/craftsblock/craftsnet/events/requests/PostRequestEvent.java b/src/main/java/de/craftsblock/craftsnet/events/requests/PostRequestEvent.java index 02932ca1..7adc28a8 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/requests/PostRequestEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/requests/PostRequestEvent.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.1 * @see GenericRequestEventBase * @since 3.1.0-SNAPSHOT */ @@ -33,6 +32,16 @@ public PostRequestEvent(Exchange exchange, boolean found, boolean shared) { this.shared = shared; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/requests/PreRequestEvent.java b/src/main/java/de/craftsblock/craftsnet/events/requests/PreRequestEvent.java index 17db2112..537f5e3d 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/requests/PreRequestEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/requests/PreRequestEvent.java @@ -12,7 +12,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.1 * @see GenericRequestEventBase * @since 3.1.0-SNAPSHOT */ @@ -29,6 +28,16 @@ public PreRequestEvent(Exchange exchange) { this.exchange = exchange; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/requests/routes/RouteRequestEvent.java b/src/main/java/de/craftsblock/craftsnet/events/requests/routes/RouteRequestEvent.java index 43b16c47..1474de1a 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/requests/routes/RouteRequestEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/requests/routes/RouteRequestEvent.java @@ -13,9 +13,8 @@ * This class provides information about the {@link Exchange} and the {@link RouteRegistry.EndpointMapping} * involved in the request event. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.1 + * @author CraftsBlock * @see EventWithCancelReason * @see GenericRequestEventBase * @since 1.0.0-SNAPSHOT @@ -33,6 +32,16 @@ public RouteRequestEvent(Exchange exchange) { this.exchange = exchange; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareFileLoadedEvent.java b/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareFileLoadedEvent.java index 457c8349..10af2e5d 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareFileLoadedEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareFileLoadedEvent.java @@ -16,9 +16,8 @@ * Represents an event that is triggered when a share file has been loaded. * This event provides information about the loaded file. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.1 + * @author CraftsBlock * @see CancellableEvent * @see GenericRequestEventBase * @since 2.3.2-SNAPSHOT @@ -42,6 +41,16 @@ public ShareFileLoadedEvent(@NotNull Exchange exchange, @NotNull Path path) { this.path = path; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareRequestEvent.java b/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareRequestEvent.java index 88b16ae7..42603f59 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareRequestEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/requests/shares/ShareRequestEvent.java @@ -15,9 +15,8 @@ * Represents an event that is triggered when a share request is made. * This event can be canceled to prevent the share request from being processed. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @see EventWithCancelReason * @see GenericRequestEventBase * @since 2.3.2-SNAPSHOT @@ -45,6 +44,16 @@ public ShareRequestEvent(@NotNull String httpPath, @NotNull String filePath, @No this.mapping = mapping; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientConnectEvent.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientConnectEvent.java index c1dd49f4..e3b2f894 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientConnectEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientConnectEvent.java @@ -13,9 +13,8 @@ * The ClientConnectEvent class represents an event related to a client connection to a socket. * It extends the base {@link EventWithCancelReason} to support event cancellation. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.0 + * @author CraftsBlock * @see EventWithCancelReason * @see GenericSocketEventBase * @since 2.1.1-SNAPSHOT @@ -37,6 +36,16 @@ public ClientConnectEvent(SocketExchange exchange) { this.mappings = exchange.client().getEndpoint(); } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientDisconnectEvent.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientDisconnectEvent.java index 4cbca245..06e4744e 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientDisconnectEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/ClientDisconnectEvent.java @@ -14,9 +14,8 @@ * The ClientDisconnectEvent class represents an event related to a client disconnection from a websocket connection. * It extends the base Event class and provides information about the SocketExchange and the SocketMapping associated with the disconnection event. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see GenericSocketEventBase * @since 2.1.1-SNAPSHOT */ @@ -48,6 +47,16 @@ public ClientDisconnectEvent(SocketExchange exchange, int closeCode, String clos this.closeByServer = closeByServer; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/GenericSocketEventBase.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/GenericSocketEventBase.java index 43269de9..d942ae6c 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/GenericSocketEventBase.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/GenericSocketEventBase.java @@ -10,7 +10,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see SocketExchange * @see WebSocketClient * @see WebSocketServer diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/GenericSocketMessageEventBase.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/GenericSocketMessageEventBase.java index 49866f5d..0d116a84 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/GenericSocketMessageEventBase.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/GenericSocketMessageEventBase.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.0 * @see Frame * @see ByteBuffer * @see Opcode diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/IncomingSocketMessageEvent.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/IncomingSocketMessageEvent.java index 08cf09f4..035352d1 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/IncomingSocketMessageEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/IncomingSocketMessageEvent.java @@ -9,9 +9,8 @@ * The IncomingSocketMessageEvent class represents an event related to an incoming message on a websocket connection. * It extends the base {@link CancellableEvent} to support event cancellation. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.0 + * @author CraftsBlock * @see GenericSocketMessageEventBase * @since 2.1.1-SNAPSHOT */ @@ -31,6 +30,16 @@ public IncomingSocketMessageEvent(SocketExchange exchange, @NotNull Frame frame) this.frame = frame; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/OutgoingSocketMessageEvent.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/OutgoingSocketMessageEvent.java index 3c145c14..7dc119e9 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/OutgoingSocketMessageEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/OutgoingSocketMessageEvent.java @@ -10,9 +10,8 @@ * The OutgoingSocketMessageEvent class represents an event related to an outgoing message on a websocket connection. * It extends the base {@link CancellableEvent} to support event cancellation. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see GenericSocketMessageEventBase * @since 2.1.1-SNAPSHOT */ @@ -32,6 +31,16 @@ public OutgoingSocketMessageEvent(@NotNull SocketExchange exchange, @NotNull Fra this.frame = frame; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPingMessageEvent.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPingMessageEvent.java index e9e08004..95dd86fb 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPingMessageEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPingMessageEvent.java @@ -11,9 +11,8 @@ /** * An event indicating that a Ping message has been received. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see GenericSocketMessageEventBase * @since 3.0.5-SNAPSHOT */ @@ -33,6 +32,16 @@ public ReceivedPingMessageEvent(SocketExchange exchange, @NotNull Frame frame) { this.frame = frame; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPongMessageEvent.java b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPongMessageEvent.java index fe79c90e..c9afb1bc 100644 --- a/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPongMessageEvent.java +++ b/src/main/java/de/craftsblock/craftsnet/events/sockets/message/ReceivedPongMessageEvent.java @@ -11,9 +11,8 @@ /** * An event indicating that a Pong message has been received. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @see GenericSocketMessageEventBase * @since 3.0.5-SNAPSHOT */ @@ -33,6 +32,16 @@ public ReceivedPongMessageEvent(SocketExchange exchange, @NotNull Frame frame) { this.frame = frame; } + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ + @Override + protected boolean isAsyncAllowed() { + return false; + } + /** * {@inheritDoc} * diff --git a/src/main/java/de/craftsblock/craftsnet/logging/LogLevel.java b/src/main/java/de/craftsblock/craftsnet/logging/LogLevel.java index 8d7e2851..af71800f 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/LogLevel.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/LogLevel.java @@ -4,9 +4,8 @@ * An enumeration of log levels used for categorizing log messages. * Each log level has an associated color-coded prefix for formatting purposes. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.0.1 + * @author CraftsBlock * @since 3.1.0-SNAPSHOT */ public enum LogLevel { diff --git a/src/main/java/de/craftsblock/craftsnet/logging/Logger.java b/src/main/java/de/craftsblock/craftsnet/logging/Logger.java index 58d81b58..e8ca9406 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/Logger.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/Logger.java @@ -9,9 +9,8 @@ * Implementations of this interface can be used for logging messages to various destinations * such as console, files, databases, etc. * - * @author CraftsBlock * @author Philipp Maywald - * @version 2.1.0 + * @author CraftsBlock * @since 1.0.0-SNAPSHOT */ public interface Logger { diff --git a/src/main/java/de/craftsblock/craftsnet/logging/impl/LoggerImpl.java b/src/main/java/de/craftsblock/craftsnet/logging/impl/LoggerImpl.java index cd827374..c4bbdd2c 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/impl/LoggerImpl.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/impl/LoggerImpl.java @@ -17,9 +17,8 @@ * to log error messages along with exception stack traces. The log messages include timestamps, log levels, thread names, and the * actual log text to help with debugging and tracking application behavior. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.0.5-SNAPSHOT */ public class LoggerImpl implements Logger { @@ -122,7 +121,7 @@ public void debug(@Nullable String text) { * @return {@inheritDoc} */ @Override - public Logger cloneWithName(String name) { + public Logger cloneWithName(@Nullable String name) { return new LoggerImpl(this.debug, name); } diff --git a/src/main/java/de/craftsblock/craftsnet/logging/impl/NoOpLogger.java b/src/main/java/de/craftsblock/craftsnet/logging/impl/NoOpLogger.java index 06676554..fbd90dc8 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/impl/NoOpLogger.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/impl/NoOpLogger.java @@ -9,9 +9,8 @@ * The {@link NoOpLogger} simply accepts log messages and errors but does not process * them in any way. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.1 + * @author CraftsBlock * @since 3.4.0-SNAPSHOT */ public record NoOpLogger(Logger previous) implements Logger { @@ -92,7 +91,7 @@ public void debug(@Nullable String text) { * @return {@inheritDoc} */ @Override - public Logger cloneWithName(String name) { + public Logger cloneWithName(@Nullable String name) { return this; } diff --git a/src/main/java/de/craftsblock/craftsnet/logging/impl/PlainLogger.java b/src/main/java/de/craftsblock/craftsnet/logging/impl/PlainLogger.java index 41b603a7..cabbb5fc 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/impl/PlainLogger.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/impl/PlainLogger.java @@ -9,9 +9,8 @@ * in the {@link System#out} or the {@link System#err} stream, without any * further formating. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.1.0 + * @author CraftsBlock * @since 3.1.0-SNAPSHOT */ public record PlainLogger(Logger previous) implements Logger { @@ -104,7 +103,7 @@ public void debug(@Nullable String text) { * @return {@inheritDoc} */ @Override - public Logger cloneWithName(String name) { + public Logger cloneWithName(@Nullable String name) { return this; } diff --git a/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStream.java b/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStream.java index 4bbfb592..ddd3180c 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStream.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStream.java @@ -31,9 +31,8 @@ * A utility class for logging to files. * This class provides methods to log messages to files, handle error logs, and redirect standard output and error streams to log files. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.2.6 + * @author CraftsBlock * @see MutatedPrintStream * @since 3.0.2-SNAPSHOT */ diff --git a/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStreamMutator.java b/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStreamMutator.java index f359f805..d8862967 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStreamMutator.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/mutate/LogStreamMutator.java @@ -11,7 +11,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @see LogStream * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/logging/mutate/builtin/BlurIPsMutator.java b/src/main/java/de/craftsblock/craftsnet/logging/mutate/builtin/BlurIPsMutator.java index db2563ac..2ac9f265 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/mutate/builtin/BlurIPsMutator.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/mutate/builtin/BlurIPsMutator.java @@ -17,7 +17,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @see Utils#blurIPs(String) * @since 3.5.0 */ diff --git a/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/LogOutputStream.java b/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/LogOutputStream.java index 881e9685..a8fedebd 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/LogOutputStream.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/LogOutputStream.java @@ -16,7 +16,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.0 * @since 3.5.4 */ public class LogOutputStream extends FilterOutputStream { diff --git a/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/MutatedPrintStream.java b/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/MutatedPrintStream.java index b0d71b9a..7fed072b 100644 --- a/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/MutatedPrintStream.java +++ b/src/main/java/de/craftsblock/craftsnet/logging/mutate/stream/MutatedPrintStream.java @@ -12,9 +12,8 @@ * A subclass of {@link PrintStream} used for logging. * This class intercepts the output written to the stream and writes it to the provided output stream while removing any ASCII colors. * - * @author CraftsBlock * @author Philipp Maywald - * @version 1.3.0 + * @author CraftsBlock * @since 3.0.2-SNAPSHOT */ public class MutatedPrintStream extends PrintStream { diff --git a/src/main/java/de/craftsblock/craftsnet/utils/ByteBuffer.java b/src/main/java/de/craftsblock/craftsnet/utils/ByteBuffer.java index 370dc203..942695ee 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/ByteBuffer.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/ByteBuffer.java @@ -20,7 +20,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.1 * @since 3.1.0-SNAPSHOT * @deprecated in favor of {@link java.nio.ByteBuffer} and {@link de.craftsblock.craftscore.buffer.BufferUtil} */ diff --git a/src/main/java/de/craftsblock/craftsnet/utils/FileHelper.java b/src/main/java/de/craftsblock/craftsnet/utils/FileHelper.java index bbd7d609..ab5237bc 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/FileHelper.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/FileHelper.java @@ -27,7 +27,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.2 * @since 3.1.0-SNAPSHOT */ public class FileHelper { diff --git a/src/main/java/de/craftsblock/craftsnet/utils/PassphraseUtils.java b/src/main/java/de/craftsblock/craftsnet/utils/PassphraseUtils.java index 25eedc96..7ac8a771 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/PassphraseUtils.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/PassphraseUtils.java @@ -14,7 +14,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 2.1.0 * @since 3.3.5-SNAPSHOT */ public class PassphraseUtils { diff --git a/src/main/java/de/craftsblock/craftsnet/utils/SecureEncodingUtils.java b/src/main/java/de/craftsblock/craftsnet/utils/SecureEncodingUtils.java index 185365ab..a2711430 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/SecureEncodingUtils.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/SecureEncodingUtils.java @@ -18,7 +18,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.1.1 * @since 3.4.1-SNAPSHOT */ public class SecureEncodingUtils { diff --git a/src/main/java/de/craftsblock/craftsnet/utils/Utils.java b/src/main/java/de/craftsblock/craftsnet/utils/Utils.java index 8782ae67..5585f80e 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/Utils.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/Utils.java @@ -12,7 +12,6 @@ * * @author CraftsBlock * @author Philipp Maywald - * @version 2.2.1 * @since 2.1.1-SNAPSHOT */ public class Utils { diff --git a/src/main/java/de/craftsblock/craftsnet/utils/reflection/ReflectionUtils.java b/src/main/java/de/craftsblock/craftsnet/utils/reflection/ReflectionUtils.java index d865b3e2..43e9fe28 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/reflection/ReflectionUtils.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/reflection/ReflectionUtils.java @@ -16,13 +16,12 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.4.4 * @since 3.2.0-SNAPSHOT */ public class ReflectionUtils { private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); - private static final StackWalker STACK_WALKER = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); + public static final StackWalker STACK_WALKER = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); /** * Private constructor to prevent direct instantiation @@ -76,8 +75,7 @@ public static Class getCallerClass(@Range(from = 1, to = Integer.MAX_VALUE) i * @since 3.5.0 */ public static void restrictToCallers(Class... allowed) { - Class caller = ReflectionUtils.getCallerClass(); - Class callersCaller = ReflectionUtils.getCallerClass(4); + Class callersCaller = ReflectionUtils.getCallerClass(3); for (Class allow : allowed) { if (allow.isAssignableFrom(callersCaller)) { @@ -85,7 +83,7 @@ public static void restrictToCallers(Class... allowed) { } } - throw new IllegalStateException(callersCaller.getName() + " is not permitted to call a " + caller.getSimpleName()); + throw new IllegalStateException(callersCaller.getName() + " is not permitted to call this"); } /** diff --git a/src/main/java/de/craftsblock/craftsnet/utils/reflection/TypeUtils.java b/src/main/java/de/craftsblock/craftsnet/utils/reflection/TypeUtils.java index 10838d1c..a1deb074 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/reflection/TypeUtils.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/reflection/TypeUtils.java @@ -18,7 +18,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0.3 * @since 3.5.0 */ public class TypeUtils { diff --git a/src/main/java/de/craftsblock/craftsnet/utils/versions/Comparison.java b/src/main/java/de/craftsblock/craftsnet/utils/versions/Comparison.java index 7c334833..6d2d54c4 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/versions/Comparison.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/versions/Comparison.java @@ -1,5 +1,8 @@ package de.craftsblock.craftsnet.utils.versions; +import org.jetbrains.annotations.Range; + +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -13,7 +16,6 @@ * * @author Philipp Maywald * @author CraftsBlock - * @version 1.0 * @since 3.1.0-SNAPSHOT */ enum Comparison { @@ -24,11 +26,15 @@ enum Comparison { GREATER_OR_EQUAL(">="), EQUAL("="); - private static final Map SYMBOLS = new HashMap<>(); + private static final Map SYMBOLS; static { - for (Comparison comparison : Comparison.values()) - SYMBOLS.put(comparison.symbol, comparison); + HashMap symbols = new HashMap<>(); + for (Comparison comparison : Comparison.values()) { + symbols.put(comparison.symbol, comparison); + } + + SYMBOLS = Collections.unmodifiableMap(symbols); } private final String symbol; @@ -61,10 +67,17 @@ public boolean suitable(String current, String expected) { int c = parsePart(cs, i); int e = parsePart(es, i); - if (e == Integer.MIN_VALUE) continue; + if (e == Integer.MIN_VALUE) { + continue; + } + + if (c < e) { + return apply(-1); + } - if (c < e) return apply(-1); - else if (c > e) return apply(1); + if (c > e) { + return apply(1); + } } return apply(0); @@ -79,10 +92,16 @@ public boolean suitable(String current, String expected) { * @return the parsed integer value of the version part, or 0 if not valid */ private int parsePart(String[] parts, int index) { - if (index >= parts.length) return 0; + if (index >= parts.length) { + return 0; + } + try { String part = parts[index]; - if (part.equals("*")) return Integer.MIN_VALUE; + if (part.equals("*")) { + return Integer.MIN_VALUE; + } + return Integer.parseInt(part); } catch (NumberFormatException e) { return 0; @@ -105,7 +124,7 @@ private String sanitize(String version) { * @param result the result of the comparison: -1 (less than), 0 (equal), or 1 (greater than) * @return true if the comparison satisfies the operation, false otherwise */ - public boolean apply(int result) { + public boolean apply(@Range(from = -1, to = 1) int result) { return switch (this) { case LESS -> result < 0; case GREATER -> result > 0; diff --git a/src/main/java/de/craftsblock/craftsnet/utils/versions/Versions.java b/src/main/java/de/craftsblock/craftsnet/utils/versions/Versions.java index ca06e4fd..c457fc34 100644 --- a/src/main/java/de/craftsblock/craftsnet/utils/versions/Versions.java +++ b/src/main/java/de/craftsblock/craftsnet/utils/versions/Versions.java @@ -52,7 +52,8 @@ public static boolean suitable(String current, String expected) { * @return the cleaned version string containing only digits and dots */ private static String cleanVersion(String version) { - return version.replaceAll("[^\\d.]", ""); + return version.replace("-", ".") + .replaceAll("[^\\d.]", ""); } /** @@ -66,8 +67,11 @@ private static Comparison extractOperator(String version) { Matcher matcher = pattern.matcher(version.substring(0, Math.min(version.length(), 2))); String operator; - if (matcher.find()) operator = matcher.group(); - else operator = "="; + if (matcher.find()) { + operator = matcher.group(); + } else { + operator = "="; + } return Comparison.from(operator); } @@ -77,7 +81,7 @@ private static Comparison extractOperator(String version) { * * @param craftsNet The current {@link CraftsNet} instance. */ - public static void verbalCheck(CraftsNet craftsNet) { + public static void verbalCheckCraftsNet(CraftsNet craftsNet) { Logger logger = craftsNet.getLogger(); logger.info("Checking for new version..."); try { @@ -90,12 +94,13 @@ public static void verbalCheck(CraftsNet craftsNet) { return; } - if (Versions.suitable(CraftsNet.version, ">=" + json.getString("version"))) { + String latest = json.getString("version"); + if (Versions.suitable(CraftsNet.version, ">=" + latest)) { logger.info("You are using the newest version"); return; } - logger.warning("There is a newer version (%s) of CraftsNet available", json.getString("version")); + logger.warning("There is a newer version (%s) of CraftsNet available", latest); } } catch (Exception e) { logger.error("Failed to fetch the latest version of CraftsNet!", e); diff --git a/src/test/java/de/craftsblock/craftsnet/utils/versions/ComparisonTest.java b/src/test/java/de/craftsblock/craftsnet/utils/versions/ComparisonTest.java new file mode 100644 index 00000000..a544b7b2 --- /dev/null +++ b/src/test/java/de/craftsblock/craftsnet/utils/versions/ComparisonTest.java @@ -0,0 +1,96 @@ +package de.craftsblock.craftsnet.utils.versions; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class ComparisonTest { + + @Test + void shouldDetectEqualVersions() { + assertThat(Comparison.EQUAL.suitable("1.2.3", "1.2.3")).isTrue(); + assertThat(Comparison.EQUAL.suitable("1.2.3", "1.2.4")).isFalse(); + } + + @Test + void shouldDetectGreaterVersions() { + assertThat(Comparison.GREATER.suitable("1.3.0", "1.2.0")).isTrue(); + assertThat(Comparison.GREATER.suitable("1.2.0", "1.2.0")).isFalse(); + } + + @Test + void shouldDetectLessVersions() { + assertThat(Comparison.LESS.suitable("1.1.9", "1.2.0")).isTrue(); + assertThat(Comparison.LESS.suitable("1.2.0", "1.2.0")).isFalse(); + } + + @Test + void shouldSupportGreaterOrEqual() { + assertThat(Comparison.GREATER_OR_EQUAL.suitable("1.2.0", "1.2.0")).isTrue(); + assertThat(Comparison.GREATER_OR_EQUAL.suitable("1.3.0", "1.2.0")).isTrue(); + assertThat(Comparison.GREATER_OR_EQUAL.suitable("1.1.9", "1.2.0")).isFalse(); + } + + @Test + void shouldSupportLessOrEqual() { + assertThat(Comparison.LESS_OR_EQUAL.suitable("1.2.0", "1.2.0")).isTrue(); + assertThat(Comparison.LESS_OR_EQUAL.suitable("1.1.9", "1.2.0")).isTrue(); + assertThat(Comparison.LESS_OR_EQUAL.suitable("1.3.0", "1.2.0")).isFalse(); + } + + @Test + void shouldHandleDifferentLengths() { + assertThat(Comparison.EQUAL.suitable("1.2", "1.2.0")).isTrue(); + assertThat(Comparison.GREATER.suitable("1.2.1", "1.2")).isTrue(); + assertThat(Comparison.LESS.suitable("1.2", "1.2.1")).isTrue(); + } + + @Test + void shouldHandleNullAndEmptyVersions() { + assertThat(Comparison.EQUAL.suitable(null, "0")).isTrue(); + assertThat(Comparison.EQUAL.suitable("", "0")).isTrue(); + } + + @Test + void shouldTrimWhitespace() { + assertThat(Comparison.EQUAL.suitable(" 1.2.3 ", "1.2.3")).isTrue(); + } + + @Test + void shouldTreatInvalidPartsAsZero() { + assertThat(Comparison.EQUAL.suitable("1.a.3", "1.0.3")).isTrue(); + } + + @Test + void shouldIgnoreWildcardInExpected() { + assertThat(Comparison.EQUAL.suitable("1.2.3", "1.*.3")).isTrue(); + assertThat(Comparison.GREATER_OR_EQUAL.suitable("1.2.3", "1.*.3")).isTrue(); + } + + @Test + void shouldApplyComparisonCorrectly() { + assertThat(Comparison.LESS.apply(-1)).isTrue(); + assertThat(Comparison.LESS.apply(0)).isFalse(); + + assertThat(Comparison.GREATER.apply(1)).isTrue(); + assertThat(Comparison.GREATER.apply(0)).isFalse(); + + assertThat(Comparison.EQUAL.apply(0)).isTrue(); + } + + @Test + void shouldResolveFromSymbol() { + assertThat(Comparison.from("<")).isEqualTo(Comparison.LESS); + assertThat(Comparison.from(">")).isEqualTo(Comparison.GREATER); + assertThat(Comparison.from("<=")).isEqualTo(Comparison.LESS_OR_EQUAL); + assertThat(Comparison.from(">=")).isEqualTo(Comparison.GREATER_OR_EQUAL); + assertThat(Comparison.from("=")).isEqualTo(Comparison.EQUAL); + } + + @Test + void shouldDefaultToEqualForUnknownSymbol() { + assertThat(Comparison.from("??")).isEqualTo(Comparison.EQUAL); + assertThat(Comparison.from("")).isEqualTo(Comparison.EQUAL); + } + +} \ No newline at end of file diff --git a/src/test/java/de/craftsblock/craftsnet/utils/versions/VersionsTest.java b/src/test/java/de/craftsblock/craftsnet/utils/versions/VersionsTest.java new file mode 100644 index 00000000..accabb08 --- /dev/null +++ b/src/test/java/de/craftsblock/craftsnet/utils/versions/VersionsTest.java @@ -0,0 +1,93 @@ +package de.craftsblock.craftsnet.utils.versions; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class VersionsTest { + + @Test + void shouldReturnTrueWhenVersionsAreEqualWithoutOperator() { + boolean result = Versions.suitable("1.2.3", "1.2.3"); + assertThat(result).isTrue(); + } + + @Test + void shouldReturnTrueWhenCurrentIsGreaterThanExpected() { + boolean result = Versions.suitable("1.3.0", ">1.2.0"); + assertThat(result).isTrue(); + } + + @Test + void shouldReturnFalseWhenCurrentIsLessThanExpected() { + boolean result = Versions.suitable("1.1.9", ">1.2.0"); + assertThat(result).isFalse(); + } + + @Test + void shouldSupportGreaterOrEqualOperator() { + assertThat(Versions.suitable("1.2.0", ">=1.2.0")).isTrue(); + assertThat(Versions.suitable("1.3.0", ">=1.2.0")).isTrue(); + assertThat(Versions.suitable("1.1.9", ">=1.2.0")).isFalse(); + } + + @Test + void shouldSupportLessOrEqualOperator() { + assertThat(Versions.suitable("1.2.0", "<=1.2.0")).isTrue(); + assertThat(Versions.suitable("1.1.9", "<=1.2.0")).isTrue(); + assertThat(Versions.suitable("1.3.0", "<=1.2.0")).isFalse(); + } + + @Test + void shouldSupportLessThanOperator() { + assertThat(Versions.suitable("1.1.9", "<1.2.0")).isTrue(); + assertThat(Versions.suitable("1.2.0", "<1.2.0")).isFalse(); + } + + @Test + void shouldCleanVersionStrings() { + boolean result = Versions.suitable("1.2.3-SNAPSHOT", "1.2.3"); + assertThat(result).isTrue(); + } + + @Test + void shouldHandleWeirdCharactersInVersion() { + boolean result = Versions.suitable("v1.2.3", "=1.2.3"); + assertThat(result).isTrue(); + } + + @Test + void shouldDefaultToEqualsWhenNoOperatorProvided() { + assertThat(Versions.suitable("1.2.3", "1.2.3")).isTrue(); + assertThat(Versions.suitable("1.2.4", "1.2.3")).isFalse(); + } + + @Test + void shouldHandleDashAsDotReplacement() { + boolean result = Versions.suitable("1-2-3", "1.2.3"); + assertThat(result).isTrue(); + } + + @Test + void shouldCompareMultiSegmentVersionsCorrectly() { + assertThat(Versions.suitable("1.10.0", ">1.2.0")).isTrue(); + assertThat(Versions.suitable("1.2.0", ">1.10.0")).isFalse(); + } + + @Test + void shouldHandleShortVersions() { + assertThat(Versions.suitable("1.2", "1.2.0")).isTrue(); + assertThat(Versions.suitable("1.2.0", "1.2")).isTrue(); + } + + @Test + void shouldHandleTrailingDotsOrEmptyParts() { + assertThat(Versions.suitable("1.2.", "1.2.0")).isTrue(); + } + + @Test + void shouldHandleOnlyOperatorAsExpected() { + assertThat(Versions.suitable("1.2.3", ">")).isTrue(); + } + +}