From 13a3be288127748208c62c7b66405a4eae0574e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Fri, 22 Aug 2025 23:17:43 +0200 Subject: [PATCH 01/14] chore: move config to new core package --- orebfuscator-common/pom.xml | 8 +- .../orebfuscator/util/MinecraftVersion.java | 5 +- .../orebfuscator/util/BlockPosTest.java | 2 + .../OrebfuscatorCompatibility.java | 10 +-- .../compatibility/CompatibilityLayer.java | 2 +- .../bukkit/BukkitChunkLoader.java | 6 +- .../bukkit/BukkitCompatibilityLayer.java | 4 +- .../folia/FoliaCompatibilityLayer.java | 2 +- .../AbstractPaperCompatibilityLayer.java | 4 +- .../paper/PaperCompatibilityLayer.java | 2 +- orebfuscator-core/pom.xml | 88 +++++++++++++++++++ .../cache}/AbstractRegionFileCache.java | 8 +- .../config/AbstractWorldConfig.java | 19 ++-- .../config/OrebfuscatorAdvancedConfig.java | 13 +-- .../config/OrebfuscatorBlockFlags.java | 7 +- .../config/OrebfuscatorCacheConfig.java | 11 +-- .../config/OrebfuscatorConfig.java | 26 ++++-- .../config/OrebfuscatorGeneralConfig.java | 5 +- .../config/OrebfuscatorObfuscationConfig.java | 7 +- .../config/OrebfuscatorProximityConfig.java | 10 ++- .../config/ProximityHeightCondition.java | 4 +- .../config/api}/AdvancedConfig.java | 2 +- .../orebfuscator/config/api}/BlockFlags.java | 2 +- .../orebfuscator/config/api}/CacheConfig.java | 4 +- .../orebfuscator/config/api}/Config.java | 2 +- .../config/api}/GeneralConfig.java | 2 +- .../config/api}/ObfuscationConfig.java | 4 +- .../config/api}/ProximityConfig.java | 4 +- .../orebfuscator/config/api}/WorldConfig.java | 2 +- .../config/api}/WorldConfigBundle.java | 2 +- .../config/components/WeightedBlockList.java | 18 ++-- .../config/components/WorldMatcher.java | 2 +- .../config/context/ConfigParsingContext.java | 2 +- .../context/DefaultConfigParsingContext.java | 6 +- .../config/migrations/ConfigMigration.java | 2 +- .../config/migrations/ConfigMigrationV1.java | 2 +- .../config/migrations/ConfigMigrationV2.java | 4 +- .../config/migrations/ConfigMigrationV3.java | 4 +- .../config/migrations/ConfigMigrator.java | 8 +- .../orebfuscator/logging/OfcLogger.java | 16 ++-- .../imprex/orebfuscator/util/BlockPos.java | 2 +- .../orebfuscator/util/BlockProperties.java | 2 +- .../util/BlockStateProperties.java | 2 +- .../orebfuscator/util/ChunkDirection.java | 2 +- .../orebfuscator/util/ChunkPosition.java | 2 +- .../imprex/orebfuscator/util/JavaVersion.java | 2 +- .../imprex/orebfuscator/util/MathUtil.java | 2 +- .../orebfuscator/util/NamespacedKey.java | 2 +- .../imprex/orebfuscator/util/SimpleCache.java | 2 +- .../imprex/orebfuscator/util/Version.java | 2 +- .../orebfuscator/util/WeightedIntRandom.java | 2 +- orebfuscator-nms/orebfuscator-nms-api/pom.xml | 14 ++- .../imprex/orebfuscator/OrebfuscatorNms.java | 16 ++-- .../orebfuscator/nms/AbstractNmsManager.java | 9 +- .../imprex/orebfuscator/nms/NmsManager.java | 7 +- .../orebfuscator/nms/v1_16_R1/NmsManager.java | 16 ++-- .../nms/v1_16_R1/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_16_R2/NmsManager.java | 16 ++-- .../nms/v1_16_R2/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_16_R3/NmsManager.java | 16 ++-- .../nms/v1_16_R3/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_17_R1/NmsManager.java | 16 ++-- .../nms/v1_17_R1/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_18_R1/NmsManager.java | 16 ++-- .../nms/v1_18_R1/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_18_R2/NmsManager.java | 16 ++-- .../nms/v1_18_R2/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_19_R1/NmsManager.java | 16 ++-- .../nms/v1_19_R1/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_19_R2/NmsManager.java | 16 ++-- .../nms/v1_19_R2/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_19_R3/NmsManager.java | 16 ++-- .../nms/v1_19_R3/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_20_R1/NmsManager.java | 16 ++-- .../nms/v1_20_R1/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_20_R2/NmsManager.java | 16 ++-- .../nms/v1_20_R2/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_20_R3/NmsManager.java | 16 ++-- .../nms/v1_20_R3/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_20_R4/NmsManager.java | 16 ++-- .../nms/v1_20_R4/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_21_R1/NmsManager.java | 16 ++-- .../nms/v1_21_R1/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_21_R2/NmsManager.java | 16 ++-- .../nms/v1_21_R2/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_21_R3/NmsManager.java | 16 ++-- .../nms/v1_21_R3/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_21_R4/NmsManager.java | 16 ++-- .../nms/v1_21_R4/RegionFileCache.java | 6 +- .../orebfuscator/nms/v1_21_R5/NmsManager.java | 16 ++-- .../nms/v1_21_R5/RegionFileCache.java | 6 +- orebfuscator-plugin/pom.xml | 8 +- .../imprex/orebfuscator/MetricsSystem.java | 4 +- .../net/imprex/orebfuscator/Orebfuscator.java | 8 +- .../orebfuscator/OrebfuscatorCommand.java | 6 +- .../net/imprex/orebfuscator/UpdateSystem.java | 18 ++-- .../cache/AsyncChunkSerializer.java | 2 +- .../cache/CacheFileCleanupTask.java | 12 +-- .../orebfuscator/cache/ChunkSerializer.java | 2 +- .../cache/CompressedObfuscationResult.java | 4 +- .../orebfuscator/cache/ObfuscationCache.java | 4 +- .../orebfuscator/chunk/ChunkStruct.java | 2 +- ...rappedClientboundLevelChunkPacketData.java | 2 +- .../obfuscation/DeobfuscationListener.java | 2 +- .../obfuscation/DeobfuscationWorker.java | 12 +-- .../obfuscation/ObfuscationListener.java | 14 +-- .../obfuscation/ObfuscationProcessor.java | 14 +-- .../obfuscation/ObfuscationRequest.java | 6 +- .../obfuscation/ObfuscationResult.java | 4 +- .../obfuscation/ObfuscationSystem.java | 2 +- .../obfuscation/ObfuscationTask.java | 6 +- .../ObfuscationTaskDispatcher.java | 2 +- .../player/OrebfuscatorPlayer.java | 6 +- .../player/OrebfuscatorPlayerChunk.java | 2 +- .../proximity/ProximityDirectorThread.java | 6 +- .../proximity/ProximityPacketListener.java | 4 +- .../proximity/ProximityWorker.java | 6 +- .../util/AbstractHttpService.java | 1 + .../imprex/orebfuscator/util/ConsoleUtil.java | 4 +- .../orebfuscator/util/FastGazeUtil.java | 1 + .../orebfuscator/util/HeightAccessor.java | 3 +- .../config/ProximityHeightConditionTest.java | 2 + pom.xml | 37 ++++++-- 123 files changed, 573 insertions(+), 428 deletions(-) create mode 100644 orebfuscator-core/pom.xml rename {orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache}/AbstractRegionFileCache.java (93%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/AbstractWorldConfig.java (86%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java (92%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java (90%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java (94%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/OrebfuscatorConfig.java (92%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java (90%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java (91%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java (95%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/ProximityHeightCondition.java (94%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/AdvancedConfig.java (88%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/BlockFlags.java (95%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/CacheConfig.java (77%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/Config.java (84%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/GeneralConfig.java (80%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/ObfuscationConfig.java (58%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/ProximityConfig.java (80%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/WorldConfig.java (79%) rename {orebfuscator-common/src/main/java/net/imprex/orebfuscator/config => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api}/WorldConfigBundle.java (90%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/components/WeightedBlockList.java (87%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/components/WorldMatcher.java (95%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/context/ConfigParsingContext.java (97%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/context/DefaultConfigParsingContext.java (96%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/migrations/ConfigMigration.java (91%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/migrations/ConfigMigrationV1.java (97%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/migrations/ConfigMigrationV2.java (92%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/migrations/ConfigMigrationV3.java (97%) rename {orebfuscator-plugin/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/config/migrations/ConfigMigrator.java (79%) rename orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/OFCLogger.java => orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/OfcLogger.java (84%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/BlockPos.java (98%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/BlockProperties.java (98%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/BlockStateProperties.java (98%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/ChunkDirection.java (95%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/ChunkPosition.java (96%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/JavaVersion.java (96%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/MathUtil.java (93%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/NamespacedKey.java (99%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/SimpleCache.java (95%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/Version.java (98%) rename {orebfuscator-common/src/main/java/net => orebfuscator-core/src/main/java/dev}/imprex/orebfuscator/util/WeightedIntRandom.java (97%) diff --git a/orebfuscator-common/pom.xml b/orebfuscator-common/pom.xml index cac0c616d..862ce86f4 100644 --- a/orebfuscator-common/pom.xml +++ b/orebfuscator-common/pom.xml @@ -20,10 +20,10 @@ provided - org.joml - joml - ${dependency.joml.version} - compile + dev.imprex + orebfuscator-core + ${revision} + provided \ No newline at end of file diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java b/orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java index a19d01c1b..21875ddb2 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java +++ b/orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java @@ -7,6 +7,9 @@ import org.bukkit.Bukkit; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.Version; + public final class MinecraftVersion { private static final class NmsMapping { @@ -26,7 +29,7 @@ public static String get(Version version) { for (NmsMapping mapping : MAPPINGS) { if (version.isAtOrAbove(mapping.version)) { if (mapping.version.minor() != version.minor()) { - OFCLogger.warn(String.format("Using nms mapping with mismatched minor versions: %s - %s", + OfcLogger.warn(String.format("Using nms mapping with mismatched minor versions: %s - %s", mapping.version, version)); } diff --git a/orebfuscator-common/src/test/java/net/imprex/orebfuscator/util/BlockPosTest.java b/orebfuscator-common/src/test/java/net/imprex/orebfuscator/util/BlockPosTest.java index 7a79e4a02..5f99a1b1e 100644 --- a/orebfuscator-common/src/test/java/net/imprex/orebfuscator/util/BlockPosTest.java +++ b/orebfuscator-common/src/test/java/net/imprex/orebfuscator/util/BlockPosTest.java @@ -4,6 +4,8 @@ import org.junit.jupiter.api.Test; +import dev.imprex.orebfuscator.util.BlockPos; + public class BlockPosTest { @Test diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java index 3c87f7b28..59f9ccbcd 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java @@ -7,12 +7,12 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.util.MinecraftVersion; -import net.imprex.orebfuscator.util.OFCLogger; import net.imprex.orebfuscator.util.ServerVersion; public class OrebfuscatorCompatibility { @@ -32,7 +32,7 @@ public static void initialize(Plugin plugin, Config config) { } try { - OFCLogger.debug("Loading compatibility layer for: " + className); + OfcLogger.debug("Loading compatibility layer for: " + className); Class nmsManager = Class.forName(className).asSubclass(CompatibilityLayer.class); Constructor constructor = nmsManager.getConstructor(Plugin.class, Config.class); OrebfuscatorCompatibility.instance = constructor.newInstance(plugin, config); @@ -42,7 +42,7 @@ public static void initialize(Plugin plugin, Config config) { throw new RuntimeException("Couldn't initialize compatibility layer", e); } - OFCLogger.debug("Compatibility layer successfully loaded"); + OfcLogger.debug("Compatibility layer successfully loaded"); } public static boolean isGameThread() { diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java index 15db93d1e..9a84f509b 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java @@ -4,8 +4,8 @@ import org.bukkit.World; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.ChunkPosition; public interface CompatibilityLayer { diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java index f713b128f..3f2e9b49b 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java @@ -9,11 +9,11 @@ import org.bukkit.World; import org.bukkit.plugin.Plugin; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.ChunkDirection; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.ChunkDirection; -import net.imprex.orebfuscator.util.ChunkPosition; public class BukkitChunkLoader implements Runnable { diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java index 6cd899e8f..1e8810936 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java @@ -5,11 +5,11 @@ import org.bukkit.World; import org.bukkit.plugin.Plugin; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; import net.imprex.orebfuscator.compatibility.CompatibilityScheduler; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.ChunkPosition; public class BukkitCompatibilityLayer implements CompatibilityLayer { diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java index fc0a3906d..1eb7533df 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java @@ -2,9 +2,9 @@ import org.bukkit.plugin.Plugin; +import dev.imprex.orebfuscator.config.api.Config; import net.imprex.orebfuscator.compatibility.CompatibilityScheduler; import net.imprex.orebfuscator.compatibility.paper.AbstractPaperCompatibilityLayer; -import net.imprex.orebfuscator.config.Config; public class FoliaCompatibilityLayer extends AbstractPaperCompatibilityLayer { diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java index 9cba81977..51918442b 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java @@ -4,11 +4,11 @@ import org.bukkit.World; +import dev.imprex.orebfuscator.util.ChunkDirection; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.ChunkDirection; -import net.imprex.orebfuscator.util.ChunkPosition; public abstract class AbstractPaperCompatibilityLayer implements CompatibilityLayer { diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java index 99a2bafd8..ba437f8fa 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java @@ -2,9 +2,9 @@ import org.bukkit.plugin.Plugin; +import dev.imprex.orebfuscator.config.api.Config; import net.imprex.orebfuscator.compatibility.CompatibilityScheduler; import net.imprex.orebfuscator.compatibility.bukkit.BukkitScheduler; -import net.imprex.orebfuscator.config.Config; public class PaperCompatibilityLayer extends AbstractPaperCompatibilityLayer { diff --git a/orebfuscator-core/pom.xml b/orebfuscator-core/pom.xml new file mode 100644 index 000000000..6035832a3 --- /dev/null +++ b/orebfuscator-core/pom.xml @@ -0,0 +1,88 @@ + + 4.0.0 + + + net.imprex + orebfuscator + ${revision} + + + dev.imprex + orebfuscator-core + jar + + + + org.spigotmc + spigot-api + ${dependency.bukkit.version} + provided + + + + + + + com.google.guava + guava + ${dependency.guava.version} + compile + + + com.google.code.gson + gson + ${dependency.gson.version} + compile + + + org.yaml + snakeyaml + ${dependency.snakeyaml.version} + compile + + + org.joml + joml + ${dependency.joml.version} + compile + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + + com.google.common + net.imprex.shaded.com.google.common + + + org.yaml.snakeyaml + net.imprex.shaded.org.yaml.snakeyaml + + + + + + + \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractRegionFileCache.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java similarity index 93% rename from orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractRegionFileCache.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java index 44b974057..ecaa7f45a 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractRegionFileCache.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.nms; +package dev.imprex.orebfuscator.cache; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -10,9 +10,9 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.util.ChunkPosition; -import net.imprex.orebfuscator.util.SimpleCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.SimpleCache; public abstract class AbstractRegionFileCache { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/AbstractWorldConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java similarity index 86% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/AbstractWorldConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java index 65eac3d10..fd07c6335 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/AbstractWorldConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import java.util.ArrayList; import java.util.List; @@ -6,14 +6,15 @@ import org.bukkit.configuration.ConfigurationSection; -import net.imprex.orebfuscator.config.components.WeightedBlockList; -import net.imprex.orebfuscator.config.components.WorldMatcher; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; -import net.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.config.api.WorldConfig; +import dev.imprex.orebfuscator.config.components.WeightedBlockList; +import dev.imprex.orebfuscator.config.components.WorldMatcher; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.MathUtil; +import dev.imprex.orebfuscator.util.WeightedIntRandom; import net.imprex.orebfuscator.util.HeightAccessor; -import net.imprex.orebfuscator.util.MathUtil; -import net.imprex.orebfuscator.util.OFCLogger; -import net.imprex.orebfuscator.util.WeightedIntRandom; public abstract class AbstractWorldConfig implements WorldConfig { @@ -130,7 +131,7 @@ public boolean shouldObfuscate(int y) { WeightedIntRandom[] createWeightedRandoms(HeightAccessor heightAccessor) { - OFCLogger.debug(String.format("Creating weighted randoms for %s for world %s:", name, heightAccessor)); + OfcLogger.debug(String.format("Creating weighted randoms for %s for world %s:", name, heightAccessor)); return WeightedBlockList.create(heightAccessor, this.weightedBlockLists); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java similarity index 92% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java index 3c4d013ab..adad7e9b0 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java @@ -1,9 +1,10 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import org.bukkit.configuration.ConfigurationSection; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; -import net.imprex.orebfuscator.util.OFCLogger; +import dev.imprex.orebfuscator.config.api.AdvancedConfig; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.logging.OfcLogger; public class OrebfuscatorAdvancedConfig implements AdvancedConfig { @@ -67,9 +68,9 @@ public void initialize() { this.obfuscationThreads = (int) (obfuscationWorkerThreadsSet ? obfuscationThreads : availableThreads); this.proximityThreads = (int) (proximityHiderThreadsSet ? proximityThreads : Math.ceil(availableThreads / 2f)); - OFCLogger.setVerboseLogging(this.verbose); - OFCLogger.debug("advanced.obfuscationWorkerThreads = " + this.obfuscationThreads); - OFCLogger.debug("advanced.proximityHiderThreads = " + this.proximityThreads); + OfcLogger.setVerboseLogging(this.verbose); + OfcLogger.debug("advanced.obfuscationWorkerThreads = " + this.obfuscationThreads); + OfcLogger.debug("advanced.proximityHiderThreads = " + this.proximityThreads); } public void serialize(ConfigurationSection section) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java similarity index 90% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java index 5c38d1997..e64b37770 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java @@ -1,10 +1,11 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import java.util.Map.Entry; +import dev.imprex.orebfuscator.config.api.BlockFlags; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; public class OrebfuscatorBlockFlags implements BlockFlags { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java similarity index 94% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java index f1fcbb013..204883d03 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import java.io.IOException; import java.nio.file.Files; @@ -10,9 +10,10 @@ import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; -import net.imprex.orebfuscator.util.ChunkPosition; -import net.imprex.orebfuscator.util.OFCLogger; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.ChunkPosition; public class OrebfuscatorCacheConfig implements CacheConfig { @@ -68,7 +69,7 @@ public void deserialize(ConfigurationSection section, ConfigParsingContext conte // try create diskCache.directory if (this.enabledValue && this.enableDiskCacheValue) { - OFCLogger.debug("Using '" + this.baseDirectory.toAbsolutePath() + "' as chunk cache path"); + OfcLogger.debug("Using '" + this.baseDirectory.toAbsolutePath() + "' as chunk cache path"); try { if (Files.notExists(this.baseDirectory)) { Files.createDirectories(this.baseDirectory); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java similarity index 92% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java index 9652fa09e..cff4d25c9 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -21,17 +21,25 @@ import com.google.common.hash.Hashing; +import dev.imprex.orebfuscator.config.api.AdvancedConfig; +import dev.imprex.orebfuscator.config.api.BlockFlags; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.config.api.GeneralConfig; +import dev.imprex.orebfuscator.config.api.ObfuscationConfig; +import dev.imprex.orebfuscator.config.api.ProximityConfig; +import dev.imprex.orebfuscator.config.api.WorldConfigBundle; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.config.context.DefaultConfigParsingContext; +import dev.imprex.orebfuscator.config.migrations.ConfigMigrator; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.WeightedIntRandom; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; -import net.imprex.orebfuscator.config.context.DefaultConfigParsingContext; -import net.imprex.orebfuscator.config.migrations.ConfigMigrator; -import net.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.HeightAccessor; import net.imprex.orebfuscator.util.MinecraftVersion; -import net.imprex.orebfuscator.util.OFCLogger; -import net.imprex.orebfuscator.util.WeightedIntRandom; public class OrebfuscatorConfig implements Config { @@ -341,13 +349,13 @@ private T findConfig(Stream configs .collect(Collectors.toList()); if (matchingConfigs.size() > 1) { - OFCLogger.warn(String.format("world '%s' has more than one %s config choosing first one", worldName, configType)); + OfcLogger.warn(String.format("world '%s' has more than one %s config choosing first one", worldName, configType)); } T config = matchingConfigs.size() > 0 ? matchingConfigs.get(0) : null; String configName = config == null ? "null" : config.getName(); - OFCLogger.debug(String.format("using '%s' %s config for world '%s'", configName, configType, worldName)); + OfcLogger.debug(String.format("using '%s' %s config for world '%s'", configName, configType, worldName)); return config; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java similarity index 90% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java index 24bca191e..da7b6d138 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java @@ -1,8 +1,9 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import org.bukkit.configuration.ConfigurationSection; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.config.api.GeneralConfig; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; public class OrebfuscatorGeneralConfig implements GeneralConfig { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java similarity index 91% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java index 63fca3efa..418fd5f09 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -7,9 +7,10 @@ import org.bukkit.configuration.ConfigurationSection; +import dev.imprex.orebfuscator.config.api.ObfuscationConfig; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.util.BlockProperties; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; -import net.imprex.orebfuscator.util.BlockProperties; public class OrebfuscatorObfuscationConfig extends AbstractWorldConfig implements ObfuscationConfig { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java similarity index 95% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java index bfffcd5fc..409cc0565 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; import java.util.HashSet; import java.util.LinkedHashMap; @@ -8,10 +8,12 @@ import org.bukkit.configuration.ConfigurationSection; import org.joml.Matrix4f; +import dev.imprex.orebfuscator.config.api.BlockFlags; +import dev.imprex.orebfuscator.config.api.ProximityConfig; +import dev.imprex.orebfuscator.config.components.WeightedBlockList; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.util.BlockProperties; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.config.components.WeightedBlockList; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; -import net.imprex.orebfuscator.util.BlockProperties; public class OrebfuscatorProximityConfig extends AbstractWorldConfig implements ProximityConfig { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/ProximityHeightCondition.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ProximityHeightCondition.java similarity index 94% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/ProximityHeightCondition.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ProximityHeightCondition.java index 5c0bd13b9..5775b4d8c 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/ProximityHeightCondition.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ProximityHeightCondition.java @@ -1,6 +1,6 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config; -import net.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockPos; /** * Only use 25 MSBs of blockFlags for ProximityHeightCondition diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/AdvancedConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/AdvancedConfig.java similarity index 88% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/AdvancedConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/AdvancedConfig.java index 1be781884..ba91feb9e 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/AdvancedConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/AdvancedConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; public interface AdvancedConfig { diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/BlockFlags.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/BlockFlags.java similarity index 95% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/BlockFlags.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/BlockFlags.java index f1b594f9b..8d29d6bba 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/BlockFlags.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/BlockFlags.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; public interface BlockFlags { diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/CacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java similarity index 77% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/CacheConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java index 711ce541c..51089d9c8 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/CacheConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java @@ -1,8 +1,8 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; import java.nio.file.Path; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkPosition; public interface CacheConfig { diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/Config.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/Config.java similarity index 84% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/Config.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/Config.java index 9821ece5e..817bf53a3 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/Config.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/Config.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; import org.bukkit.World; diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/GeneralConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/GeneralConfig.java similarity index 80% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/GeneralConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/GeneralConfig.java index 327679466..1f7c4244e 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/GeneralConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/GeneralConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; public interface GeneralConfig { diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/ObfuscationConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ObfuscationConfig.java similarity index 58% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/ObfuscationConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ObfuscationConfig.java index 459c72a56..3381f5adc 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/ObfuscationConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ObfuscationConfig.java @@ -1,6 +1,6 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; -import net.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockProperties; public interface ObfuscationConfig extends WorldConfig { diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/ProximityConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ProximityConfig.java similarity index 80% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/ProximityConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ProximityConfig.java index 97364845b..1b900643a 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/ProximityConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ProximityConfig.java @@ -1,10 +1,10 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; import java.util.Map; import org.joml.Matrix4f; -import net.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockProperties; public interface ProximityConfig extends WorldConfig { diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/WorldConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfig.java similarity index 79% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/WorldConfig.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfig.java index bacb32b58..c21469f3a 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/WorldConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfig.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; public interface WorldConfig { diff --git a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/WorldConfigBundle.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java similarity index 90% rename from orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/WorldConfigBundle.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java index c13cad552..4227bd3bc 100644 --- a/orebfuscator-common/src/main/java/net/imprex/orebfuscator/config/WorldConfigBundle.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.api; public interface WorldConfigBundle { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java similarity index 87% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/components/WeightedBlockList.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java index 5aed49d91..4d73b83be 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/config/components/WeightedBlockList.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.config.components; +package dev.imprex.orebfuscator.config.components; import java.util.ArrayList; import java.util.Collections; @@ -9,14 +9,14 @@ import org.bukkit.configuration.ConfigurationSection; +import dev.imprex.orebfuscator.config.context.ConfigParsingContext; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.MathUtil; +import dev.imprex.orebfuscator.util.WeightedIntRandom; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.config.context.ConfigParsingContext; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.BlockProperties; import net.imprex.orebfuscator.util.HeightAccessor; -import net.imprex.orebfuscator.util.MathUtil; -import net.imprex.orebfuscator.util.OFCLogger; -import net.imprex.orebfuscator.util.WeightedIntRandom; public class WeightedBlockList { @@ -45,7 +45,7 @@ public static WeightedIntRandom[] create(HeightAccessor heightAccessor, List entry : list.blocks.entrySet()) { if (!builder.add(entry.getKey().getDefaultBlockState().getId(), entry.getValue())) { - OFCLogger.warn(String.format("duplicate randomBlock entry for %s in %s", + OfcLogger.warn(String.format("duplicate randomBlock entry for %s in %s", entry.getKey().getKey(), list.name)); } } @@ -62,7 +62,7 @@ public static WeightedIntRandom[] create(HeightAccessor heightAccessor, List${revision} compile + + dev.imprex + orebfuscator-core + ${revision} + compile + - - - - org.apache.maven.plugins - maven-shade-plugin - - - \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java index dc011f8ce..04e10c372 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java @@ -5,15 +5,15 @@ import org.bukkit.World; import org.bukkit.entity.Player; -import net.imprex.orebfuscator.config.Config; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.NmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.BlockProperties; import net.imprex.orebfuscator.util.MinecraftVersion; -import net.imprex.orebfuscator.util.NamespacedKey; -import net.imprex.orebfuscator.util.OFCLogger; import net.imprex.orebfuscator.util.ServerVersion; public class OrebfuscatorNms { @@ -30,7 +30,7 @@ public static void initialize(Config config) { nmsVersion += "_mojang"; } - OFCLogger.debug("Searching NMS adapter for server version \"" + nmsVersion + "\"!"); + OfcLogger.debug("Searching NMS adapter for server version \"" + nmsVersion + "\"!"); try { String className = "net.imprex.orebfuscator.nms." + nmsVersion + ".NmsManager"; @@ -43,7 +43,7 @@ public static void initialize(Config config) { throw new RuntimeException("Couldn't initialize NMS adapter", e); } - OFCLogger.debug("NMS adapter for server version \"" + nmsVersion + "\" found!"); + OfcLogger.debug("NMS adapter for server version \"" + nmsVersion + "\" found!"); } public static AbstractRegionFileCache getRegionFileCache() { diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java index 3bc532fe2..4be8e6524 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java @@ -3,10 +3,11 @@ import java.util.HashMap; import java.util.Map; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.MathUtil; -import net.imprex.orebfuscator.util.NamespacedKey; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.MathUtil; +import dev.imprex.orebfuscator.util.NamespacedKey; public abstract class AbstractNmsManager implements NmsManager { diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java index 7df81e57b..ac5effc82 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java @@ -3,9 +3,10 @@ import org.bukkit.World; import org.bukkit.entity.Player; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.NamespacedKey; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; public interface NmsManager { diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java index a0e293086..ec9c633eb 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java @@ -20,13 +20,13 @@ import com.comphenix.protocol.wrappers.WrappedBlockData; import com.google.common.collect.ImmutableList; -import net.imprex.orebfuscator.config.Config; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.server.v1_16_R1.Block; import net.minecraft.server.v1_16_R1.BlockPosition; import net.minecraft.server.v1_16_R1.Blocks; @@ -122,11 +122,11 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ChunkProviderServer serverChunkCache = level(world).getChunkProvider(); BlockPosition.MutableBlockPosition position = new BlockPosition.MutableBlockPosition(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.c(pos.x, pos.y, pos.z); serverChunkCache.flagDirty(position); } @@ -142,7 +142,7 @@ public void sendBlockUpdates(Player player, Iterable iterable) { Map> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java index 177887ec0..03b02e824 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_16_R1.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.server.v1_16_R1.ChunkCoordIntPair; import net.minecraft.server.v1_16_R1.RegionFile; import net.minecraft.server.v1_16_R1.RegionFileCompression; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java index 6de27bda7..7072c81c3 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java @@ -17,13 +17,13 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; -import net.imprex.orebfuscator.config.Config; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.server.v1_16_R2.Block; import net.minecraft.server.v1_16_R2.BlockPosition; import net.minecraft.server.v1_16_R2.Blocks; @@ -122,11 +122,11 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ChunkProviderServer serverChunkCache = level(world).getChunkProvider(); BlockPosition.MutableBlockPosition position = new BlockPosition.MutableBlockPosition(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.c(pos.x, pos.y, pos.z); serverChunkCache.flagDirty(position); } @@ -142,7 +142,7 @@ public void sendBlockUpdates(Player player, Iterable iterable) { Map> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java index 86f0fcbb2..2e2ca0533 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_16_R2.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.server.v1_16_R2.ChunkCoordIntPair; import net.minecraft.server.v1_16_R2.RegionFile; import net.minecraft.server.v1_16_R2.RegionFileCompression; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java index 6b1a040e3..791f4b93e 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java @@ -17,13 +17,13 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; -import net.imprex.orebfuscator.config.Config; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.server.v1_16_R3.Block; import net.minecraft.server.v1_16_R3.BlockPosition; import net.minecraft.server.v1_16_R3.Blocks; @@ -122,11 +122,11 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ChunkProviderServer serverChunkCache = level(world).getChunkProvider(); BlockPosition.MutableBlockPosition position = new BlockPosition.MutableBlockPosition(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.c(pos.x, pos.y, pos.z); serverChunkCache.flagDirty(position); } @@ -142,7 +142,7 @@ public void sendBlockUpdates(Player player, Iterable iterable) { Map> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java index 41fd19731..ff68e7cc1 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_16_R3.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.server.v1_16_R3.ChunkCoordIntPair; import net.minecraft.server.v1_16_R3.RegionFile; import net.minecraft.server.v1_16_R3.RegionFileCompression; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java index a4733ccf2..1be0be7e6 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java @@ -18,12 +18,12 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; -import net.imprex.orebfuscator.config.Config; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.SectionPos; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkProvider(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.getLevel(); ServerChunkCache serverChunkCache = level.getChunkProvider(); @@ -139,7 +139,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java index 272d4d842..2d8bc1ae9 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_17_R1.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java index a5f590590..493874ca2 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java @@ -16,14 +16,14 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.SectionPos; @@ -119,18 +119,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.getLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -139,7 +139,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java index fb00d21e7..6043f09ce 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_18_R1.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java index 9d2ef2653..1bcefac1a 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java @@ -16,14 +16,14 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.SectionPos; @@ -119,18 +119,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.getLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -139,7 +139,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java index f85e8aa76..650775214 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_18_R2.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java index cb5fcb959..c571dcde8 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.SectionPos; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.getLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java index 1354208ea..5041ff6e7 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_19_R1.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java index 4a6a9479a..cd3dd8ca9 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.getLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java index c6ed9c4ed..a4ae0d41e 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_19_R2.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java index 4f81a4cc8..81a7703fe 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.getLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java index c7fdc4541..9ca3d6751 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_19_R3.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java index cc1b5f3cf..a7389622a 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java index 8463f080e..222d19431 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_20_R1.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java index 1b026f685..58a97eae4 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java index 80099778d..b822d6919 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_20_R2.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java index 8d73c0360..f3c064e22 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java index 5b6265980..d294db7ea 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_20_R3.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java index f37d98f86..172471a17 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java index 8f4117628..40864aa59 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_20_R4.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java index 274930570..7126ce7ce 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java index 01ff525aa..a4ec85d52 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_21_R1.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java index 1e8050794..746c53e5e 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java index 964e50314..47dabddac 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_21_R2.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java index c5fa68c74..6d570fd66 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java index 9526e412a..de45f3402 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_21_R3.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java index a24d1178f..f0cff854e 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.serverLevel(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java index 70b247bde..61d63b77c 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_21_R4.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java index 0f4810c2b..2a3fe4578 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java @@ -15,14 +15,14 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; -import net.imprex.orebfuscator.config.Config; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockProperties; -import net.imprex.orebfuscator.util.BlockStateProperties; -import net.imprex.orebfuscator.util.NamespacedKey; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.core.registries.BuiltInRegistries; @@ -118,18 +118,18 @@ public int getBlockState(World world, int x, int y, int z) { } @Override - public void sendBlockUpdates(World world, Iterable iterable) { + public void sendBlockUpdates(World world, Iterable iterable) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { position.set(pos.x, pos.y, pos.z); serverChunkCache.blockChanged(position); } } @Override - public void sendBlockUpdates(Player player, Iterable iterable) { + public void sendBlockUpdates(Player player, Iterable iterable) { ServerPlayer serverPlayer = player(player); ServerLevel level = serverPlayer.level(); ServerChunkCache serverChunkCache = level.getChunkSource(); @@ -138,7 +138,7 @@ public void sendBlockUpdates(Player player, Iterable> sectionPackets = new HashMap<>(); List> blockEntityPackets = new ArrayList<>(); - for (net.imprex.orebfuscator.util.BlockPos pos : iterable) { + for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { continue; } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java index 092f96d01..23490c348 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java @@ -8,9 +8,9 @@ import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_21_R5.CraftServer; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; diff --git a/orebfuscator-plugin/pom.xml b/orebfuscator-plugin/pom.xml index 6925b175b..7e4ac65cc 100644 --- a/orebfuscator-plugin/pom.xml +++ b/orebfuscator-plugin/pom.xml @@ -105,7 +105,13 @@ net.imprex orebfuscator-common ${revision} - provided + compile + + + dev.imprex + orebfuscator-core + ${revision} + compile diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/MetricsSystem.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/MetricsSystem.java index 3989b7ddb..8bf8b08c2 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/MetricsSystem.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/MetricsSystem.java @@ -10,8 +10,8 @@ import org.bstats.charts.SimplePie; import org.bukkit.Bukkit; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; -import net.imprex.orebfuscator.util.MathUtil; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.util.MathUtil; public class MetricsSystem { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java index 6522c2c69..ac5f7eb22 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java @@ -10,16 +10,16 @@ import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.java.JavaPlugin; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.api.OrebfuscatorService; import net.imprex.orebfuscator.cache.ObfuscationCache; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; import net.imprex.orebfuscator.obfuscation.ObfuscationSystem; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; import net.imprex.orebfuscator.proximity.ProximityDirectorThread; import net.imprex.orebfuscator.proximity.ProximityPacketListener; import net.imprex.orebfuscator.util.HeightAccessor; import net.imprex.orebfuscator.util.MinecraftVersion; -import net.imprex.orebfuscator.util.OFCLogger; public class Orebfuscator extends JavaPlugin implements Listener { @@ -36,7 +36,7 @@ public class Orebfuscator extends JavaPlugin implements Listener { @Override public void onLoad() { - OFCLogger.LOGGER = getLogger(); + OfcLogger.LOGGER = getLogger(); } @Override @@ -98,7 +98,7 @@ public void onEnable() { // add commands getCommand("orebfuscator").setExecutor(new OrebfuscatorCommand(this)); } catch (Exception e) { - OFCLogger.error("An error occurred while enabling plugin", e); + OfcLogger.error("An error occurred while enabling plugin", e); this.getServer().getPluginManager().registerEvent(PluginEnableEvent.class, this, EventPriority.NORMAL, this::onEnableFailed, this); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java index dccdc8d85..55b8fb749 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java @@ -29,10 +29,10 @@ import com.google.gson.internal.Streams; import com.google.gson.stream.JsonWriter; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.JavaVersion; import net.imprex.orebfuscator.util.HeightAccessor; -import net.imprex.orebfuscator.util.JavaVersion; import net.imprex.orebfuscator.util.MinecraftVersion; -import net.imprex.orebfuscator.util.OFCLogger; import net.imprex.orebfuscator.util.PermissionUtil; public class OrebfuscatorCommand implements CommandExecutor, TabCompleter { @@ -112,7 +112,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St Base64.Encoder encoder = Base64.getUrlEncoder(); - String latestLog = OFCLogger.getLatestVerboseLog(); + String latestLog = OfcLogger.getLatestVerboseLog(); root.addProperty("verboseLog", encoder.encodeToString(latestLog.getBytes(StandardCharsets.UTF_8))); try { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java index 9e0d58f67..3514791af 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java @@ -18,12 +18,12 @@ import com.google.gson.annotations.SerializedName; -import net.imprex.orebfuscator.config.GeneralConfig; +import dev.imprex.orebfuscator.config.api.GeneralConfig; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.Version; import net.imprex.orebfuscator.util.AbstractHttpService; import net.imprex.orebfuscator.util.ConsoleUtil; import net.imprex.orebfuscator.util.MinecraftVersion; -import net.imprex.orebfuscator.util.OFCLogger; -import net.imprex.orebfuscator.util.Version; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; @@ -62,7 +62,7 @@ public UpdateSystem(Orebfuscator orebfuscator) { private CompletableFuture> requestLatestVersion() { String installedVersion = this.orebfuscator.getDescription().getVersion(); if (!this.generalConfig.checkForUpdates() || isDevVersion(installedVersion)) { - OFCLogger.debug("UpdateSystem - Update check disabled or dev version detected; skipping"); + OfcLogger.debug("UpdateSystem - Update check disabled or dev version detected; skipping"); return CompletableFuture.completedFuture(Optional.empty()); } @@ -77,13 +77,13 @@ private CompletableFuture> requestLatestVersion() { .findFirst(); latestVersion.ifPresentOrElse( - v -> OFCLogger.debug("UpdateSystem - Fetched latest version " + v.version), - () -> OFCLogger.debug("UpdateSystem - Couldn't fetch latest version")); + v -> OfcLogger.debug("UpdateSystem - Fetched latest version " + v.version), + () -> OfcLogger.debug("UpdateSystem - Couldn't fetch latest version")); return latestVersion.map(v -> version.isBelow(v.version) ? v : null); }) ).exceptionally(throwable -> { - OFCLogger.log(Level.WARNING, "UpdateSystem - Unable to fetch latest version", throwable); + OfcLogger.log(Level.WARNING, "UpdateSystem - Unable to fetch latest version", throwable); return Optional.empty(); }); } @@ -91,7 +91,7 @@ private CompletableFuture> requestLatestVersion() { private CompletableFuture> getLatestVersion() { Instant validUntil = this.validUntil.get(); if (validUntil != null && validUntil.compareTo(Instant.now()) < 0 && this.validUntil.compareAndSet(validUntil, null)) { - OFCLogger.debug("UpdateSystem - Cleared latest cached version"); + OfcLogger.debug("UpdateSystem - Cleared latest cached version"); this.latestVersion.set(null); } @@ -102,7 +102,7 @@ private CompletableFuture> getLatestVersion() { CompletableFuture> newFuture = new CompletableFuture<>(); if (this.latestVersion.compareAndSet(null, newFuture)) { - OFCLogger.debug("UpdateSystem - Starting to check for updates"); + OfcLogger.debug("UpdateSystem - Starting to check for updates"); this.requestLatestVersion().thenAccept(version -> { this.validUntil.set(Instant.now().plus(CACHE_DURATION)); newFuture.complete(version); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java index ff1fe9a05..cddf0e49f 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java @@ -10,8 +10,8 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.Orebfuscator; -import net.imprex.orebfuscator.util.ChunkPosition; /** * This class works similar to a bounded buffer for cache read and write diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java index 3312b6270..9f513abea 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java @@ -7,11 +7,11 @@ import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.config.CacheConfig; -import net.imprex.orebfuscator.nms.AbstractRegionFileCache; -import net.imprex.orebfuscator.util.OFCLogger; public class CacheFileCleanupTask implements Runnable { @@ -26,7 +26,7 @@ public CacheFileCleanupTask(Orebfuscator orebfuscator) { @Override public void run() { if (Files.notExists(this.cacheConfig.baseDirectory())) { - OFCLogger.debug("Skipping CacheFileCleanupTask as the cache directory doesn't exist."); + OfcLogger.debug("Skipping CacheFileCleanupTask as the cache directory doesn't exist."); return; } @@ -45,7 +45,7 @@ public FileVisitResult visitFile(Path path, BasicFileAttributes attributes) thro Files.delete(path); CacheFileCleanupTask.this.deleteCount++; - OFCLogger.debug("deleted cache file: " + path); + OfcLogger.debug("deleted cache file: " + path); } return FileVisitResult.CONTINUE; } @@ -55,7 +55,7 @@ public FileVisitResult visitFile(Path path, BasicFileAttributes attributes) thro } if (this.deleteCount > 0) { - OFCLogger.info(String.format("CacheFileCleanupTask successfully deleted %d cache file(s)", this.deleteCount)); + OfcLogger.info(String.format("CacheFileCleanupTask successfully deleted %d cache file(s)", this.deleteCount)); } } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java index e6ed4bb89..9a3b80eec 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java @@ -4,8 +4,8 @@ import java.io.DataOutputStream; import java.io.IOException; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.util.ChunkPosition; public class ChunkSerializer { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CompressedObfuscationResult.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CompressedObfuscationResult.java index 3505c34b2..c3f474dee 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CompressedObfuscationResult.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CompressedObfuscationResult.java @@ -9,10 +9,10 @@ import java.util.Collection; import java.util.Optional; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.obfuscation.ObfuscationRequest; import net.imprex.orebfuscator.obfuscation.ObfuscationResult; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.ChunkPosition; import net.jpountz.lz4.LZ4BlockInputStream; import net.jpountz.lz4.LZ4BlockOutputStream; diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java index 2e8649160..31727c265 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java @@ -7,13 +7,13 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.RemovalNotification; +import dev.imprex.orebfuscator.config.api.CacheConfig; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.OrebfuscatorStatistics; -import net.imprex.orebfuscator.config.CacheConfig; import net.imprex.orebfuscator.obfuscation.ObfuscationRequest; import net.imprex.orebfuscator.obfuscation.ObfuscationResult; -import net.imprex.orebfuscator.util.ChunkPosition; public class ObfuscationCache { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java index 3d8debb64..e795d1eea 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java @@ -12,7 +12,7 @@ import com.comphenix.protocol.wrappers.nbt.NbtBase; import com.comphenix.protocol.wrappers.nbt.NbtCompound; -import net.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.HeightAccessor; public class ChunkStruct { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/WrappedClientboundLevelChunkPacketData.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/WrappedClientboundLevelChunkPacketData.java index d634e58b9..957f428ab 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/WrappedClientboundLevelChunkPacketData.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/WrappedClientboundLevelChunkPacketData.java @@ -9,7 +9,7 @@ import com.comphenix.protocol.reflect.accessors.FieldAccessor; import com.comphenix.protocol.utility.MinecraftReflection; -import net.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockPos; public class WrappedClientboundLevelChunkPacketData { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationListener.java index f6018f246..7324b8fae 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationListener.java @@ -19,9 +19,9 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.UpdateSystem; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; import net.imprex.orebfuscator.util.ConsoleUtil; import net.imprex.orebfuscator.util.PermissionUtil; diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java index f562583e1..d6aa9efb4 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java @@ -10,15 +10,15 @@ import com.google.common.collect.Iterables; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.config.api.BlockFlags; +import dev.imprex.orebfuscator.config.api.ObfuscationConfig; +import dev.imprex.orebfuscator.config.api.WorldConfigBundle; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.cache.ObfuscationCache; -import net.imprex.orebfuscator.config.BlockFlags; -import net.imprex.orebfuscator.config.ObfuscationConfig; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; -import net.imprex.orebfuscator.config.WorldConfigBundle; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.ChunkPosition; public class DeobfuscationWorker { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java index 10e4df55b..a7e2aab9e 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java @@ -19,15 +19,15 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketEvent; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.config.api.AdvancedConfig; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.chunk.ChunkStruct; -import net.imprex.orebfuscator.config.AdvancedConfig; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.OFCLogger; import net.imprex.orebfuscator.util.PermissionUtil; import net.imprex.orebfuscator.util.ServerVersion; @@ -116,7 +116,7 @@ public void onPacketSending(PacketEvent event) { } else if (chunk != null) { this.complete(event, struct, chunk); } else { - OFCLogger.warn(String.format("skipping chunk[world=%s, x=%d, z=%d] because obfuscation result is missing", + OfcLogger.warn(String.format("skipping chunk[world=%s, x=%d, z=%d] because obfuscation result is missing", struct.world.getName(), struct.chunkX, struct.chunkZ)); this.asynchronousManager.signalPacketTransmission(event); } @@ -129,10 +129,10 @@ private boolean shouldNotObfuscate(Player player) { private void completeExceptionally(PacketEvent event, ChunkStruct struct, Throwable throwable) { if (throwable instanceof TimeoutException) { - OFCLogger.warn(String.format("Obfuscation for chunk[world=%s, x=%d, z=%d] timed out", + OfcLogger.warn(String.format("Obfuscation for chunk[world=%s, x=%d, z=%d] timed out", struct.world.getName(), struct.chunkX, struct.chunkZ)); } else { - OFCLogger.error(String.format("An error occurred while obfuscating chunk[world=%s, x=%d, z=%d]", + OfcLogger.error(String.format("An error occurred while obfuscating chunk[world=%s, x=%d, z=%d]", struct.world.getName(), struct.chunkX, struct.chunkZ), throwable); } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java index 2b761fd72..abc618361 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java @@ -7,18 +7,18 @@ import org.bukkit.World; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.config.ProximityHeightCondition; +import dev.imprex.orebfuscator.config.api.BlockFlags; +import dev.imprex.orebfuscator.config.api.ObfuscationConfig; +import dev.imprex.orebfuscator.config.api.ProximityConfig; +import dev.imprex.orebfuscator.config.api.WorldConfigBundle; +import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.chunk.Chunk; import net.imprex.orebfuscator.chunk.ChunkSection; import net.imprex.orebfuscator.chunk.ChunkStruct; -import net.imprex.orebfuscator.config.BlockFlags; -import net.imprex.orebfuscator.config.ObfuscationConfig; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; -import net.imprex.orebfuscator.config.ProximityConfig; -import net.imprex.orebfuscator.config.ProximityHeightCondition; -import net.imprex.orebfuscator.config.WorldConfigBundle; -import net.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.HeightAccessor; public class ObfuscationProcessor { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java index 394508a8c..6acd43409 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java @@ -7,10 +7,10 @@ import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.chunk.ChunkStruct; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.ChunkPosition; public class ObfuscationRequest { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java index 5c852b981..03ec904d2 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Set; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.ChunkPosition; public class ObfuscationResult { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java index 7238a468f..369d97181 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java @@ -5,10 +5,10 @@ import org.bukkit.block.Block; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.cache.ObfuscationCache; import net.imprex.orebfuscator.chunk.ChunkStruct; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; public class ObfuscationSystem { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java index 153d6444e..a0ff136d2 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java @@ -6,12 +6,12 @@ import org.bukkit.World; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.ChunkDirection; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.chunk.ChunkStruct; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.ChunkDirection; -import net.imprex.orebfuscator.util.ChunkPosition; public class ObfuscationTask { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTaskDispatcher.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTaskDispatcher.java index bff70473f..d290ad5d5 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTaskDispatcher.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTaskDispatcher.java @@ -6,8 +6,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.LockSupport; +import dev.imprex.orebfuscator.config.api.AdvancedConfig; import net.imprex.orebfuscator.Orebfuscator; -import net.imprex.orebfuscator.config.AdvancedConfig; class ObfuscationTaskDispatcher { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java index cba1047a6..076a0d590 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java @@ -11,10 +11,10 @@ import com.google.common.base.Objects; +import dev.imprex.orebfuscator.config.api.AdvancedConfig; +import dev.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.ChunkPosition; import net.imprex.orebfuscator.Orebfuscator; -import net.imprex.orebfuscator.config.AdvancedConfig; -import net.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.ChunkPosition; public class OrebfuscatorPlayer { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayerChunk.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayerChunk.java index 4fca83dbf..6320e0967 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayerChunk.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayerChunk.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.NoSuchElementException; -import net.imprex.orebfuscator.util.BlockPos; +import dev.imprex.orebfuscator.util.BlockPos; public class OrebfuscatorPlayerChunk { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java index e62912ec9..ccbd70c27 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java @@ -16,9 +16,9 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import dev.imprex.orebfuscator.config.api.AdvancedConfig; +import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.Orebfuscator; -import net.imprex.orebfuscator.config.AdvancedConfig; -import net.imprex.orebfuscator.util.OFCLogger; import net.imprex.orebfuscator.util.RingTimer; public class ProximityDirectorThread extends Thread implements Listener { @@ -180,7 +180,7 @@ public void run() { } if (this.phaser.isTerminated() && this.running) { - OFCLogger.error("Looks like we encountered an invalid state, please report this:", + OfcLogger.error("Looks like we encountered an invalid state, please report this:", new IllegalStateException("Proximity Phaser terminated!")); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java index d19e18b46..e5c145189 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java @@ -12,10 +12,10 @@ import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.wrappers.ChunkCoordIntPair; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.config.api.ProximityConfig; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.chunk.ChunkCapabilities; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; -import net.imprex.orebfuscator.config.ProximityConfig; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; import net.imprex.orebfuscator.util.PermissionUtil; diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java index 8df120430..3116f4d2e 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java @@ -11,15 +11,15 @@ import org.joml.FrustumIntersection; import org.joml.Quaternionf; +import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.config.api.ProximityConfig; +import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.config.OrebfuscatorConfig; -import net.imprex.orebfuscator.config.ProximityConfig; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerChunk; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; -import net.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.FastGazeUtil; import net.imprex.orebfuscator.util.PermissionUtil; diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/AbstractHttpService.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/AbstractHttpService.java index 60b999218..e64218540 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/AbstractHttpService.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/AbstractHttpService.java @@ -16,6 +16,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import dev.imprex.orebfuscator.util.Version; import net.imprex.orebfuscator.Orebfuscator; public abstract class AbstractHttpService { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java index d5bdcd310..a9213bc00 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java @@ -7,6 +7,8 @@ import org.bukkit.ChatColor; +import dev.imprex.orebfuscator.logging.OfcLogger; + public final class ConsoleUtil { private static final int BOX_PADDING = 3; @@ -24,7 +26,7 @@ public static String replaceAnsiColorWithChatColor(String value) { public static void printBox(Level level, String...lines) { for (String line : createBox(lines)) { - OFCLogger.log(level, line); + OfcLogger.log(level, line); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java index 7b1afc110..423dee362 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java @@ -3,6 +3,7 @@ import org.bukkit.Location; import org.bukkit.World; +import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.OrebfuscatorNms; public class FastGazeUtil { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/HeightAccessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/HeightAccessor.java index b97331e3e..9a7eedb91 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/HeightAccessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/HeightAccessor.java @@ -13,6 +13,7 @@ import com.comphenix.protocol.reflect.accessors.Accessors; import com.comphenix.protocol.reflect.accessors.MethodAccessor; +import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.chunk.ChunkCapabilities; public class HeightAccessor { @@ -32,7 +33,7 @@ private static MethodAccessor getWorldMethod(String methodName) { if (methodAccessor == null) { throw new RuntimeException("unable to find method: World::" + methodName + "()"); } - OFCLogger.debug("HeightAccessor found method: World::" + methodName + "()"); + OfcLogger.debug("HeightAccessor found method: World::" + methodName + "()"); return methodAccessor; } return null; diff --git a/orebfuscator-plugin/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java b/orebfuscator-plugin/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java index 9a9b5f665..d65845b41 100644 --- a/orebfuscator-plugin/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java +++ b/orebfuscator-plugin/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java @@ -6,6 +6,8 @@ import org.junit.jupiter.api.Test; +import dev.imprex.orebfuscator.config.ProximityHeightCondition; + public class ProximityHeightConditionTest { private static final int TEST_MIN = ProximityHeightCondition.clampY(-0xFFF); diff --git a/pom.xml b/pom.xml index eb4cdfd28..a9c2f82ee 100644 --- a/pom.xml +++ b/pom.xml @@ -25,17 +25,26 @@ 1.20.1-R0.1-SNAPSHOT 1.20.1-R0.1-SNAPSHOT 3.1.0 - 5.11.2 - 4.1.90.Final 5.3.0 + + + 4.1.90.Final + 33.4.8-jre + 2.13.1 + 2.4 1.10.8 1.8.0 - 3.13.0 + + 5.13.4 + 5.19.0 + 26.0.2 + + 3.14.0 3.6.0 - 3.5.1 - 1.6.0 - 2.0.3 + 3.5.3 + 1.7.2 + 2.0.4 UTF-8 @@ -58,6 +67,7 @@ orebfuscator-compatibility orebfuscator-nms orebfuscator-plugin + orebfuscator-core @@ -161,12 +171,25 @@ - + org.junit.jupiter junit-jupiter-engine ${dependency.junit.version} test + + org.mockito + mockito-core + ${dependency.mockito.version} + test + + + + org.jetbrains + annotations + ${dependency.jetannotations.version} + compile + From 9fd00aab13fc9bf458d578ff5259c443e02e43e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Fri, 22 Aug 2025 23:26:38 +0200 Subject: [PATCH 02/14] chore: rename files so git can track changes on manual merge --- .../OrebfuscatorCompatibility.java | 4 +-- .../compatibility/CompatibilityLayer.java | 4 +-- .../bukkit/BukkitChunkLoader.java | 8 +++--- .../bukkit/BukkitCompatibilityLayer.java | 4 +-- .../AbstractPaperCompatibilityLayer.java | 4 +-- .../cache/AbstractRegionFileCache.java | 10 +++---- .../config/OrebfuscatorCacheConfig.java | 4 +-- .../orebfuscator/config/api/CacheConfig.java | 4 +-- .../imprex/orebfuscator/util/BlockPos.java | 4 +-- ...{ChunkPosition.java => ChunkCacheKey.java} | 8 +++--- .../orebfuscator/util/ChunkDirection.java | 2 +- .../config/ProximityHeightConditionTest.java | 0 .../nms/v1_16_R1/RegionFileCache.java | 6 ++--- .../nms/v1_16_R2/RegionFileCache.java | 6 ++--- .../nms/v1_16_R3/RegionFileCache.java | 6 ++--- .../nms/v1_17_R1/RegionFileCache.java | 6 ++--- .../nms/v1_18_R1/RegionFileCache.java | 6 ++--- .../nms/v1_18_R2/RegionFileCache.java | 6 ++--- .../nms/v1_19_R1/RegionFileCache.java | 6 ++--- .../nms/v1_19_R2/RegionFileCache.java | 6 ++--- .../nms/v1_19_R3/RegionFileCache.java | 6 ++--- .../nms/v1_20_R1/RegionFileCache.java | 6 ++--- .../nms/v1_20_R2/RegionFileCache.java | 6 ++--- .../nms/v1_20_R3/RegionFileCache.java | 6 ++--- .../nms/v1_20_R4/RegionFileCache.java | 6 ++--- .../nms/v1_21_R1/RegionFileCache.java | 6 ++--- .../nms/v1_21_R2/RegionFileCache.java | 6 ++--- .../nms/v1_21_R3/RegionFileCache.java | 6 ++--- .../nms/v1_21_R4/RegionFileCache.java | 6 ++--- .../nms/v1_21_R5/RegionFileCache.java | 6 ++--- .../net/imprex/orebfuscator/Orebfuscator.java | 4 +-- .../orebfuscator/OrebfuscatorCommand.java | 4 +-- .../cache/AsyncChunkSerializer.java | 26 +++++++++---------- ...cationResult.java => CacheChunkEntry.java} | 12 ++++----- .../orebfuscator/cache/ChunkSerializer.java | 12 ++++----- .../orebfuscator/cache/ObfuscationCache.java | 14 +++++----- .../net/imprex/orebfuscator/chunk/Chunk.java | 8 +++--- .../orebfuscator/chunk/ChunkStruct.java | 4 +-- .../BukkitWorldAccessor.java} | 12 ++++----- .../obfuscation/DeobfuscationWorker.java | 6 ++--- .../obfuscation/ObfuscationProcessor.java | 4 +-- .../obfuscation/ObfuscationRequest.java | 10 +++---- .../obfuscation/ObfuscationResult.java | 10 +++---- .../obfuscation/ObfuscationTask.java | 4 +-- .../player/OrebfuscatorPlayer.java | 8 +++--- 45 files changed, 151 insertions(+), 151 deletions(-) rename orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/{ChunkPosition.java => ChunkCacheKey.java} (83%) rename {orebfuscator-plugin => orebfuscator-core}/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java (100%) rename orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/{CompressedObfuscationResult.java => CacheChunkEntry.java} (90%) rename orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/{util/HeightAccessor.java => iterop/BukkitWorldAccessor.java} (89%) diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java index 59f9ccbcd..f82f0b07b 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java @@ -9,7 +9,7 @@ import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.logging.OfcLogger; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; import net.imprex.orebfuscator.nms.ReadOnlyChunk; import net.imprex.orebfuscator.util.MinecraftVersion; @@ -65,7 +65,7 @@ public static void cancelTasks() { instance.getScheduler().cancelTasks(); } - public static CompletableFuture getNeighboringChunks(World world, ChunkPosition position) { + public static CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position) { return instance.getNeighboringChunks(world, position); } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java index 9a84f509b..a49bc64be 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java @@ -4,7 +4,7 @@ import org.bukkit.World; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.nms.ReadOnlyChunk; public interface CompatibilityLayer { @@ -13,5 +13,5 @@ public interface CompatibilityLayer { CompatibilityScheduler getScheduler(); - CompletableFuture getNeighboringChunks(World world, ChunkPosition position); + CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position); } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java index 3f2e9b49b..e3719004f 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java @@ -11,7 +11,7 @@ import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.ChunkDirection; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -27,7 +27,7 @@ public BukkitChunkLoader(Plugin plugin, Config config) { Bukkit.getScheduler().runTaskTimer(plugin, this, 0, 1); } - public CompletableFuture submitRequest(World world, ChunkPosition chunkPosition) { + public CompletableFuture submitRequest(World world, ChunkCacheKey chunkPosition) { Request request = new Request(world, chunkPosition); this.requests.offer(request); return request.future; @@ -46,11 +46,11 @@ public void run() { private class Request implements Runnable { private final World world; - private final ChunkPosition position; + private final ChunkCacheKey position; private final CompletableFuture future = new CompletableFuture<>(); - public Request(World world, ChunkPosition position) { + public Request(World world, ChunkCacheKey position) { this.world = world; this.position = position; } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java index 1e8810936..fe790d7bc 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java @@ -6,7 +6,7 @@ import org.bukkit.plugin.Plugin; import dev.imprex.orebfuscator.config.api.Config; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; import net.imprex.orebfuscator.compatibility.CompatibilityScheduler; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -34,7 +34,7 @@ public CompatibilityScheduler getScheduler() { } @Override - public CompletableFuture getNeighboringChunks(World world, ChunkPosition position) { + public CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position) { return this.chunkLoader.submitRequest(world, position); } } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java index 51918442b..c000d5124 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java @@ -5,7 +5,7 @@ import org.bukkit.World; import dev.imprex.orebfuscator.util.ChunkDirection; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -13,7 +13,7 @@ public abstract class AbstractPaperCompatibilityLayer implements CompatibilityLayer { @Override - public CompletableFuture getNeighboringChunks(World world, ChunkPosition position) { + public CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position) { CompletableFuture[] futures = new CompletableFuture[4]; ReadOnlyChunk[] neighboringChunks = new ReadOnlyChunk[4]; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java index ecaa7f45a..c6c35132e 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java @@ -11,7 +11,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import dev.imprex.orebfuscator.util.SimpleCache; public abstract class AbstractRegionFileCache { @@ -31,16 +31,16 @@ public AbstractRegionFileCache(CacheConfig cacheConfig) { protected abstract void closeRegionFile(T t) throws IOException; - protected abstract DataInputStream createInputStream(T t, ChunkPosition key) throws IOException; + protected abstract DataInputStream createInputStream(T t, ChunkCacheKey key) throws IOException; - protected abstract DataOutputStream createOutputStream(T t, ChunkPosition key) throws IOException; + protected abstract DataOutputStream createOutputStream(T t, ChunkCacheKey key) throws IOException; - public final DataInputStream createInputStream(ChunkPosition key) throws IOException { + public final DataInputStream createInputStream(ChunkCacheKey key) throws IOException { T t = this.get(this.cacheConfig.regionFile(key)); return t != null ? this.createInputStream(t, key) : null; } - public final DataOutputStream createOutputStream(ChunkPosition key) throws IOException { + public final DataOutputStream createOutputStream(ChunkCacheKey key) throws IOException { T t = this.get(this.cacheConfig.regionFile(key)); return t != null ? this.createOutputStream(t, key) : null; } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java index 204883d03..971f2d02e 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java @@ -13,7 +13,7 @@ import dev.imprex.orebfuscator.config.api.CacheConfig; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.logging.OfcLogger; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; public class OrebfuscatorCacheConfig implements CacheConfig { @@ -137,7 +137,7 @@ public Path baseDirectory() { } @Override - public Path regionFile(ChunkPosition key) { + public Path regionFile(ChunkCacheKey key) { return this.baseDirectory.resolve(key.world) .resolve("r." + (key.x >> 5) + "." + (key.z >> 5) + ".mca"); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java index 51089d9c8..f7be27ca0 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java @@ -2,7 +2,7 @@ import java.nio.file.Path; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; public interface CacheConfig { @@ -16,7 +16,7 @@ public interface CacheConfig { Path baseDirectory(); - Path regionFile(ChunkPosition chunkPosition); + Path regionFile(ChunkCacheKey chunkPosition); int maximumOpenRegionFiles(); diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java index 455e12df8..e18c1cce6 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java @@ -43,8 +43,8 @@ public double distanceSquared(double x, double y, double z) { return dx * dx + dy * dy + dz * dz; } - public ChunkPosition toChunkPosition(World world) { - return new ChunkPosition(world, this.x >> 4, this.z >> 4); + public ChunkCacheKey toChunkPosition(World world) { + return new ChunkCacheKey(world, this.x >> 4, this.z >> 4); } public long toLong() { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkPosition.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkCacheKey.java similarity index 83% rename from orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkPosition.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkCacheKey.java index 6cab02e0d..f68edf3e0 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkPosition.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkCacheKey.java @@ -4,7 +4,7 @@ import org.bukkit.World; -public class ChunkPosition { +public class ChunkCacheKey { public static long toLong(int chunkX, int chunkZ) { return (chunkZ & 0xffffffffL) << 32 | chunkX & 0xffffffffL; @@ -14,7 +14,7 @@ public static long toLong(int chunkX, int chunkZ) { public final int x; public final int z; - public ChunkPosition(World world, int x, int z) { + public ChunkCacheKey(World world, int x, int z) { this.world = Objects.requireNonNull(world).getName(); this.x = x; this.z = z; @@ -34,10 +34,10 @@ public boolean equals(Object obj) { if (this == obj) { return true; } - if (!(obj instanceof ChunkPosition)) { + if (!(obj instanceof ChunkCacheKey)) { return false; } - ChunkPosition other = (ChunkPosition) obj; + ChunkCacheKey other = (ChunkCacheKey) obj; return x == other.x && z == other.z && Objects.equals(world, other.world); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java index c447a8507..1d49f28ad 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java @@ -20,7 +20,7 @@ public int getOffsetZ() { return offsetZ; } - public static ChunkDirection fromPosition(ChunkPosition position, int targetX, int targetZ) { + public static ChunkDirection fromPosition(ChunkCacheKey position, int targetX, int targetZ) { int offsetX = (targetX >> 4) - position.x; int offsetZ = (targetZ >> 4) - position.z; diff --git a/orebfuscator-plugin/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java b/orebfuscator-core/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java similarity index 100% rename from orebfuscator-plugin/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java rename to orebfuscator-core/src/test/java/net/imprex/orebfuscator/config/ProximityHeightConditionTest.java diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java index 03b02e824..b58f6256a 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.server.v1_16_R1.ChunkCoordIntPair; import net.minecraft.server.v1_16_R1.RegionFile; import net.minecraft.server.v1_16_R1.RegionFileCompression; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.a(new ChunkCoordIntPair(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.c(new ChunkCoordIntPair(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java index 2e2ca0533..7ebfba2c7 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.server.v1_16_R2.ChunkCoordIntPair; import net.minecraft.server.v1_16_R2.RegionFile; import net.minecraft.server.v1_16_R2.RegionFileCompression; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.a(new ChunkCoordIntPair(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.c(new ChunkCoordIntPair(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java index ff68e7cc1..dc578c7ab 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.server.v1_16_R3.ChunkCoordIntPair; import net.minecraft.server.v1_16_R3.RegionFile; import net.minecraft.server.v1_16_R3.RegionFileCompression; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.a(new ChunkCoordIntPair(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.c(new ChunkCoordIntPair(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java index 2d8bc1ae9..a39db468c 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java index 6043f09ce..12d9a4693 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java index 650775214..753fd2739 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java index 5041ff6e7..b930dd43f 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java index a4ae0d41e..6f065db36 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java index 9ca3d6751..6834a6294 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java index 222d19431..43d22dcdc 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java index b822d6919..6d8550703 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java index d294db7ea..adea65215 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java index 40864aa59..52371707a 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java index a4ec85d52..b864f8b13 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java index 47dabddac..182c9305f 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java index de45f3402..6bf360550 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java index 61d63b77c..46766ba05 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java index 23490c348..59f688bf8 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/RegionFileCache.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.storage.RegionFile; import net.minecraft.world.level.chunk.storage.RegionFileVersion; @@ -33,12 +33,12 @@ protected void closeRegionFile(RegionFile t) throws IOException { } @Override - protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataInputStream createInputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataInputStream(new ChunkPos(key.x, key.z)); } @Override - protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + protected DataOutputStream createOutputStream(RegionFile t, ChunkCacheKey key) throws IOException { return t.getChunkDataOutputStream(new ChunkPos(key.x, key.z)); } } \ No newline at end of file diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java index ac5f7eb22..5ec0facec 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java @@ -14,11 +14,11 @@ import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.api.OrebfuscatorService; import net.imprex.orebfuscator.cache.ObfuscationCache; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.obfuscation.ObfuscationSystem; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; import net.imprex.orebfuscator.proximity.ProximityDirectorThread; import net.imprex.orebfuscator.proximity.ProximityPacketListener; -import net.imprex.orebfuscator.util.HeightAccessor; import net.imprex.orebfuscator.util.MinecraftVersion; public class Orebfuscator extends JavaPlugin implements Listener { @@ -61,7 +61,7 @@ public void onEnable() { this.playerMap = new OrebfuscatorPlayerMap(this); // register cleanup listener - HeightAccessor.registerListener(this); + BukkitWorldAccessor.registerListener(this); // Initialize metrics new MetricsSystem(this); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java index 55b8fb749..071f3f5e7 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java @@ -31,7 +31,7 @@ import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.JavaVersion; -import net.imprex.orebfuscator.util.HeightAccessor; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.util.MinecraftVersion; import net.imprex.orebfuscator.util.PermissionUtil; @@ -94,7 +94,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St for (World bukkitWorld : Bukkit.getWorlds()) { JsonObject world = new JsonObject(); world.addProperty("uuid", bukkitWorld.getUID().toString()); - world.addProperty("heightAccessor", HeightAccessor.get(bukkitWorld).toString()); + world.addProperty("heightAccessor", BukkitWorldAccessor.get(bukkitWorld).toString()); worlds.add(bukkitWorld.getName(), world); } root.add("worlds", worlds); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java index cddf0e49f..26f1f8898 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java @@ -10,7 +10,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; /** @@ -30,8 +30,8 @@ public class AsyncChunkSerializer implements Runnable { private final Condition notFull = lock.newCondition(); private final Condition notEmpty = lock.newCondition(); - private final Map tasks = new HashMap<>(); - private final Queue positions = new LinkedList<>(); + private final Map tasks = new HashMap<>(); + private final Queue positions = new LinkedList<>(); private final int maxTaskQueueSize; private final Thread thread; @@ -47,7 +47,7 @@ public AsyncChunkSerializer(Orebfuscator orebfuscator) { orebfuscator.getStatistics().setDiskCacheQueueLengthSupplier(() -> this.tasks.size()); } - public CompletableFuture read(ChunkPosition position) { + public CompletableFuture read(ChunkCacheKey position) { this.lock.lock(); try { Runnable task = this.tasks.get(position); @@ -56,7 +56,7 @@ public CompletableFuture read(ChunkPosition positio } else if (task instanceof ReadTask) { return ((ReadTask) task).future; } else { - CompletableFuture future = new CompletableFuture<>(); + CompletableFuture future = new CompletableFuture<>(); this.queueTask(position, new ReadTask(position, future)); return future; } @@ -65,7 +65,7 @@ public CompletableFuture read(ChunkPosition positio } } - public void write(ChunkPosition position, CompressedObfuscationResult chunk) { + public void write(ChunkCacheKey position, CacheChunkEntry chunk) { this.lock.lock(); try { Runnable prevTask = this.queueTask(position, new WriteTask(position, chunk)); @@ -77,7 +77,7 @@ public void write(ChunkPosition position, CompressedObfuscationResult chunk) { } } - private Runnable queueTask(ChunkPosition position, Runnable nextTask) { + private Runnable queueTask(ChunkCacheKey position, Runnable nextTask) { while (this.positions.size() >= this.maxTaskQueueSize) { this.notFull.awaitUninterruptibly(); } @@ -133,10 +133,10 @@ public void close() { } private class WriteTask implements Runnable { - private final ChunkPosition position; - private final CompressedObfuscationResult chunk; + private final ChunkCacheKey position; + private final CacheChunkEntry chunk; - public WriteTask(ChunkPosition position, CompressedObfuscationResult chunk) { + public WriteTask(ChunkCacheKey position, CacheChunkEntry chunk) { this.position = position; this.chunk = chunk; } @@ -152,10 +152,10 @@ public void run() { } private class ReadTask implements Runnable { - private final ChunkPosition position; - private final CompletableFuture future; + private final ChunkCacheKey position; + private final CompletableFuture future; - public ReadTask(ChunkPosition position, CompletableFuture future) { + public ReadTask(ChunkCacheKey position, CompletableFuture future) { this.position = position; this.future = future; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CompressedObfuscationResult.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheChunkEntry.java similarity index 90% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CompressedObfuscationResult.java rename to orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheChunkEntry.java index c3f474dee..bfdec71c8 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CompressedObfuscationResult.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheChunkEntry.java @@ -10,15 +10,15 @@ import java.util.Optional; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.obfuscation.ObfuscationRequest; import net.imprex.orebfuscator.obfuscation.ObfuscationResult; import net.jpountz.lz4.LZ4BlockInputStream; import net.jpountz.lz4.LZ4BlockOutputStream; -public class CompressedObfuscationResult { +public class CacheChunkEntry { - public static CompressedObfuscationResult create(ObfuscationResult result) { + public static CacheChunkEntry create(ObfuscationResult result) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try ( @@ -47,13 +47,13 @@ public static CompressedObfuscationResult create(ObfuscationResult result) { return null; } - return new CompressedObfuscationResult(result.getPosition(), byteArrayOutputStream.toByteArray()); + return new CacheChunkEntry(result.getPosition(), byteArrayOutputStream.toByteArray()); } - private final ChunkPosition position; + private final ChunkCacheKey position; private final byte[] compressedData; - public CompressedObfuscationResult(ChunkPosition position, byte[] data) { + public CacheChunkEntry(ChunkCacheKey position, byte[] data) { this.position = position; this.compressedData = data; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java index 9a3b80eec..5f248e74b 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java @@ -4,22 +4,22 @@ import java.io.DataOutputStream; import java.io.IOException; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.OrebfuscatorNms; public class ChunkSerializer { private static final int CACHE_VERSION = 2; - private static DataInputStream createInputStream(ChunkPosition key) throws IOException { + private static DataInputStream createInputStream(ChunkCacheKey key) throws IOException { return OrebfuscatorNms.getRegionFileCache().createInputStream(key); } - private static DataOutputStream createOutputStream(ChunkPosition key) throws IOException { + private static DataOutputStream createOutputStream(ChunkCacheKey key) throws IOException { return OrebfuscatorNms.getRegionFileCache().createOutputStream(key); } - public static CompressedObfuscationResult read(ChunkPosition key) throws IOException { + public static CacheChunkEntry read(ChunkCacheKey key) throws IOException { try (DataInputStream dataInputStream = createInputStream(key)) { if (dataInputStream != null) { // check if cache entry has right version and if chunk is present @@ -30,7 +30,7 @@ public static CompressedObfuscationResult read(ChunkPosition key) throws IOExcep byte[] compressedData = new byte[dataInputStream.readInt()]; dataInputStream.readFully(compressedData); - return new CompressedObfuscationResult(key, compressedData); + return new CacheChunkEntry(key, compressedData); } } catch (IOException e) { throw new IOException("Unable to read chunk: " + key, e); @@ -39,7 +39,7 @@ public static CompressedObfuscationResult read(ChunkPosition key) throws IOExcep return null; } - public static void write(ChunkPosition key, CompressedObfuscationResult value) throws IOException { + public static void write(ChunkCacheKey key, CacheChunkEntry value) throws IOException { try (DataOutputStream dataOutputStream = createOutputStream(key)) { dataOutputStream.writeInt(CACHE_VERSION); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java index 31727c265..5638b62f7 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java @@ -8,7 +8,7 @@ import com.google.common.cache.RemovalNotification; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.OrebfuscatorStatistics; @@ -20,7 +20,7 @@ public class ObfuscationCache { private final CacheConfig cacheConfig; private final OrebfuscatorStatistics statistics; - private final Cache cache; + private final Cache cache; private final AsyncChunkSerializer serializer; public ObfuscationCache(Orebfuscator orebfuscator) { @@ -45,7 +45,7 @@ public ObfuscationCache(Orebfuscator orebfuscator) { } } - private void onRemoval(RemovalNotification notification) { + private void onRemoval(RemovalNotification notification) { this.statistics.onCacheSizeChange(-notification.getValue().estimatedSize()); // don't serialize invalidated chunks since this would require locking the main @@ -57,7 +57,7 @@ private void onRemoval(RemovalNotification { - var compressedChunk = CompressedObfuscationResult.create(chunk); + var compressedChunk = CacheChunkEntry.create(chunk); if (compressedChunk != null) { this.cache.put(request.getPosition(), compressedChunk); this.statistics.onCacheSizeChange(compressedChunk.estimatedSize()); @@ -66,9 +66,9 @@ private void requestObfuscation(ObfuscationRequest request) { } public CompletableFuture get(ObfuscationRequest request) { - ChunkPosition key = request.getPosition(); + ChunkCacheKey key = request.getPosition(); - CompressedObfuscationResult cacheChunk = this.cache.getIfPresent(key); + CacheChunkEntry cacheChunk = this.cache.getIfPresent(key); if (cacheChunk != null && cacheChunk.isValid(request)) { this.statistics.onCacheHitMemory(); @@ -114,7 +114,7 @@ else if (cacheChunk == null && this.cacheConfig.enableDiskCache()) { return request.getFuture(); } - public void invalidate(ChunkPosition key) { + public void invalidate(ChunkCacheKey key) { this.cache.invalidate(key); } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java index f712a3025..b313f06bd 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java @@ -5,7 +5,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import net.imprex.orebfuscator.util.HeightAccessor; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; public class Chunk implements AutoCloseable { @@ -16,7 +16,7 @@ public static Chunk fromChunkStruct(ChunkStruct chunkStruct) { private final int chunkX; private final int chunkZ; - private final HeightAccessor heightAccessor; + private final BukkitWorldAccessor heightAccessor; private final ChunkSectionHolder[] sections; private final ByteBuf inputBuffer; @@ -26,7 +26,7 @@ private Chunk(ChunkStruct chunkStruct) { this.chunkX = chunkStruct.chunkX; this.chunkZ = chunkStruct.chunkZ; - this.heightAccessor = HeightAccessor.get(chunkStruct.world); + this.heightAccessor = BukkitWorldAccessor.get(chunkStruct.world); this.sections = new ChunkSectionHolder[this.heightAccessor.getSectionCount()]; this.inputBuffer = Unpooled.wrappedBuffer(chunkStruct.data); @@ -43,7 +43,7 @@ public int getSectionCount() { return this.sections.length; } - public HeightAccessor getHeightAccessor() { + public BukkitWorldAccessor getHeightAccessor() { return heightAccessor; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java index e795d1eea..1d6c0153d 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java @@ -13,7 +13,7 @@ import com.comphenix.protocol.wrappers.nbt.NbtCompound; import dev.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.util.HeightAccessor; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; public class ChunkStruct { @@ -53,7 +53,7 @@ public ChunkStruct(PacketContainer packet, World world) { } } else { this.sectionMask = new BitSet(); - this.sectionMask.set(0, HeightAccessor.get(world).getSectionCount()); + this.sectionMask.set(0, BukkitWorldAccessor.get(world).getSectionCount()); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/HeightAccessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java similarity index 89% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/HeightAccessor.java rename to orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java index 9a7eedb91..6ca18ea8e 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/HeightAccessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.util; +package net.imprex.orebfuscator.iterop; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -16,12 +16,12 @@ import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.chunk.ChunkCapabilities; -public class HeightAccessor { +public class BukkitWorldAccessor { - private static final Map ACCESSOR_LOOKUP = new ConcurrentHashMap<>(); + private static final Map ACCESSOR_LOOKUP = new ConcurrentHashMap<>(); - public static HeightAccessor get(World world) { - return ACCESSOR_LOOKUP.computeIfAbsent(world, HeightAccessor::new); + public static BukkitWorldAccessor get(World world) { + return ACCESSOR_LOOKUP.computeIfAbsent(world, BukkitWorldAccessor::new); } private static final MethodAccessor WORLD_GET_MAX_HEIGHT = getWorldMethod("getMaxHeight"); @@ -71,7 +71,7 @@ public void onWorldUnload(WorldUnloadEvent event) { private final int maxHeight; private final int minHeight; - private HeightAccessor(World world) { + private BukkitWorldAccessor(World world) { this.worldName = world.getName(); if (ChunkCapabilities.hasDynamicHeight()) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java index d6aa9efb4..6ef36ff2b 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java @@ -15,7 +15,7 @@ import dev.imprex.orebfuscator.config.api.ObfuscationConfig; import dev.imprex.orebfuscator.config.api.WorldConfigBundle; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.cache.ObfuscationCache; @@ -67,7 +67,7 @@ public void deobfuscate(Collection blocks, boolean occluding) { public class Processor implements AutoCloseable { private final Set updatedBlocks = new HashSet<>(); - private final Set invalidChunks = new HashSet<>(); + private final Set invalidChunks = new HashSet<>(); private final World world; private final BlockFlags blockFlags; @@ -83,7 +83,7 @@ public void processPosition(BlockPos position, int depth) { // invalidate cache if enabled if (config.cache().enabled()) { - ChunkPosition chunkPosition = position.toChunkPosition(world); + ChunkCacheKey chunkPosition = position.toChunkPosition(world); if (this.invalidChunks.add(chunkPosition)) { cache.invalidate(chunkPosition); } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java index abc618361..7d6b98105 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java @@ -19,7 +19,7 @@ import net.imprex.orebfuscator.chunk.Chunk; import net.imprex.orebfuscator.chunk.ChunkSection; import net.imprex.orebfuscator.chunk.ChunkStruct; -import net.imprex.orebfuscator.util.HeightAccessor; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; public class ObfuscationProcessor { @@ -33,7 +33,7 @@ public void process(ObfuscationTask task) { ChunkStruct chunkStruct = task.getChunkStruct(); World world = chunkStruct.world; - HeightAccessor heightAccessor = HeightAccessor.get(world); + BukkitWorldAccessor heightAccessor = BukkitWorldAccessor.get(world); WorldConfigBundle bundle = this.config.world(world); BlockFlags blockFlags = bundle.blockFlags(); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java index 6acd43409..77c945122 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java @@ -9,7 +9,7 @@ import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.chunk.ChunkStruct; public class ObfuscationRequest { @@ -25,7 +25,7 @@ private static final byte[] hash(byte[] systemHash, byte[] data) { public static ObfuscationRequest fromChunk(ChunkStruct struct, OrebfuscatorConfig config, ObfuscationTaskDispatcher dispatcher) { - ChunkPosition position = new ChunkPosition(struct.world, struct.chunkX, struct.chunkZ); + ChunkCacheKey position = new ChunkCacheKey(struct.world, struct.chunkX, struct.chunkZ); byte[] hash = config.cache().enabled() ? hash(config.systemHash(), struct.data) : EMPTY_HASH; return new ObfuscationRequest(dispatcher, position, hash, struct); } @@ -33,11 +33,11 @@ public static ObfuscationRequest fromChunk(ChunkStruct struct, OrebfuscatorConfi private final CompletableFuture future = new CompletableFuture<>(); private final ObfuscationTaskDispatcher dispatcher; - private final ChunkPosition position; + private final ChunkCacheKey position; private final byte[] chunkHash; private final ChunkStruct chunkStruct; - private ObfuscationRequest(ObfuscationTaskDispatcher dispatcher, ChunkPosition position, byte[] chunkHash, + private ObfuscationRequest(ObfuscationTaskDispatcher dispatcher, ChunkCacheKey position, byte[] chunkHash, ChunkStruct chunkStruct) { this.dispatcher = dispatcher; this.position = position; @@ -49,7 +49,7 @@ public CompletableFuture getFuture() { return future; } - public ChunkPosition getPosition() { + public ChunkCacheKey getPosition() { return position; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java index 03ec904d2..0a48758e7 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java @@ -6,11 +6,11 @@ import java.util.Set; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; public class ObfuscationResult { - private final ChunkPosition position; + private final ChunkCacheKey position; private final byte[] hash; private final byte[] data; @@ -18,11 +18,11 @@ public class ObfuscationResult { private final Set blockEntities; private final List proximityBlocks; - public ObfuscationResult(ChunkPosition position, byte[] hash, byte[] data) { + public ObfuscationResult(ChunkCacheKey position, byte[] hash, byte[] data) { this(position, hash, data, new HashSet<>(), new ArrayList<>()); } - public ObfuscationResult(ChunkPosition position, byte[] hash, byte[] data, + public ObfuscationResult(ChunkCacheKey position, byte[] hash, byte[] data, Set blockEntities, List proximityBlocks) { this.position = position; this.hash = hash; @@ -31,7 +31,7 @@ public ObfuscationResult(ChunkPosition position, byte[] hash, byte[] data, this.proximityBlocks = proximityBlocks; } - public ChunkPosition getPosition() { + public ChunkCacheKey getPosition() { return position; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java index a0ff136d2..4f662c243 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java @@ -8,7 +8,7 @@ import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.ChunkDirection; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.chunk.ChunkStruct; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -17,7 +17,7 @@ public class ObfuscationTask { public static CompletableFuture fromRequest(ObfuscationRequest request) { World world = request.getChunkStruct().world; - ChunkPosition position = request.getPosition(); + ChunkCacheKey position = request.getPosition(); return OrebfuscatorCompatibility.getNeighboringChunks(world, position) .thenApply(chunks -> new ObfuscationTask(request, chunks)); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java index 076a0d590..6e4bf6f74 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java @@ -13,7 +13,7 @@ import dev.imprex.orebfuscator.config.api.AdvancedConfig; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.ChunkPosition; +import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; public class OrebfuscatorPlayer { @@ -112,15 +112,15 @@ void updateWorld() { } public void addChunk(int chunkX, int chunkZ, List blocks) { - this.chunks.put(ChunkPosition.toLong(chunkX, chunkZ), + this.chunks.put(ChunkCacheKey.toLong(chunkX, chunkZ), new OrebfuscatorPlayerChunk(chunkX, chunkZ, blocks)); } public OrebfuscatorPlayerChunk getChunk(int chunkX, int chunkZ) { - return this.chunks.get(ChunkPosition.toLong(chunkX, chunkZ)); + return this.chunks.get(ChunkCacheKey.toLong(chunkX, chunkZ)); } public void removeChunk(int chunkX, int chunkZ) { - this.chunks.remove(ChunkPosition.toLong(chunkX, chunkZ)); + this.chunks.remove(ChunkCacheKey.toLong(chunkX, chunkZ)); } } From abde7571b9638b04e65cebde7b143470bb776347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Fri, 22 Aug 2025 23:59:30 +0200 Subject: [PATCH 03/14] merge: orebfuscator-next to platform-independent-core --- .../OrebfuscatorCompatibility.java | 4 +- .../compatibility/CompatibilityLayer.java | 2 +- .../bukkit/BukkitChunkLoader.java | 16 +- .../bukkit/BukkitCompatibilityLayer.java | 4 +- .../AbstractPaperCompatibilityLayer.java | 8 +- orebfuscator-core/pom.xml | 6 - .../cache/AbstractRegionFileCache.java | 2 +- .../config/AbstractWorldConfig.java | 237 +++--- .../orebfuscator/config/BlockParser.java | 102 +++ .../config/OrebfuscatorAdvancedConfig.java | 252 +++--- .../config/OrebfuscatorBlockFlags.java | 134 +-- .../config/OrebfuscatorCacheConfig.java | 292 +++---- .../config/OrebfuscatorConfig.java | 801 +++++++++--------- .../config/OrebfuscatorGeneralConfig.java | 99 ++- .../config/OrebfuscatorObfuscationConfig.java | 126 ++- .../config/OrebfuscatorProximityConfig.java | 365 ++++---- .../config/ProximityHeightCondition.java | 71 +- .../config/api/AdvancedConfig.java | 18 +- .../orebfuscator/config/api/BlockFlags.java | 56 +- .../orebfuscator/config/api/CacheConfig.java | 21 +- .../orebfuscator/config/api/Config.java | 16 +- .../config/api/GeneralConfig.java | 12 +- .../config/api/ObfuscationConfig.java | 6 +- .../config/api/ProximityConfig.java | 16 +- .../orebfuscator/config/api/WorldConfig.java | 10 +- .../config/api/WorldConfigBundle.java | 22 +- .../config/components/ConfigBlockValue.java | 25 + .../config/components/WeightedBlockList.java | 169 ++-- .../config/components/WorldMatcher.java | 87 +- .../config/context/ConfigMessage.java | 56 ++ .../config/context/ConfigParsingContext.java | 192 +++-- .../context/DefaultConfigParsingContext.java | 300 +++---- .../config/migrations/ConfigMigration.java | 33 +- .../config/migrations/ConfigMigrationV1.java | 93 +- .../config/migrations/ConfigMigrationV2.java | 70 +- .../config/migrations/ConfigMigrationV3.java | 161 ++-- .../config/migrations/ConfigMigrator.java | 54 +- .../config/yaml/ConfigurationSection.java | 306 +++++++ .../yaml/InvalidConfigurationException.java | 22 + .../config/yaml/NodeCommentData.java | 111 +++ .../config/yaml/YamlConfiguration.java | 198 +++++ .../config/yaml/YamlConstructor.java | 23 + .../config/yaml/package-info.java | 15 + .../interop/RegistryAccessor.java | 25 + .../orebfuscator/interop/ServerAccessor.java | 24 + .../orebfuscator/interop/WorldAccessor.java | 20 + .../imprex/orebfuscator/logging/LogLevel.java | 5 + .../orebfuscator/logging/LoggerAccessor.java | 10 + .../orebfuscator/logging/OfcLogger.java | 162 ++-- .../orebfuscator/logging/SystemLogger.java | 19 + .../orebfuscator/reflect/Reflector.java | 103 +++ .../reflect/accessor/Accessors.java | 107 +++ .../reflect/accessor/ConstructorAccessor.java | 9 + .../accessor/DefaultConstrutorAccessor.java | 23 + .../accessor/DefaultFieldAccessor.java | 41 + .../accessor/DefaultMethodAccessor.java | 22 + .../reflect/accessor/FieldAccessor.java | 13 + .../reflect/accessor/MemberAccessor.java | 10 + .../reflect/accessor/MethodAccessor.java | 9 + .../AbstractExecutablePredicate.java | 148 ++++ .../predicate/AbstractMemberPredicate.java | 192 +++++ .../reflect/predicate/ClassPredicate.java | 192 +++++ .../predicate/ConstructorPredicate.java | 25 + .../reflect/predicate/FieldPredicate.java | 50 ++ .../reflect/predicate/MethodPredicate.java | 50 ++ .../predicate/RequirementCollector.java | 35 + .../imprex/orebfuscator/util/BlockPos.java | 6 - .../orebfuscator/util/BlockProperties.java | 1 - .../imprex/orebfuscator/util/BlockTag.java | 35 + .../orebfuscator/util/ChunkCacheKey.java | 49 +- .../orebfuscator/util/ChunkDirection.java | 8 +- .../orebfuscator/util/NamespacedKey.java | 86 +- .../dev/imprex/orebfuscator/util/Version.java | 1 - .../imprex/orebfuscator/DummyException.java | 27 + .../config/ProximityHeightConditionTest.java | 5 +- .../config/context/ConfigMessageTest.java | 20 + .../DefaultConfigParsingContextTest.java | 159 ++++ .../config/yaml/ConfigurationSectionTest.java | 471 ++++++++++ .../config/yaml/YamlConfigurationTest.java | 104 +++ .../orebfuscator/reflect/ReflectorTest.java | 85 ++ .../accessor/ConstructorAccessorTest.java | 58 ++ .../reflect/accessor/FieldAccessorTest.java | 87 ++ .../reflect/accessor/MethodAccessorTest.java | 91 ++ .../orebfuscator/reflect/dummy/Entity.java | 57 ++ .../imprex/orebfuscator/reflect/dummy/Id.java | 7 + .../orebfuscator/reflect/dummy/Player.java | 28 + .../AbstractExecutablePredicateTest.java | 75 ++ .../AbstractMemberPredicateTest.java | 158 ++++ .../reflect/predicate/ClassPredicateTest.java | 109 +++ .../reflect/predicate/FieldPredicateTest.java | 22 + .../predicate/MethodPredicateTest.java | 25 + .../resources/config/context-test-report.txt | 16 + .../test/resources/config/example-config.yml | 13 + orebfuscator-nms/orebfuscator-nms-api/pom.xml | 1 - .../imprex/orebfuscator/OrebfuscatorNms.java | 11 +- .../orebfuscator/nms/AbstractNmsManager.java | 12 +- .../imprex/orebfuscator/nms/NmsManager.java | 17 +- .../nms/v1_16_R1/RegionFileCache.java | 4 +- .../nms/v1_16_R2/RegionFileCache.java | 4 +- .../nms/v1_16_R3/RegionFileCache.java | 4 +- .../nms/v1_17_R1/RegionFileCache.java | 4 +- .../nms/v1_18_R1/RegionFileCache.java | 4 +- .../nms/v1_18_R2/RegionFileCache.java | 4 +- .../nms/v1_19_R1/RegionFileCache.java | 4 +- .../nms/v1_19_R2/RegionFileCache.java | 4 +- .../nms/v1_19_R3/RegionFileCache.java | 4 +- .../nms/v1_20_R1/RegionFileCache.java | 4 +- .../nms/v1_20_R2/RegionFileCache.java | 4 +- .../nms/v1_20_R3/RegionFileCache.java | 4 +- .../nms/v1_20_R4/RegionFileCache.java | 4 +- .../nms/v1_21_R1/RegionFileCache.java | 4 +- .../nms/v1_21_R2/RegionFileCache.java | 4 +- .../nms/v1_21_R3/RegionFileCache.java | 4 +- .../nms/v1_21_R4/RegionFileCache.java | 4 +- .../nms/v1_21_R5/RegionFileCache.java | 4 +- orebfuscator-plugin/pom.xml | 32 +- .../net/imprex/orebfuscator/Orebfuscator.java | 58 +- .../orebfuscator/OrebfuscatorCommand.java | 4 +- .../net/imprex/orebfuscator/UpdateSystem.java | 6 +- .../cache/AsyncChunkSerializer.java | 46 +- .../orebfuscator/cache/CacheChunkEntry.java | 18 +- .../cache/CacheFileCleanupTask.java | 2 +- .../orebfuscator/cache/ChunkSerializer.java | 21 +- .../orebfuscator/cache/ObfuscationCache.java | 13 +- .../net/imprex/orebfuscator/chunk/Chunk.java | 12 +- .../orebfuscator/chunk/ChunkStruct.java | 13 +- .../iterop/BukkitLoggerAccessor.java | 34 + .../iterop/BukkitWorldAccessor.java | 56 +- .../obfuscation/DeobfuscationWorker.java | 18 +- .../obfuscation/ObfuscationListener.java | 20 +- .../obfuscation/ObfuscationProcessor.java | 15 +- .../obfuscation/ObfuscationRequest.java | 22 +- .../obfuscation/ObfuscationResult.java | 14 +- .../obfuscation/ObfuscationTask.java | 10 +- .../player/OrebfuscatorPlayer.java | 11 +- .../proximity/ProximityDirectorThread.java | 2 +- .../proximity/ProximityPacketListener.java | 7 +- .../proximity/ProximityWorker.java | 5 +- .../imprex/orebfuscator/util/ConsoleUtil.java | 4 +- 139 files changed, 6044 insertions(+), 2222 deletions(-) create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigMessage.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSection.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/InvalidConfigurationException.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/NodeCommentData.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/YamlConfiguration.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/YamlConstructor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/package-info.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/RegistryAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ServerAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/WorldAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/LogLevel.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/LoggerAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/SystemLogger.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/Reflector.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/Accessors.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/ConstructorAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultConstrutorAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultMethodAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/FieldAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/MemberAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/MethodAccessor.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/AbstractExecutablePredicate.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/AbstractMemberPredicate.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/ClassPredicate.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/ConstructorPredicate.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/FieldPredicate.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/MethodPredicate.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/RequirementCollector.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/DummyException.java rename orebfuscator-core/src/test/java/{net => dev}/imprex/orebfuscator/config/ProximityHeightConditionTest.java (93%) create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/context/ConfigMessageTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/context/DefaultConfigParsingContextTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSectionTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/yaml/YamlConfigurationTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/ReflectorTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/ConstructorAccessorTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/FieldAccessorTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/MethodAccessorTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/dummy/Entity.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/dummy/Id.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/dummy/Player.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/predicate/AbstractExecutablePredicateTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/predicate/AbstractMemberPredicateTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/predicate/ClassPredicateTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/predicate/FieldPredicateTest.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/predicate/MethodPredicateTest.java create mode 100644 orebfuscator-core/src/test/resources/config/context-test-report.txt create mode 100644 orebfuscator-core/src/test/resources/config/example-config.yml create mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitLoggerAccessor.java diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java index f82f0b07b..2e3d41c36 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java @@ -65,8 +65,8 @@ public static void cancelTasks() { instance.getScheduler().cancelTasks(); } - public static CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position) { - return instance.getNeighboringChunks(world, position); + public static CompletableFuture getNeighboringChunks(World world, ChunkCacheKey key) { + return instance.getNeighboringChunks(world, key); } public static void close() { diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java index a49bc64be..7cf05fa18 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java @@ -13,5 +13,5 @@ public interface CompatibilityLayer { CompatibilityScheduler getScheduler(); - CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position); + CompletableFuture getNeighboringChunks(World world, ChunkCacheKey key); } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java index e3719004f..04b8caac6 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitChunkLoader.java @@ -10,8 +10,8 @@ import org.bukkit.plugin.Plugin; import dev.imprex.orebfuscator.config.api.Config; -import dev.imprex.orebfuscator.util.ChunkDirection; import dev.imprex.orebfuscator.util.ChunkCacheKey; +import dev.imprex.orebfuscator.util.ChunkDirection; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -27,8 +27,8 @@ public BukkitChunkLoader(Plugin plugin, Config config) { Bukkit.getScheduler().runTaskTimer(plugin, this, 0, 1); } - public CompletableFuture submitRequest(World world, ChunkCacheKey chunkPosition) { - Request request = new Request(world, chunkPosition); + public CompletableFuture submitRequest(World world, ChunkCacheKey key) { + Request request = new Request(world, key); this.requests.offer(request); return request.future; } @@ -46,13 +46,13 @@ public void run() { private class Request implements Runnable { private final World world; - private final ChunkCacheKey position; + private final ChunkCacheKey key; private final CompletableFuture future = new CompletableFuture<>(); - public Request(World world, ChunkCacheKey position) { + public Request(World world, ChunkCacheKey key) { this.world = world; - this.position = position; + this.key = key; } @Override @@ -60,8 +60,8 @@ public void run() { final ReadOnlyChunk[] neighboringChunks = new ReadOnlyChunk[4]; for (ChunkDirection direction : ChunkDirection.values()) { - int chunkX = position.x + direction.getOffsetX(); - int chunkZ = position.z + direction.getOffsetZ(); + int chunkX = key.x() + direction.getOffsetX(); + int chunkZ = key.z() + direction.getOffsetZ(); neighboringChunks[direction.ordinal()] = OrebfuscatorNms.getReadOnlyChunk(world, chunkX, chunkZ); } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java index fe790d7bc..b25b6dcf2 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java @@ -34,7 +34,7 @@ public CompatibilityScheduler getScheduler() { } @Override - public CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position) { - return this.chunkLoader.submitRequest(world, position); + public CompletableFuture getNeighboringChunks(World world, ChunkCacheKey key) { + return this.chunkLoader.submitRequest(world, key); } } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java index c000d5124..057f92d80 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/AbstractPaperCompatibilityLayer.java @@ -4,8 +4,8 @@ import org.bukkit.World; -import dev.imprex.orebfuscator.util.ChunkDirection; import dev.imprex.orebfuscator.util.ChunkCacheKey; +import dev.imprex.orebfuscator.util.ChunkDirection; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -13,13 +13,13 @@ public abstract class AbstractPaperCompatibilityLayer implements CompatibilityLayer { @Override - public CompletableFuture getNeighboringChunks(World world, ChunkCacheKey position) { + public CompletableFuture getNeighboringChunks(World world, ChunkCacheKey key) { CompletableFuture[] futures = new CompletableFuture[4]; ReadOnlyChunk[] neighboringChunks = new ReadOnlyChunk[4]; for (ChunkDirection direction : ChunkDirection.values()) { - int chunkX = position.x + direction.getOffsetX(); - int chunkZ = position.z + direction.getOffsetZ(); + int chunkX = key.x() + direction.getOffsetX(); + int chunkZ = key.z() + direction.getOffsetZ(); int index = direction.ordinal(); futures[index] = world.getChunkAtAsync(chunkX, chunkZ).thenAccept(chunk -> { diff --git a/orebfuscator-core/pom.xml b/orebfuscator-core/pom.xml index 6035832a3..d6698ef8b 100644 --- a/orebfuscator-core/pom.xml +++ b/orebfuscator-core/pom.xml @@ -12,12 +12,6 @@ jar - - org.spigotmc - spigot-api - ${dependency.bukkit.version} - provided - net.imprex diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java index 5ec0facec..52c2dc03f 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java @@ -1,5 +1,8 @@ package net.imprex.orebfuscator; +import java.nio.file.Path; +import java.util.List; + import org.bukkit.Bukkit; import org.bukkit.event.Event; import org.bukkit.event.EventPriority; @@ -11,9 +14,15 @@ import org.bukkit.plugin.java.JavaPlugin; import dev.imprex.orebfuscator.config.OrebfuscatorConfig; +import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.interop.RegistryAccessor; +import dev.imprex.orebfuscator.interop.ServerAccessor; +import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.Version; import net.imprex.orebfuscator.api.OrebfuscatorService; import net.imprex.orebfuscator.cache.ObfuscationCache; +import net.imprex.orebfuscator.iterop.BukkitLoggerAccessor; import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.obfuscation.ObfuscationSystem; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; @@ -21,7 +30,7 @@ import net.imprex.orebfuscator.proximity.ProximityPacketListener; import net.imprex.orebfuscator.util.MinecraftVersion; -public class Orebfuscator extends JavaPlugin implements Listener { +public class Orebfuscator extends JavaPlugin implements Listener, ServerAccessor { public static final ThreadGroup THREAD_GROUP = new ThreadGroup("orebfuscator"); @@ -36,7 +45,7 @@ public class Orebfuscator extends JavaPlugin implements Listener { @Override public void onLoad() { - OfcLogger.LOGGER = getLogger(); + OfcLogger.setLogger(new BukkitLoggerAccessor(getLogger())); } @Override @@ -53,6 +62,8 @@ public void onEnable() { throw new RuntimeException("ProtocolLib can't be found or is disabled! Orebfuscator can't be enabled."); } + BukkitWorldAccessor.registerListener(this); + this.statistics = new OrebfuscatorStatistics(); // Load configurations @@ -60,9 +71,6 @@ public void onEnable() { this.playerMap = new OrebfuscatorPlayerMap(this); - // register cleanup listener - BukkitWorldAccessor.registerListener(this); - // Initialize metrics new MetricsSystem(this); @@ -162,4 +170,44 @@ public ObfuscationSystem getObfuscationSystem() { public ProximityPacketListener getProximityPacketListener() { return this.proximityPacketListener; } + + @Override + public Path getConfigDirectory() { + return getDataFolder().toPath(); + } + + @Override + public Path getWorldDirectory() { + return Bukkit.getWorldContainer().toPath(); + } + + @Override + public String getOrebfuscatorVersion() { + return getDescription().getVersion(); + } + + @Override + public Version getMinecraftVersion() { + return MinecraftVersion.current(); + } + + @Override + public RegistryAccessor getRegistry() { + return OrebfuscatorNms.registry(); + } + + @Override + public List getWorlds() { + return BukkitWorldAccessor.getWorlds().stream() + .map(WorldAccessor.class::cast) + .toList(); + } + + @Override + public void initializeRegistry(Config config) { + OrebfuscatorCompatibility.initialize(this, config); + + OrebfuscatorNms.close(); + OrebfuscatorNms.initialize(config); + } } \ No newline at end of file diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java index 071f3f5e7..01535589e 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java @@ -29,10 +29,10 @@ import com.google.gson.internal.Streams; import com.google.gson.stream.JsonWriter; -import dev.imprex.orebfuscator.logging.OfcLogger; -import dev.imprex.orebfuscator.util.JavaVersion; import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.util.MinecraftVersion; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.JavaVersion; import net.imprex.orebfuscator.util.PermissionUtil; public class OrebfuscatorCommand implements CommandExecutor, TabCompleter { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java index 3514791af..c1c573144 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java @@ -10,7 +10,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; -import java.util.logging.Level; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -19,6 +18,7 @@ import com.google.gson.annotations.SerializedName; import dev.imprex.orebfuscator.config.api.GeneralConfig; +import dev.imprex.orebfuscator.logging.LogLevel; import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.Version; import net.imprex.orebfuscator.util.AbstractHttpService; @@ -83,7 +83,7 @@ private CompletableFuture> requestLatestVersion() { return latestVersion.map(v -> version.isBelow(v.version) ? v : null); }) ).exceptionally(throwable -> { - OfcLogger.log(Level.WARNING, "UpdateSystem - Unable to fetch latest version", throwable); + OfcLogger.log(LogLevel.WARN, "UpdateSystem - Unable to fetch latest version", throwable); return Optional.empty(); }); } @@ -120,7 +120,7 @@ private void ifNewerVersionAvailable(Consumer consumer) { private void checkForUpdates() { this.ifNewerVersionAvailable(version -> { String downloadUri = String.format(DOWNLOAD_URI, version.version); - ConsoleUtil.printBox(Level.WARNING, "UPDATE AVAILABLE", "", downloadUri); + ConsoleUtil.printBox(LogLevel.WARN, "UPDATE AVAILABLE", "", downloadUri); }); } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java index 26f1f8898..38ec63250 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java @@ -10,6 +10,9 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import org.jetbrains.annotations.NotNull; + +import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; @@ -32,32 +35,36 @@ public class AsyncChunkSerializer implements Runnable { private final Map tasks = new HashMap<>(); private final Queue positions = new LinkedList<>(); + private final int maxTaskQueueSize; + private final ChunkSerializer serializer; private final Thread thread; private volatile boolean running = true; public AsyncChunkSerializer(Orebfuscator orebfuscator) { this.maxTaskQueueSize = orebfuscator.getOrebfuscatorConfig().cache().maximumTaskQueueSize(); + this.serializer = new ChunkSerializer(); this.thread = new Thread(Orebfuscator.THREAD_GROUP, this, "ofc-chunk-serializer"); this.thread.setDaemon(true); this.thread.start(); - orebfuscator.getStatistics().setDiskCacheQueueLengthSupplier(() -> this.tasks.size()); + orebfuscator.getStatistics().setDiskCacheQueueLengthSupplier(this.tasks::size); } - public CompletableFuture read(ChunkCacheKey position) { + @NotNull + public CompletableFuture read(@NotNull ChunkCacheKey key) { this.lock.lock(); try { - Runnable task = this.tasks.get(position); + Runnable task = this.tasks.get(key); if (task instanceof WriteTask) { return CompletableFuture.completedFuture(((WriteTask) task).chunk); } else if (task instanceof ReadTask) { return ((ReadTask) task).future; } else { CompletableFuture future = new CompletableFuture<>(); - this.queueTask(position, new ReadTask(position, future)); + this.queueTask(key, new ReadTask(key, future)); return future; } } finally { @@ -65,10 +72,10 @@ public CompletableFuture read(ChunkCacheKey position) { } } - public void write(ChunkCacheKey position, CacheChunkEntry chunk) { + public void write(@NotNull ChunkCacheKey key, @NotNull CacheChunkEntry chunk) { this.lock.lock(); try { - Runnable prevTask = this.queueTask(position, new WriteTask(position, chunk)); + Runnable prevTask = this.queueTask(key, new WriteTask(key, chunk)); if (prevTask instanceof ReadTask) { ((ReadTask) prevTask).future.complete(chunk); } @@ -77,7 +84,8 @@ public void write(ChunkCacheKey position, CacheChunkEntry chunk) { } } - private Runnable queueTask(ChunkCacheKey position, Runnable nextTask) { + @NotNull + private Runnable queueTask(@NotNull ChunkCacheKey key, @NotNull Runnable nextTask) { while (this.positions.size() >= this.maxTaskQueueSize) { this.notFull.awaitUninterruptibly(); } @@ -86,9 +94,9 @@ private Runnable queueTask(ChunkCacheKey position, Runnable nextTask) { throw new IllegalStateException("AsyncChunkSerializer already closed"); } - Runnable prevTask = this.tasks.put(position, nextTask); + Runnable prevTask = this.tasks.put(key, nextTask); if (prevTask == null) { - this.positions.offer(position); + this.positions.offer(key); } this.notEmpty.signal(); @@ -133,37 +141,39 @@ public void close() { } private class WriteTask implements Runnable { - private final ChunkCacheKey position; + + private final ChunkCacheKey key; private final CacheChunkEntry chunk; - public WriteTask(ChunkCacheKey position, CacheChunkEntry chunk) { - this.position = position; + public WriteTask(ChunkCacheKey key, CacheChunkEntry chunk) { + this.key = key; this.chunk = chunk; } @Override public void run() { try { - ChunkSerializer.write(position, chunk); + serializer.write(key, chunk); } catch (IOException e) { - e.printStackTrace(); + OfcLogger.error(e); } } } private class ReadTask implements Runnable { - private final ChunkCacheKey position; + + private final ChunkCacheKey key; private final CompletableFuture future; - public ReadTask(ChunkCacheKey position, CompletableFuture future) { - this.position = position; + public ReadTask(ChunkCacheKey key, CompletableFuture future) { + this.key = key; this.future = future; } @Override public void run() { try { - future.complete(ChunkSerializer.read(position)); + future.complete(serializer.read(key)); } catch (IOException e) { future.completeExceptionally(e); } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheChunkEntry.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheChunkEntry.java index bfdec71c8..d6b746a52 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheChunkEntry.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheChunkEntry.java @@ -43,18 +43,18 @@ public static CacheChunkEntry create(ObfuscationResult result) { dataOutputStream.writeInt(blockPosition.toSectionPos()); } } catch (Exception e) { - new IOException("Unable to compress chunk: " + result.getPosition(), e).printStackTrace(); + new IOException("Unable to compress chunk: " + result.getCacheKey(), e).printStackTrace(); return null; } - return new CacheChunkEntry(result.getPosition(), byteArrayOutputStream.toByteArray()); + return new CacheChunkEntry(result.getCacheKey(), byteArrayOutputStream.toByteArray()); } - private final ChunkCacheKey position; + private final ChunkCacheKey key; private final byte[] compressedData; - public CacheChunkEntry(ChunkCacheKey position, byte[] data) { - this.position = position; + public CacheChunkEntry(ChunkCacheKey key, byte[] data) { + this.key = key; this.compressedData = data; } @@ -86,10 +86,10 @@ public Optional toResult() { byte[] data = new byte[dataInputStream.readInt()]; dataInputStream.readFully(data); - ObfuscationResult result = new ObfuscationResult(this.position, hash, data); + ObfuscationResult result = new ObfuscationResult(this.key, hash, data); - int x = this.position.x << 4; - int z = this.position.z << 4; + int x = this.key.x() << 4; + int z = this.key.z() << 4; Collection proximityBlocks = result.getProximityBlocks(); for (int i = dataInputStream.readInt(); i > 0; i--) { @@ -103,7 +103,7 @@ public Optional toResult() { return Optional.of(result); } catch (Exception e) { - new IOException("Unable to decompress chunk: " + this.position, e).printStackTrace(); + new IOException("Unable to decompress chunk: " + this.key, e).printStackTrace(); return Optional.empty(); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java index 9f513abea..2a47ddf34 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java @@ -9,9 +9,9 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; +import dev.imprex.orebfuscator.logging.OfcLogger; public class CacheFileCleanupTask implements Runnable { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java index 5f248e74b..b3c373272 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java @@ -4,6 +4,10 @@ import java.io.DataOutputStream; import java.io.IOException; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.OrebfuscatorNms; @@ -11,16 +15,11 @@ public class ChunkSerializer { private static final int CACHE_VERSION = 2; - private static DataInputStream createInputStream(ChunkCacheKey key) throws IOException { - return OrebfuscatorNms.getRegionFileCache().createInputStream(key); - } - - private static DataOutputStream createOutputStream(ChunkCacheKey key) throws IOException { - return OrebfuscatorNms.getRegionFileCache().createOutputStream(key); - } + private final AbstractRegionFileCache regionFileCache = OrebfuscatorNms.getRegionFileCache(); - public static CacheChunkEntry read(ChunkCacheKey key) throws IOException { - try (DataInputStream dataInputStream = createInputStream(key)) { + @Nullable + public CacheChunkEntry read(@NotNull ChunkCacheKey key) throws IOException { + try (DataInputStream dataInputStream = this.regionFileCache.createInputStream(key)) { if (dataInputStream != null) { // check if cache entry has right version and if chunk is present if (dataInputStream.readInt() != CACHE_VERSION || !dataInputStream.readBoolean()) { @@ -39,8 +38,8 @@ public static CacheChunkEntry read(ChunkCacheKey key) throws IOException { return null; } - public static void write(ChunkCacheKey key, CacheChunkEntry value) throws IOException { - try (DataOutputStream dataOutputStream = createOutputStream(key)) { + public void write(@NotNull ChunkCacheKey key, @Nullable CacheChunkEntry value) throws IOException { + try (DataOutputStream dataOutputStream = this.regionFileCache.createOutputStream(key)) { dataOutputStream.writeInt(CACHE_VERSION); if (value != null) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java index 5638b62f7..f3a7318cf 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java @@ -3,6 +3,8 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import org.jetbrains.annotations.NotNull; + import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.cache.RemovalNotification; @@ -45,7 +47,7 @@ public ObfuscationCache(Orebfuscator orebfuscator) { } } - private void onRemoval(RemovalNotification notification) { + private void onRemoval(@NotNull RemovalNotification notification) { this.statistics.onCacheSizeChange(-notification.getValue().estimatedSize()); // don't serialize invalidated chunks since this would require locking the main @@ -55,18 +57,19 @@ private void onRemoval(RemovalNotification notif } } - private void requestObfuscation(ObfuscationRequest request) { + private void requestObfuscation(@NotNull ObfuscationRequest request) { request.submitForObfuscation().thenAccept(chunk -> { var compressedChunk = CacheChunkEntry.create(chunk); if (compressedChunk != null) { - this.cache.put(request.getPosition(), compressedChunk); + this.cache.put(request.getCacheKey(), compressedChunk); this.statistics.onCacheSizeChange(compressedChunk.estimatedSize()); } }); } - public CompletableFuture get(ObfuscationRequest request) { - ChunkCacheKey key = request.getPosition(); + @NotNull + public CompletableFuture get(@NotNull ObfuscationRequest request) { + ChunkCacheKey key = request.getCacheKey(); CacheChunkEntry cacheChunk = this.cache.getIfPresent(key); if (cacheChunk != null && cacheChunk.isValid(request)) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java index b313f06bd..9d3a77d05 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java @@ -16,7 +16,7 @@ public static Chunk fromChunkStruct(ChunkStruct chunkStruct) { private final int chunkX; private final int chunkZ; - private final BukkitWorldAccessor heightAccessor; + private final BukkitWorldAccessor worldAccessor; private final ChunkSectionHolder[] sections; private final ByteBuf inputBuffer; @@ -26,8 +26,8 @@ private Chunk(ChunkStruct chunkStruct) { this.chunkX = chunkStruct.chunkX; this.chunkZ = chunkStruct.chunkZ; - this.heightAccessor = BukkitWorldAccessor.get(chunkStruct.world); - this.sections = new ChunkSectionHolder[this.heightAccessor.getSectionCount()]; + this.worldAccessor = chunkStruct.worldAccessor; + this.sections = new ChunkSectionHolder[this.worldAccessor.getSectionCount()]; this.inputBuffer = Unpooled.wrappedBuffer(chunkStruct.data); this.outputBuffer = PooledByteBufAllocator.DEFAULT.heapBuffer(chunkStruct.data.length); @@ -43,8 +43,8 @@ public int getSectionCount() { return this.sections.length; } - public BukkitWorldAccessor getHeightAccessor() { - return heightAccessor; + public BukkitWorldAccessor getWorldAccessor() { + return worldAccessor; } public ChunkSection getSection(int index) { @@ -57,7 +57,7 @@ public ChunkSection getSection(int index) { public int getBlockState(int x, int y, int z) { if (x >> 4 == this.chunkX && z >> 4 == this.chunkZ) { - ChunkSectionHolder chunkSection = this.sections[this.heightAccessor.getSectionIndex(y)]; + ChunkSectionHolder chunkSection = this.sections[this.worldAccessor.getSectionIndex(y)]; if (chunkSection != null) { return chunkSection.data[ChunkSection.positionToIndex(x & 0xF, y & 0xF, z & 0xF)]; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java index 1d6c0153d..7f3912945 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java @@ -5,8 +5,6 @@ import java.util.List; import java.util.function.Predicate; -import org.bukkit.World; - import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.wrappers.nbt.NbtBase; @@ -17,7 +15,7 @@ public class ChunkStruct { - public final World world; + public final BukkitWorldAccessor worldAccessor; public final int chunkX; public final int chunkZ; @@ -28,12 +26,11 @@ public class ChunkStruct { private final PacketContainer packet; private final WrappedClientboundLevelChunkPacketData packetData; - public ChunkStruct(PacketContainer packet, World world) { + public ChunkStruct(PacketContainer packet, BukkitWorldAccessor worldAccessor) { this.packet = packet; - StructureModifier packetInteger = packet.getIntegers(); - - this.world = world; + this.worldAccessor = worldAccessor; + StructureModifier packetInteger = packet.getIntegers(); this.chunkX = packetInteger.read(0); this.chunkZ = packetInteger.read(1); @@ -53,7 +50,7 @@ public ChunkStruct(PacketContainer packet, World world) { } } else { this.sectionMask = new BitSet(); - this.sectionMask.set(0, BukkitWorldAccessor.get(world).getSectionCount()); + this.sectionMask.set(0, worldAccessor.getSectionCount()); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitLoggerAccessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitLoggerAccessor.java new file mode 100644 index 000000000..614ab66ba --- /dev/null +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitLoggerAccessor.java @@ -0,0 +1,34 @@ +package net.imprex.orebfuscator.iterop; + +import java.util.Objects; +import java.util.logging.Logger; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import dev.imprex.orebfuscator.logging.LogLevel; +import dev.imprex.orebfuscator.logging.LoggerAccessor; + +public class BukkitLoggerAccessor implements LoggerAccessor { + + private final Logger logger; + + public BukkitLoggerAccessor(@NotNull Logger logger) { + this.logger = Objects.requireNonNull(logger, "Plugin logger can't be null"); + } + + @Override + public void log(@NotNull LogLevel level, @NotNull String message, @Nullable Throwable throwable) { + var mappedLevel = switch (level) { + case DEBUG, INFO -> java.util.logging.Level.INFO; + case WARN -> java.util.logging.Level.WARNING; + case ERROR -> java.util.logging.Level.SEVERE; + }; + + if (level == LogLevel.DEBUG) { + message = "[Debug] " + message; + } + + this.logger.log(mappedLevel, message, throwable); + } +} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java index 6ca18ea8e..e67b0bcb1 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java @@ -1,27 +1,34 @@ package net.imprex.orebfuscator.iterop; +import java.util.Collection; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.plugin.Plugin; import com.comphenix.protocol.reflect.accessors.Accessors; import com.comphenix.protocol.reflect.accessors.MethodAccessor; +import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.chunk.ChunkCapabilities; -public class BukkitWorldAccessor { +public class BukkitWorldAccessor implements WorldAccessor { private static final Map ACCESSOR_LOOKUP = new ConcurrentHashMap<>(); public static BukkitWorldAccessor get(World world) { - return ACCESSOR_LOOKUP.computeIfAbsent(world, BukkitWorldAccessor::new); + return ACCESSOR_LOOKUP.computeIfAbsent(world, key -> { + OfcLogger.warn("Created world accessor outside of event!"); + return new BukkitWorldAccessor(key); + }); } private static final MethodAccessor WORLD_GET_MAX_HEIGHT = getWorldMethod("getMaxHeight"); @@ -57,8 +64,22 @@ private static int blockToSectionCoord(int block) { return block >> 4; } + public static Collection getWorlds() { + return ACCESSOR_LOOKUP.values(); + } + public static void registerListener(Plugin plugin) { + for (World world : Bukkit.getWorlds()) { + ACCESSOR_LOOKUP.put(world, new BukkitWorldAccessor(world)); + } + Bukkit.getPluginManager().registerEvents(new Listener() { + @EventHandler + public void onWorldUnload(WorldLoadEvent event) { + World world = event.getWorld(); + ACCESSOR_LOOKUP.put(world, new BukkitWorldAccessor(world)); + } + @EventHandler public void onWorldUnload(WorldUnloadEvent event) { ACCESSOR_LOOKUP.remove(event.getWorld()); @@ -66,13 +87,13 @@ public void onWorldUnload(WorldUnloadEvent event) { }, plugin); } - private final String worldName; + public final World world; private final int maxHeight; private final int minHeight; private BukkitWorldAccessor(World world) { - this.worldName = world.getName(); + this.world = Objects.requireNonNull(world); if (ChunkCapabilities.hasDynamicHeight()) { this.maxHeight = (int) WORLD_GET_MAX_HEIGHT.invoke(world); @@ -83,36 +104,61 @@ private BukkitWorldAccessor(World world) { } } + @Override + public String getName() { + return this.world.getName(); + } + + @Override public int getHeight() { return this.maxHeight - this.minHeight; } + @Override public int getMinBuildHeight() { return this.minHeight; } + @Override public int getMaxBuildHeight() { return this.maxHeight; } + @Override public int getSectionCount() { return this.getMaxSection() - this.getMinSection(); } + @Override public int getMinSection() { return blockToSectionCoord(this.getMinBuildHeight()); } + @Override public int getMaxSection() { return blockToSectionCoord(this.getMaxBuildHeight() - 1) + 1; } + @Override public int getSectionIndex(int y) { return blockToSectionCoord(y) - getMinSection(); } + @Override + public int hashCode() { + return this.world.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof BukkitWorldAccessor other && this.world.equals(other.world); + } + @Override public String toString() { - return String.format("[%s, minY=%s, maxY=%s]", worldName, minHeight, maxHeight); + return String.format("[%s, minY=%s, maxY=%s]", world.getName(), minHeight, maxHeight); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java index 6ef36ff2b..ae43085a3 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/DeobfuscationWorker.java @@ -19,6 +19,7 @@ import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.cache.ObfuscationCache; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; public class DeobfuscationWorker { @@ -44,7 +45,8 @@ public void deobfuscate(Collection blocks, boolean occluding) { } World world = Iterables.get(blocks, 0).getWorld(); - WorldConfigBundle bundle = this.config.world(world); + BukkitWorldAccessor worldAccessor = BukkitWorldAccessor.get(world); + WorldConfigBundle bundle = this.config.world(worldAccessor); ObfuscationConfig obfuscationConfig = bundle.obfuscation(); if (obfuscationConfig == null || !obfuscationConfig.isEnabled()) { @@ -54,7 +56,7 @@ public void deobfuscate(Collection blocks, boolean occluding) { int updateRadius = this.config.general().updateRadius(); BlockFlags blockFlags = bundle.blockFlags(); - try (Processor processor = new Processor(world, blockFlags)) { + try (Processor processor = new Processor(worldAccessor, blockFlags)) { for (Block block : blocks) { if (!occluding || block.getType().isOccluding()) { BlockPos position = new BlockPos(block.getX(), block.getY(), block.getZ()); @@ -69,21 +71,21 @@ public class Processor implements AutoCloseable { private final Set updatedBlocks = new HashSet<>(); private final Set invalidChunks = new HashSet<>(); - private final World world; + private final BukkitWorldAccessor worldAccessor; private final BlockFlags blockFlags; - public Processor(World world, BlockFlags blockFlags) { - this.world = world; + public Processor(BukkitWorldAccessor worldAccessor, BlockFlags blockFlags) { + this.worldAccessor = worldAccessor; this.blockFlags = blockFlags; } public void processPosition(BlockPos position, int depth) { - int blockId = OrebfuscatorNms.getBlockState(this.world, position); + int blockId = OrebfuscatorNms.getBlockState(worldAccessor.world, position); if (BlockFlags.isObfuscateBitSet(blockFlags.flags(blockId)) && updatedBlocks.add(position)) { // invalidate cache if enabled if (config.cache().enabled()) { - ChunkCacheKey chunkPosition = position.toChunkPosition(world); + ChunkCacheKey chunkPosition = new ChunkCacheKey(worldAccessor, position); if (this.invalidChunks.add(chunkPosition)) { cache.invalidate(chunkPosition); } @@ -102,7 +104,7 @@ public void processPosition(BlockPos position, int depth) { @Override public void close() { - OrebfuscatorNms.sendBlockUpdates(this.world, this.updatedBlocks); + OrebfuscatorNms.sendBlockUpdates(worldAccessor.world, this.updatedBlocks); } } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java index a7e2aab9e..645591c37 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java @@ -21,13 +21,14 @@ import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.config.api.AdvancedConfig; -import dev.imprex.orebfuscator.logging.OfcLogger; -import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.chunk.ChunkStruct; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.PermissionUtil; import net.imprex.orebfuscator.util.ServerVersion; @@ -91,11 +92,12 @@ public void onPacketSending(PacketEvent event) { } Player player = event.getPlayer(); - if (this.shouldNotObfuscate(player)) { + BukkitWorldAccessor worldAccessor = BukkitWorldAccessor.get(player.getWorld()); + if (this.shouldNotObfuscate(player, worldAccessor)) { return; } - ChunkStruct struct = new ChunkStruct(event.getPacket(), player.getWorld()); + ChunkStruct struct = new ChunkStruct(event.getPacket(), worldAccessor); if (struct.isEmpty()) { return; } @@ -117,23 +119,23 @@ public void onPacketSending(PacketEvent event) { this.complete(event, struct, chunk); } else { OfcLogger.warn(String.format("skipping chunk[world=%s, x=%d, z=%d] because obfuscation result is missing", - struct.world.getName(), struct.chunkX, struct.chunkZ)); + struct.worldAccessor.getName(), struct.chunkX, struct.chunkZ)); this.asynchronousManager.signalPacketTransmission(event); } }); } - private boolean shouldNotObfuscate(Player player) { - return PermissionUtil.canBypassObfuscate(player) || !config.world(player.getWorld()).needsObfuscation(); + private boolean shouldNotObfuscate(Player player, BukkitWorldAccessor worldAccessor) { + return PermissionUtil.canBypassObfuscate(player) || !config.world(worldAccessor).needsObfuscation(); } private void completeExceptionally(PacketEvent event, ChunkStruct struct, Throwable throwable) { if (throwable instanceof TimeoutException) { OfcLogger.warn(String.format("Obfuscation for chunk[world=%s, x=%d, z=%d] timed out", - struct.world.getName(), struct.chunkX, struct.chunkZ)); + struct.worldAccessor.getName(), struct.chunkX, struct.chunkZ)); } else { OfcLogger.error(String.format("An error occurred while obfuscating chunk[world=%s, x=%d, z=%d]", - struct.world.getName(), struct.chunkX, struct.chunkZ), throwable); + struct.worldAccessor.getName(), struct.chunkX, struct.chunkZ), throwable); } this.asynchronousManager.signalPacketTransmission(event); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java index 7d6b98105..ec08146a0 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java @@ -5,21 +5,19 @@ import java.util.List; import java.util.Set; -import org.bukkit.World; - import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.config.ProximityHeightCondition; import dev.imprex.orebfuscator.config.api.BlockFlags; import dev.imprex.orebfuscator.config.api.ObfuscationConfig; import dev.imprex.orebfuscator.config.api.ProximityConfig; import dev.imprex.orebfuscator.config.api.WorldConfigBundle; +import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.chunk.Chunk; import net.imprex.orebfuscator.chunk.ChunkSection; import net.imprex.orebfuscator.chunk.ChunkStruct; -import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; public class ObfuscationProcessor { @@ -32,10 +30,9 @@ public ObfuscationProcessor(Orebfuscator orebfuscator) { public void process(ObfuscationTask task) { ChunkStruct chunkStruct = task.getChunkStruct(); - World world = chunkStruct.world; - BukkitWorldAccessor heightAccessor = BukkitWorldAccessor.get(world); + WorldAccessor worldAccessor = chunkStruct.worldAccessor; - WorldConfigBundle bundle = this.config.world(world); + WorldConfigBundle bundle = this.config.world(worldAccessor); BlockFlags blockFlags = bundle.blockFlags(); ObfuscationConfig obfuscationConfig = bundle.obfuscation(); ProximityConfig proximityConfig = bundle.proximity(); @@ -57,7 +54,7 @@ public void process(ObfuscationTask task) { continue; } - final int baseY = heightAccessor.getMinBuildHeight() + (sectionIndex << 4); + final int baseY = worldAccessor.getMinBuildHeight() + (sectionIndex << 4); for (int index = 0; index < 4096; index++) { int y = baseY + (index >> 8 & 15); if (!bundle.shouldObfuscate(y)) { @@ -124,7 +121,7 @@ public void process(ObfuscationTask task) { private int getBlockStateBelow(WorldConfigBundle bundle, Chunk chunk, int x, int y, int z, boolean allowNonOcclude) { BlockFlags blockFlags = bundle.blockFlags(); - for (int targetY = y - 1; targetY > chunk.getHeightAccessor().getMinBuildHeight(); targetY--) { + for (int targetY = y - 1; targetY > chunk.getWorldAccessor().getMinBuildHeight(); targetY--) { int blockData = chunk.getBlockState(x, targetY, z); if (blockData != -1 && (allowNonOcclude || OrebfuscatorNms.isOccluding(blockData))) { int mask = blockFlags.flags(blockData, y); @@ -147,7 +144,7 @@ && isAdjacentBlockOccluding(task, chunk, x, y, z + 1) } private boolean isAdjacentBlockOccluding(ObfuscationTask task, Chunk chunk, int x, int y, int z) { - if (y >= chunk.getHeightAccessor().getMaxBuildHeight() || y < chunk.getHeightAccessor().getMinBuildHeight()) { + if (y >= chunk.getWorldAccessor().getMaxBuildHeight() || y < chunk.getWorldAccessor().getMinBuildHeight()) { return false; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java index 77c945122..868e1aaf5 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java @@ -25,32 +25,32 @@ private static final byte[] hash(byte[] systemHash, byte[] data) { public static ObfuscationRequest fromChunk(ChunkStruct struct, OrebfuscatorConfig config, ObfuscationTaskDispatcher dispatcher) { - ChunkCacheKey position = new ChunkCacheKey(struct.world, struct.chunkX, struct.chunkZ); byte[] hash = config.cache().enabled() ? hash(config.systemHash(), struct.data) : EMPTY_HASH; - return new ObfuscationRequest(dispatcher, position, hash, struct); + return new ObfuscationRequest(dispatcher, struct, hash); } private final CompletableFuture future = new CompletableFuture<>(); private final ObfuscationTaskDispatcher dispatcher; - private final ChunkCacheKey position; - private final byte[] chunkHash; private final ChunkStruct chunkStruct; - private ObfuscationRequest(ObfuscationTaskDispatcher dispatcher, ChunkCacheKey position, byte[] chunkHash, - ChunkStruct chunkStruct) { + private final ChunkCacheKey chunkCacheKey; + private final byte[] chunkHash; + + private ObfuscationRequest(ObfuscationTaskDispatcher dispatcher, ChunkStruct chunkStruct, byte[] chunkHash) { this.dispatcher = dispatcher; - this.position = position; - this.chunkHash = chunkHash; this.chunkStruct = chunkStruct; + + this.chunkCacheKey = new ChunkCacheKey(chunkStruct.worldAccessor.getName(), chunkStruct.chunkX, chunkStruct.chunkZ); + this.chunkHash = chunkHash; } public CompletableFuture getFuture() { return future; } - public ChunkCacheKey getPosition() { - return position; + public ChunkCacheKey getCacheKey() { + return chunkCacheKey; } public byte[] getChunkHash() { @@ -67,7 +67,7 @@ public CompletableFuture submitForObfuscation() { } public ObfuscationResult createResult(byte[] data, Set blockEntities, List proximityBlocks) { - return new ObfuscationResult(this.position, this.chunkHash, data, blockEntities, proximityBlocks); + return new ObfuscationResult(this.chunkCacheKey, this.chunkHash, data, blockEntities, proximityBlocks); } public CompletableFuture complete(ObfuscationResult result) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java index 0a48758e7..dcd63cb43 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationResult.java @@ -10,7 +10,7 @@ public class ObfuscationResult { - private final ChunkCacheKey position; + private final ChunkCacheKey key; private final byte[] hash; private final byte[] data; @@ -18,21 +18,21 @@ public class ObfuscationResult { private final Set blockEntities; private final List proximityBlocks; - public ObfuscationResult(ChunkCacheKey position, byte[] hash, byte[] data) { - this(position, hash, data, new HashSet<>(), new ArrayList<>()); + public ObfuscationResult(ChunkCacheKey key, byte[] hash, byte[] data) { + this(key, hash, data, new HashSet<>(), new ArrayList<>()); } - public ObfuscationResult(ChunkCacheKey position, byte[] hash, byte[] data, + public ObfuscationResult(ChunkCacheKey key, byte[] hash, byte[] data, Set blockEntities, List proximityBlocks) { - this.position = position; + this.key = key; this.hash = hash; this.data = data; this.blockEntities = blockEntities; this.proximityBlocks = proximityBlocks; } - public ChunkCacheKey getPosition() { - return position; + public ChunkCacheKey getCacheKey() { + return key; } public byte[] getHash() { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java index 4f662c243..394a0a621 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java @@ -7,8 +7,8 @@ import org.bukkit.World; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.ChunkDirection; import dev.imprex.orebfuscator.util.ChunkCacheKey; +import dev.imprex.orebfuscator.util.ChunkDirection; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.chunk.ChunkStruct; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -16,10 +16,10 @@ public class ObfuscationTask { public static CompletableFuture fromRequest(ObfuscationRequest request) { - World world = request.getChunkStruct().world; - ChunkCacheKey position = request.getPosition(); + World world = request.getChunkStruct().worldAccessor.world; + ChunkCacheKey key = request.getCacheKey(); - return OrebfuscatorCompatibility.getNeighboringChunks(world, position) + return OrebfuscatorCompatibility.getNeighboringChunks(world, key) .thenApply(chunks -> new ObfuscationTask(request, chunks)); } @@ -48,7 +48,7 @@ public void completeExceptionally(Throwable throwable) { } public int getBlockState(int x, int y, int z) { - ChunkDirection direction = ChunkDirection.fromPosition(request.getPosition(), x, z); + ChunkDirection direction = ChunkDirection.fromPosition(request.getCacheKey(), x, z); return this.neighboringChunks[direction.ordinal()].getBlockState(x, y, z); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java index 6e4bf6f74..36f898c18 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/player/OrebfuscatorPlayer.java @@ -13,11 +13,14 @@ import dev.imprex.orebfuscator.config.api.AdvancedConfig; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; public class OrebfuscatorPlayer { + private static long chunkCoordsToLong(int chunkX, int chunkZ) { + return (chunkZ & 0xffffffffL) << 32 | chunkX & 0xffffffffL; + } + private final Player player; private final AdvancedConfig config; @@ -112,15 +115,15 @@ void updateWorld() { } public void addChunk(int chunkX, int chunkZ, List blocks) { - this.chunks.put(ChunkCacheKey.toLong(chunkX, chunkZ), + this.chunks.put(chunkCoordsToLong(chunkX, chunkZ), new OrebfuscatorPlayerChunk(chunkX, chunkZ, blocks)); } public OrebfuscatorPlayerChunk getChunk(int chunkX, int chunkZ) { - return this.chunks.get(ChunkCacheKey.toLong(chunkX, chunkZ)); + return this.chunks.get(chunkCoordsToLong(chunkX, chunkZ)); } public void removeChunk(int chunkX, int chunkZ) { - this.chunks.remove(ChunkCacheKey.toLong(chunkX, chunkZ)); + this.chunks.remove(chunkCoordsToLong(chunkX, chunkZ)); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java index ccbd70c27..a4225d255 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityDirectorThread.java @@ -17,8 +17,8 @@ import org.bukkit.event.player.PlayerJoinEvent; import dev.imprex.orebfuscator.config.api.AdvancedConfig; -import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.Orebfuscator; +import dev.imprex.orebfuscator.logging.OfcLogger; import net.imprex.orebfuscator.util.RingTimer; public class ProximityDirectorThread extends Thread implements Listener { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java index e5c145189..b27a8397d 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java @@ -1,6 +1,5 @@ package net.imprex.orebfuscator.proximity; -import org.bukkit.World; import org.bukkit.entity.Player; import com.comphenix.protocol.PacketType; @@ -14,8 +13,10 @@ import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.config.api.ProximityConfig; +import dev.imprex.orebfuscator.interop.WorldAccessor; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.chunk.ChunkCapabilities; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; import net.imprex.orebfuscator.util.PermissionUtil; @@ -48,8 +49,8 @@ public void onPacketSending(PacketEvent event) { return; } - World world = player.getWorld(); - ProximityConfig proximityConfig = config.world(world).proximity(); + WorldAccessor worldAccessor = BukkitWorldAccessor.get(player.getWorld()); + ProximityConfig proximityConfig = config.world(worldAccessor).proximity(); if (proximityConfig == null || !proximityConfig.isEnabled()) { return; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java index 3116f4d2e..cfbe83519 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java @@ -13,10 +13,12 @@ import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.config.api.ProximityConfig; +import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; import net.imprex.orebfuscator.OrebfuscatorNms; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerChunk; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; @@ -57,9 +59,10 @@ private void process(Player player) { } World world = player.getWorld(); + WorldAccessor worldAccessor = BukkitWorldAccessor.get(world); // check if world has enabled proximity config - ProximityConfig proximityConfig = this.config.world(world).proximity(); + ProximityConfig proximityConfig = this.config.world(worldAccessor).proximity(); if (proximityConfig == null || !proximityConfig.isEnabled()) { return; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java index a9213bc00..a9f4845f7 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/ConsoleUtil.java @@ -3,10 +3,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.logging.Level; import org.bukkit.ChatColor; +import dev.imprex.orebfuscator.logging.LogLevel; import dev.imprex.orebfuscator.logging.OfcLogger; public final class ConsoleUtil { @@ -24,7 +24,7 @@ public static String replaceAnsiColorWithChatColor(String value) { return value; } - public static void printBox(Level level, String...lines) { + public static void printBox(LogLevel level, String...lines) { for (String line : createBox(lines)) { OfcLogger.log(level, line); } From 6922adf50aacf8e0ca0cbd743865db53beb67ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Sat, 23 Aug 2025 14:36:06 +0200 Subject: [PATCH 04/14] feat: wip - add block tag support --- .gitattributes | 2 + .gitignore | 81 +++++++++++-------- .../orebfuscator/config/BlockParser.java | 8 +- .../config/components/ConfigBlockValue.java | 7 +- .../config/components/WeightedBlockList.java | 25 +++--- .../interop/RegistryAccessor.java | 7 +- .../imprex/orebfuscator/util/BlockTag.java | 5 -- .../orebfuscator/util/NamespacedKey.java | 3 +- .../orebfuscator/nms/AbstractNmsManager.java | 14 +++- .../orebfuscator/nms/v1_21_R5/NmsManager.java | 19 ++++- 10 files changed, 108 insertions(+), 63 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..81ca98a28 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Force LF for test files +**/src/test/resources/** text eol=lf diff --git a/.gitignore b/.gitignore index 9b484d50d..712b9cbb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,42 +1,55 @@ -.metadata -bin/ +# ---- OS junk ---- +.DS_Store +Thumbs.db + +# ---- Maven / Java ---- target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +.flattened-pom.xml +# JVM crash logs +hs_err_pid* +replay_pid* + +# If you're on the newer Maven Wrapper that downloads the jar, ignore it. +# Otherwise, REMOVE this line so the jar is committed. +.mvn/wrapper/maven-wrapper.jar + +# ---- Eclipse / STS ---- +.project +.classpath +.settings/ +.metadata/ +.recommenders/ +.loadpath +.externalToolBuilders/ +*.launch +.factorypath +# Common generated/temporary +bin/ tmp/ *.tmp *.bak *.swp *~.nib local.properties -.settings/ -.loadpath -.recommenders -# Eclipse Core -.project - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# JDT-specific (Eclipse Java Development Tools) -.classpath - -# Java annotation processor (APT) -.factorypath - -# sbteclipse plugin -.target - -# Code Recommenders -.recommenders/ -/target/ - -#Logs -*.log -.test - -# Maven -dependency-reduced-pom.xml -.flattened-pom.xml \ No newline at end of file +# ---- IntelliJ IDEA ---- +.idea/ +*.iml +*.iws +out/ +# IntelliJ shelves & local tasks +.idea/shelf/ +.idea/workspace.xml +.idea/tasks.xml +.idea/usage.statistics.xml +.idea/dictionaries/ +.idea/libraries/ + +# ---- VS Code (optional) ---- +.vscode/ diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java index bdeb5257e..089633348 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java @@ -14,7 +14,7 @@ public class BlockParser { - private static final Pattern CONFIG_FUNCTION_PATTERN = Pattern.compile("^(?\\w+)\\((?.*)\\)$"); + private static final Pattern CONFIG_FUNCTION_PATTERN = Pattern.compile("^(?\\w+)\\((?.+)\\)$"); @NotNull public static ConfigBlockValue parseBlockOrBlockTag( @@ -50,13 +50,13 @@ private static ConfigBlockValue parseBlockTag( BlockTag tag = registry.getBlockTagByName(value); if (tag == null) { context.warn(ConfigMessage.BLOCK_TAG_UNKNOWN, value); - return ConfigBlockValue.invalid(value); + return ConfigBlockValue.invalidTag(value); } Set blocks = tag.blocks(); if (blocks.isEmpty()) { context.warn(ConfigMessage.BLOCK_TAG_EMPTY, value); - return ConfigBlockValue.invalid(value); + return ConfigBlockValue.invalidTag(value); } if (excludeAir) { @@ -74,7 +74,7 @@ private static ConfigBlockValue parseBlockTag( if (blocks.isEmpty()) { context.warn(ConfigMessage.BLOCK_TAG_AIR_ONLY, value); - return ConfigBlockValue.invalid(value); + return ConfigBlockValue.invalidTag(value); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java index e41b7c63d..71c6899b3 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java @@ -18,8 +18,13 @@ public static ConfigBlockValue block(@NotNull BlockProperties block) { return new ConfigBlockValue(block.getKey().toString(), Set.of(block)); } + @NotNull + public static ConfigBlockValue invalidTag(@NotNull String value) { + return new ConfigBlockValue(String.format("tag(%s)", value), Collections.emptySet()); + } + @NotNull public static ConfigBlockValue tag(@NotNull BlockTag tag, @NotNull Set blocks) { - return new ConfigBlockValue(tag.key().toString(), Collections.unmodifiableSet(blocks)); + return new ConfigBlockValue(String.format("tag(%s)", tag.key().toString()), Collections.unmodifiableSet(blocks)); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java index 58baf6653..721ee73a2 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import dev.imprex.orebfuscator.config.BlockParser; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.config.yaml.ConfigurationSection; @@ -91,15 +92,21 @@ public WeightedBlockList(RegistryAccessor registry, ConfigurationSection section return; } - for (String blockName : blocksSection.getKeys()) { - BlockProperties blockProperties = registry.getBlockByName(blockName); - if (blockProperties != null) { - int weight = blocksSection.getInt(blockName, 1); - this.blocks.put(ConfigBlockValue.block(blockProperties), weight); - } else { - this.blocks.put(ConfigBlockValue.invalid(blockName), 1); - blocksContext.warn(ConfigMessage.BLOCK_UNKNOWN, blockName); - } + for (String value : blocksSection.getKeys()) { + int weight = blocksSection.getInt(value, 1); + // TODO: how is weight distributed between multiple blocks + // TODO: should we support non default block states in future? + // TODO: can we merge multiple of the same block? + this.blocks.put(BlockParser.parseBlockOrBlockTag(registry, context, value, false), weight); + +// BlockProperties blockProperties = registry.getBlockByName(value); +// if (blockProperties != null) { +// int weight = blocksSection.getInt(value, 1); +// this.blocks.put(ConfigBlockValue.block(blockProperties), weight); +// } else { +// this.blocks.put(ConfigBlockValue.invalid(value), 1); +// blocksContext.warn(ConfigMessage.BLOCK_UNKNOWN, value); +// } } // TODO: ignore invalid values in this check diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/RegistryAccessor.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/RegistryAccessor.java index fde7a4427..3f316c2b7 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/RegistryAccessor.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/RegistryAccessor.java @@ -1,5 +1,6 @@ package dev.imprex.orebfuscator.interop; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockTag; @@ -16,10 +17,8 @@ public interface RegistryAccessor { boolean isBlockEntity(int blockId); - @Nullable - BlockProperties getBlockByName(String name); + @Nullable BlockProperties getBlockByName(@NotNull String name); - @Nullable - BlockTag getBlockTagByName(String name); + @Nullable BlockTag getBlockTagByName(@NotNull String name); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java index e978a642b..ceb767395 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java @@ -27,9 +27,4 @@ public boolean equals(Object obj) { } return Objects.equals(key, other.key); } - - @Override - public String toString() { - return "BlockTag [key=" + key + ", blocks=" + blocks + "]"; - } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java index 0884af7c3..d77e1651e 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java @@ -1,6 +1,7 @@ package dev.imprex.orebfuscator.util; import java.util.UUID; +import org.jetbrains.annotations.NotNull; /** * Represents a String based key which consists of two components - a namespace @@ -156,7 +157,7 @@ public static NamespacedKey minecraft(String key) { * @return the created NamespacedKey. null if invalid * @see #fromString(String, Plugin) */ - public static NamespacedKey fromString(String string) { + public static NamespacedKey fromString(@NotNull String string) { if (string == null || string.isEmpty()) { throw new IllegalArgumentException("Input string must not be empty or null"); } diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java index 9846d0775..603393e85 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Map; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; @@ -21,6 +22,7 @@ public abstract class AbstractNmsManager implements NmsManager { private final BlockStateProperties[] blockStates; private final Map blocks = new HashMap<>(); + protected final Map tags = new HashMap<>(); public AbstractNmsManager(int uniqueBlockStateCount, AbstractRegionFileCache regionFileCache) { this.regionFileCache = regionFileCache; @@ -39,6 +41,10 @@ protected final void registerBlockProperties(BlockProperties block) { } } + protected final void registerBlockTag(BlockTag tag) { + this.tags.put(tag.key(), tag); + } + @Override public final AbstractRegionFileCache getRegionFileCache() { return this.regionFileCache; @@ -55,13 +61,13 @@ public final int getMaxBitsPerBlockState() { } @Override - public final BlockProperties getBlockByName(String key) { - return this.blocks.get(NamespacedKey.fromString(key)); + public final @Nullable BlockProperties getBlockByName(@NotNull String name) { + return this.blocks.get(NamespacedKey.fromString(name)); } @Override - public final @Nullable BlockTag getBlockTagByName(String name) { - throw new UnsupportedOperationException(); + public final @Nullable BlockTag getBlockTagByName(@NotNull String name) { + return this.tags.get(NamespacedKey.fromString(name)); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java index 2a3fe4578..9dce5e651 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -16,8 +19,10 @@ import com.google.common.collect.ImmutableList; import dev.imprex.orebfuscator.config.api.Config; +import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override From 01ab200410e8822c236e7df92f2f4a09a5206a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Sat, 23 Aug 2025 15:05:14 +0200 Subject: [PATCH 05/14] feat: add block tag support --- .../orebfuscator/util/BlockPosTest.java | 5 +--- .../orebfuscator/nms/v1_16_R1/NmsManager.java | 23 ++++++++++++++++++- .../orebfuscator/nms/v1_16_R2/NmsManager.java | 22 +++++++++++++++++- .../orebfuscator/nms/v1_16_R3/NmsManager.java | 22 +++++++++++++++++- .../orebfuscator/nms/v1_17_R1/NmsManager.java | 21 ++++++++++++++++- .../orebfuscator/nms/v1_18_R1/NmsManager.java | 22 +++++++++++++++++- .../orebfuscator/nms/v1_18_R2/NmsManager.java | 17 ++++++++++++++ .../orebfuscator/nms/v1_19_R1/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_19_R2/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_19_R3/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_20_R1/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_20_R2/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_20_R3/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_20_R4/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_21_R1/NmsManager.java | 19 ++++++++++++++- .../orebfuscator/nms/v1_21_R2/NmsManager.java | 18 ++++++++++++++- .../orebfuscator/nms/v1_21_R3/NmsManager.java | 18 ++++++++++++++- .../orebfuscator/nms/v1_21_R4/NmsManager.java | 18 ++++++++++++++- .../orebfuscator/nms/v1_21_R5/NmsManager.java | 1 - 19 files changed, 318 insertions(+), 21 deletions(-) rename {orebfuscator-common/src/test/java/net => orebfuscator-core/src/test/java/dev}/imprex/orebfuscator/util/BlockPosTest.java (94%) diff --git a/orebfuscator-common/src/test/java/net/imprex/orebfuscator/util/BlockPosTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/BlockPosTest.java similarity index 94% rename from orebfuscator-common/src/test/java/net/imprex/orebfuscator/util/BlockPosTest.java rename to orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/BlockPosTest.java index 5f99a1b1e..454c1e48a 100644 --- a/orebfuscator-common/src/test/java/net/imprex/orebfuscator/util/BlockPosTest.java +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/BlockPosTest.java @@ -1,11 +1,8 @@ -package net.imprex.orebfuscator.util; +package dev.imprex.orebfuscator.util; import static org.junit.jupiter.api.Assertions.assertEquals; - import org.junit.jupiter.api.Test; -import dev.imprex.orebfuscator.util.BlockPos; - public class BlockPosTest { @Test diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java index ec9c633eb..4b24b7bc9 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java @@ -2,9 +2,12 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; +import java.util.Set; import org.bukkit.Material; import org.bukkit.World; @@ -24,6 +27,7 @@ import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -36,9 +40,12 @@ import net.minecraft.server.v1_16_R1.EntityPlayer; import net.minecraft.server.v1_16_R1.IBlockData; import net.minecraft.server.v1_16_R1.IRegistry; +import net.minecraft.server.v1_16_R1.MinecraftKey; import net.minecraft.server.v1_16_R1.Packet; import net.minecraft.server.v1_16_R1.PacketListenerPlayOut; import net.minecraft.server.v1_16_R1.ResourceKey; +import net.minecraft.server.v1_16_R1.Tag; +import net.minecraft.server.v1_16_R1.TagsBlock; import net.minecraft.server.v1_16_R1.TileEntity; import net.minecraft.server.v1_16_R1.WorldServer; @@ -95,7 +102,21 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); + } + + for (Entry> entry : TagsBlock.b().b().entrySet()) { + NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().toString()); + + Set blocks = new HashSet<>(); + for (Block block : entry.getValue().getTagged()) { + BlockProperties properties = getBlockByName(IRegistry.BLOCK.getKey(block).toString()); + if (properties != null) { + blocks.add(properties); + } + } + + registerBlockTag(new BlockTag(namespacedKey, blocks)); } } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java index 7072c81c3..add5da44b 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java @@ -2,8 +2,10 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.Set; @@ -21,6 +23,7 @@ import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -33,12 +36,15 @@ import net.minecraft.server.v1_16_R2.EntityPlayer; import net.minecraft.server.v1_16_R2.IBlockData; import net.minecraft.server.v1_16_R2.IRegistry; +import net.minecraft.server.v1_16_R2.MinecraftKey; import net.minecraft.server.v1_16_R2.Packet; import net.minecraft.server.v1_16_R2.PacketListenerPlayOut; import net.minecraft.server.v1_16_R2.PacketPlayOutBlockChange; import net.minecraft.server.v1_16_R2.PacketPlayOutMultiBlockChange; import net.minecraft.server.v1_16_R2.ResourceKey; import net.minecraft.server.v1_16_R2.SectionPosition; +import net.minecraft.server.v1_16_R2.Tag; +import net.minecraft.server.v1_16_R2.TagsBlock; import net.minecraft.server.v1_16_R2.TileEntity; import net.minecraft.server.v1_16_R2.WorldServer; @@ -95,7 +101,21 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); + } + + for (Entry> entry : TagsBlock.a().a().entrySet()) { + NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().toString()); + + Set blocks = new HashSet<>(); + for (Block block : entry.getValue().getTagged()) { + BlockProperties properties = getBlockByName(IRegistry.BLOCK.getKey(block).toString()); + if (properties != null) { + blocks.add(properties); + } + } + + registerBlockTag(new BlockTag(namespacedKey, blocks)); } } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java index 791f4b93e..0bb7e6224 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java @@ -2,8 +2,10 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.Set; @@ -21,6 +23,7 @@ import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -33,12 +36,15 @@ import net.minecraft.server.v1_16_R3.EntityPlayer; import net.minecraft.server.v1_16_R3.IBlockData; import net.minecraft.server.v1_16_R3.IRegistry; +import net.minecraft.server.v1_16_R3.MinecraftKey; import net.minecraft.server.v1_16_R3.Packet; import net.minecraft.server.v1_16_R3.PacketListenerPlayOut; import net.minecraft.server.v1_16_R3.PacketPlayOutBlockChange; import net.minecraft.server.v1_16_R3.PacketPlayOutMultiBlockChange; import net.minecraft.server.v1_16_R3.ResourceKey; import net.minecraft.server.v1_16_R3.SectionPosition; +import net.minecraft.server.v1_16_R3.Tag; +import net.minecraft.server.v1_16_R3.TagsBlock; import net.minecraft.server.v1_16_R3.TileEntity; import net.minecraft.server.v1_16_R3.WorldServer; @@ -95,7 +101,21 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); + } + + for (Entry> entry : TagsBlock.a().a().entrySet()) { + NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().toString()); + + Set blocks = new HashSet<>(); + for (Block block : entry.getValue().getTagged()) { + BlockProperties properties = getBlockByName(IRegistry.BLOCK.getKey(block).toString()); + if (properties != null) { + blocks.add(properties); + } + } + + registerBlockTag(new BlockTag(namespacedKey, blocks)); } } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java index 1be0be7e6..a49f1291a 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -21,6 +22,7 @@ import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; @@ -31,9 +33,12 @@ import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.Tag; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -91,7 +96,21 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); + } + + for (Map.Entry> entry : BlockTags.getAllTags().getAllTags().entrySet()) { + NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().toString()); + + Set blocks = new HashSet<>(); + for (Block block : entry.getValue().getValues()) { + BlockProperties properties = getBlockByName(Registry.BLOCK.getKey(block).toString()); + if (properties != null) { + blocks.add(properties); + } + } + + registerBlockTag(new BlockTag(namespacedKey, blocks)); } } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java index 493874ca2..920bfb5b7 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java @@ -2,9 +2,11 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import org.bukkit.Material; import org.bukkit.World; @@ -19,6 +21,7 @@ import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; @@ -32,9 +35,12 @@ import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.Tag; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -92,7 +98,21 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); + } + + for (Map.Entry> entry : BlockTags.getAllTags().getAllTags().entrySet()) { + NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().toString()); + + Set blocks = new HashSet<>(); + for (Block block : entry.getValue().getValues()) { + BlockProperties properties = getBlockByName(Registry.BLOCK.getKey(block).toString()); + if (properties != null) { + blocks.add(properties); + } + } + + registerBlockTag(new BlockTag(namespacedKey, blocks)); } } diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java index 1bcefac1a..aa2bff0d0 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -15,10 +18,12 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; @@ -94,6 +99,18 @@ public NmsManager(Config config) { this.registerBlockProperties(builder.build()); } + + Registry.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java index c571dcde8..be53caced 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + Registry.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java index cd3dd8ca9..bb1ba0bb7 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java index 81a7703fe..2ffee8dd0 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java index a7389622a..6d06814cd 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java index 58a97eae4..ee38a2d72 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java index f3c064e22..29a5f834b 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java index 172471a17..e06424dfe 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java index 7126ce7ce..56cd372f0 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -14,10 +17,12 @@ import org.bukkit.entity.Player; import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +96,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().map(Pair::getSecond).forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java index 746c53e5e..b0e627cf7 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -18,6 +21,7 @@ import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +95,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java index 6d570fd66..547a225a7 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -18,6 +21,7 @@ import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +95,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java index f0cff854e..7a59c10e3 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; @@ -18,6 +21,7 @@ import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; +import dev.imprex.orebfuscator.util.BlockTag; import dev.imprex.orebfuscator.util.NamespacedKey; import it.unimi.dsi.fastutil.shorts.Short2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; @@ -91,8 +95,20 @@ public NmsManager(Config config) { builder.withBlockState(properties); } - this.registerBlockProperties(builder.build()); + registerBlockProperties(builder.build()); } + + BuiltInRegistries.BLOCK.getTags().forEach(tag -> { + NamespacedKey namespacedKey = NamespacedKey.fromString(tag.key().location().toString()); + + Set blocks = tag.stream() + .map(holder -> holder.unwrapKey().map(key -> getBlockByName(key.location().toString()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toUnmodifiableSet()); + + registerBlockTag(new BlockTag(namespacedKey, blocks)); + }); } @Override diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java index 9dce5e651..f85207afb 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java @@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableList; import dev.imprex.orebfuscator.config.api.Config; -import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; import dev.imprex.orebfuscator.util.BlockTag; From cdb0ea1840b5e7deb5b60163a355526e563d886e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Sat, 23 Aug 2025 16:12:05 +0200 Subject: [PATCH 06/14] ci: fix most build warnings --- orebfuscator-common/pom.xml | 29 --------- .../orebfuscator-compatibility-api/pom.xml | 6 -- .../OrebfuscatorCompatibility.java | 3 +- orebfuscator-core/pom.xml | 8 +-- orebfuscator-nms/orebfuscator-nms-api/pom.xml | 6 -- .../orebfuscator/util/MinecraftVersion.java | 0 .../orebfuscator/util/ServerVersion.java | 0 orebfuscator-plugin/pom.xml | 62 +++++++++---------- pom.xml | 21 ++++++- 9 files changed, 53 insertions(+), 82 deletions(-) delete mode 100644 orebfuscator-common/pom.xml rename {orebfuscator-common => orebfuscator-nms/orebfuscator-nms-api}/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java (100%) rename {orebfuscator-common => orebfuscator-nms/orebfuscator-nms-api}/src/main/java/net/imprex/orebfuscator/util/ServerVersion.java (100%) diff --git a/orebfuscator-common/pom.xml b/orebfuscator-common/pom.xml deleted file mode 100644 index 862ce86f4..000000000 --- a/orebfuscator-common/pom.xml +++ /dev/null @@ -1,29 +0,0 @@ - - 4.0.0 - - - net.imprex - orebfuscator - ${revision} - - - orebfuscator-common - jar - - - - org.spigotmc - spigot-api - ${dependency.bukkit.version} - provided - - - dev.imprex - orebfuscator-core - ${revision} - provided - - - \ No newline at end of file diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/pom.xml b/orebfuscator-compatibility/orebfuscator-compatibility-api/pom.xml index c801f3c96..38dbcd35f 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/pom.xml +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/pom.xml @@ -19,12 +19,6 @@ ${dependency.bukkit.version} provided - - net.imprex - orebfuscator-common - ${revision} - compile - net.imprex orebfuscator-nms-api diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java index 2e3d41c36..e9f70779b 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java @@ -12,7 +12,6 @@ import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.compatibility.CompatibilityLayer; import net.imprex.orebfuscator.nms.ReadOnlyChunk; -import net.imprex.orebfuscator.util.MinecraftVersion; import net.imprex.orebfuscator.util.ServerVersion; public class OrebfuscatorCompatibility { @@ -27,7 +26,7 @@ public static void initialize(Plugin plugin, Config config) { String className = "net.imprex.orebfuscator.compatibility.bukkit.BukkitCompatibilityLayer"; if (ServerVersion.isFolia()) { className = "net.imprex.orebfuscator.compatibility.folia.FoliaCompatibilityLayer"; - } else if (ServerVersion.isPaper() && MinecraftVersion.minorVersion() >= 13) { + } else if (ServerVersion.isPaper()) { className = "net.imprex.orebfuscator.compatibility.paper.PaperCompatibilityLayer"; } diff --git a/orebfuscator-core/pom.xml b/orebfuscator-core/pom.xml index d6698ef8b..6e0a52eb3 100644 --- a/orebfuscator-core/pom.xml +++ b/orebfuscator-core/pom.xml @@ -37,7 +37,7 @@ com.google.code.gson gson ${dependency.gson.version} - compile + provided org.yaml @@ -49,7 +49,7 @@ org.joml joml ${dependency.joml.version} - compile + provided @@ -131,17 +117,29 @@ ${revision} compile - - net.imprex - orebfuscator-common - ${revision} - compile - dev.imprex orebfuscator-core ${revision} compile + + + com.google.guava + guava + + + org.yaml + snakeyaml + + + org.joml + joml + + + org.lz4 + lz4-java + + diff --git a/pom.xml b/pom.xml index a9c2f82ee..c60dc1a2b 100644 --- a/pom.xml +++ b/pom.xml @@ -63,11 +63,10 @@ orebfuscator-api orebfuscator-api-example - orebfuscator-common + orebfuscator-core orebfuscator-compatibility orebfuscator-nms orebfuscator-plugin - orebfuscator-core @@ -114,12 +113,28 @@ *:* + META-INF/*.SF META-INF/*.DSA META-INF/*.RSA + + + META-INF/MANIFEST.MF + META-INF/LICENSE* + META-INF/NOTICE* + META-INF/maven/** + + + module-info.class + META-INF/versions/**/module-info.class + + + + @@ -189,7 +204,7 @@ org.jetbrains annotations ${dependency.jetannotations.version} - compile + provided From c4e27e5d4f0160c06989e668f8e9e9c7edb8f12c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Thu, 4 Sep 2025 18:42:48 +0200 Subject: [PATCH 07/14] feat: use vose's alias method for WeightedRandom feat: migrate BlockPos & NamespacedKey to records test: add probabilistic unit tests for new WeightedRandom feat: move state management outside of nms for region file cache --- orebfuscator-core/pom.xml | 154 +++++---- .../cache/AbstractRegionFileCache.java | 198 +++++------ .../config/AbstractWorldConfig.java | 4 +- .../orebfuscator/config/BlockParser.java | 18 +- .../config/OrebfuscatorCacheConfig.java | 16 +- .../config/OrebfuscatorConfig.java | 31 +- .../config/OrebfuscatorObfuscationConfig.java | 7 +- .../config/OrebfuscatorProximityConfig.java | 10 +- .../config/components/ConfigBlockValue.java | 13 +- .../components/ConfigFunctionValue.java | 24 ++ .../config/components/WeightedBlockList.java | 44 +-- .../config/components/WorldMatcher.java | 12 +- .../config/migrations/ConfigMigrationV4.java | 36 ++ .../config/migrations/ConfigMigrator.java | 1 + .../orebfuscator/interop/ServerAccessor.java | 3 - .../orebfuscator/reflect/Reflector.java | 2 +- .../reflect/accessor/Accessors.java | 6 +- .../accessor/DefaultConstrutorAccessor.java | 3 +- .../accessor/DefaultFieldAccessor.java | 3 +- .../accessor/DefaultMethodAccessor.java | 3 +- .../predicate/RequirementCollector.java | 11 +- .../imprex/orebfuscator/util/BlockPos.java | 176 ++++------ .../orebfuscator/util/BlockProperties.java | 175 +++++----- .../util/BlockStateProperties.java | 197 ++++++----- .../imprex/orebfuscator/util/BlockTag.java | 36 +- .../orebfuscator/util/ChunkCacheKey.java | 12 +- .../orebfuscator/util/ChunkDirection.java | 69 ++-- .../imprex/orebfuscator/util/JavaVersion.java | 50 +-- .../imprex/orebfuscator/util/MathUtil.java | 36 +- .../orebfuscator/util/NamespacedKey.java | 325 ++++++++---------- .../imprex/orebfuscator/util/SimpleCache.java | 32 +- .../dev/imprex/orebfuscator/util/Version.java | 174 +++++----- .../orebfuscator/util/WeightedIntRandom.java | 67 ---- .../orebfuscator/util/WeightedRandom.java | 208 +++++++++++ .../config/ProximityHeightConditionTest.java | 81 ++--- .../config/yaml/ConfigurationSectionTest.java | 6 +- .../accessor/ConstructorAccessorTest.java | 5 +- .../reflect/accessor/FieldAccessorTest.java | 1 + .../reflect/accessor/MethodAccessorTest.java | 11 +- .../orebfuscator/util/BlockPosTest.java | 71 ++-- .../orebfuscator/util/WeightedRandomTest.java | 128 +++++++ .../imprex/orebfuscator/OrebfuscatorNms.java | 19 +- .../orebfuscator/nms/AbstractNmsManager.java | 17 +- .../imprex/orebfuscator/nms/NmsManager.java | 5 +- .../orebfuscator/nms/v1_16_R1/NmsManager.java | 20 +- .../orebfuscator/nms/v1_16_R2/NmsManager.java | 16 +- .../orebfuscator/nms/v1_16_R3/NmsManager.java | 16 +- .../orebfuscator/nms/v1_17_R1/NmsManager.java | 16 +- .../orebfuscator/nms/v1_18_R1/NmsManager.java | 16 +- .../orebfuscator/nms/v1_18_R2/NmsManager.java | 16 +- .../orebfuscator/nms/v1_19_R1/NmsManager.java | 16 +- .../orebfuscator/nms/v1_19_R2/NmsManager.java | 16 +- .../orebfuscator/nms/v1_19_R3/NmsManager.java | 16 +- .../orebfuscator/nms/v1_20_R1/NmsManager.java | 16 +- .../orebfuscator/nms/v1_20_R2/NmsManager.java | 16 +- .../orebfuscator/nms/v1_20_R3/NmsManager.java | 16 +- .../orebfuscator/nms/v1_20_R4/NmsManager.java | 16 +- .../orebfuscator/nms/v1_21_R1/NmsManager.java | 16 +- .../orebfuscator/nms/v1_21_R2/NmsManager.java | 16 +- .../orebfuscator/nms/v1_21_R3/NmsManager.java | 16 +- .../orebfuscator/nms/v1_21_R4/NmsManager.java | 16 +- .../orebfuscator/nms/v1_21_R5/NmsManager.java | 16 +- .../net/imprex/orebfuscator/Orebfuscator.java | 12 +- .../cache/AsyncChunkSerializer.java | 5 +- .../cache/CacheFileCleanupTask.java | 8 +- .../orebfuscator/cache/ChunkSerializer.java | 7 +- .../orebfuscator/cache/ObfuscationCache.java | 13 +- .../proximity/ProximityWorker.java | 4 +- .../orebfuscator/util/FastGazeUtil.java | 6 +- 69 files changed, 1599 insertions(+), 1248 deletions(-) create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java delete mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedIntRandom.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedRandom.java create mode 100644 orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/WeightedRandomTest.java diff --git a/orebfuscator-core/pom.xml b/orebfuscator-core/pom.xml index 6e0a52eb3..b823d0ac4 100644 --- a/orebfuscator-core/pom.xml +++ b/orebfuscator-core/pom.xml @@ -1,82 +1,84 @@ - - 4.0.0 + + 4.0.0 - - net.imprex - orebfuscator - ${revision} - + + net.imprex + orebfuscator + ${revision} + - dev.imprex - orebfuscator-core - jar + dev.imprex + orebfuscator-core + jar - - - + + + - - - com.google.guava - guava - ${dependency.guava.version} - compile - - - com.google.code.gson - gson - ${dependency.gson.version} - provided - - - org.yaml - snakeyaml - ${dependency.snakeyaml.version} - compile - - - org.joml - joml - ${dependency.joml.version} - provided - - - + + + com.google.guava + guava + ${dependency.guava.version} + compile + + + com.google.code.gson + gson + ${dependency.gson.version} + provided + + + org.yaml + snakeyaml + ${dependency.snakeyaml.version} + compile + + + org.joml + joml + ${dependency.joml.version} + provided + + + - - - - org.apache.maven.plugins - maven-shade-plugin - - - - com.google.common - dev.imprex.shaded.com.google.common - - - org.yaml.snakeyaml - dev.imprex.shaded.org.yaml.snakeyaml - - - - - - + + + + org.apache.maven.plugins + maven-shade-plugin + + + + com.google.common + dev.imprex.shaded.com.google.common + + + org.yaml.snakeyaml + dev.imprex.shaded.org.yaml.snakeyaml + + + + + + \ No newline at end of file diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java index 2ff20a0d9..5b25016bc 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java @@ -15,102 +15,104 @@ public abstract class AbstractRegionFileCache { - protected final ReadWriteLock lock = new ReentrantReadWriteLock(true); - protected final Map regionFiles; - - protected final CacheConfig cacheConfig; - - public AbstractRegionFileCache(CacheConfig cacheConfig) { - this.cacheConfig = cacheConfig; - - this.regionFiles = new SimpleCache<>(cacheConfig.maximumOpenRegionFiles(), this::remove); - } - - protected abstract T createRegionFile(Path path) throws IOException; - - protected abstract void closeRegionFile(T t) throws IOException; - - protected abstract DataInputStream createInputStream(T t, ChunkCacheKey key) throws IOException; - - protected abstract DataOutputStream createOutputStream(T t, ChunkCacheKey key) throws IOException; - - public final DataInputStream createInputStream(ChunkCacheKey key) throws IOException { - T t = this.get(this.cacheConfig.regionFile(key)); - return t != null ? this.createInputStream(t, key) : null; - } - - public final DataOutputStream createOutputStream(ChunkCacheKey key) throws IOException { - T t = this.get(this.cacheConfig.regionFile(key)); - return t != null ? this.createOutputStream(t, key) : null; - } - - private final void remove(Map.Entry entry) { - try { - this.closeRegionFile(entry.getValue()); - } catch (IOException e) { - e.printStackTrace(); - } - } - - protected final T get(Path path) throws IOException { - this.lock.readLock().lock(); - try { - T t = this.regionFiles.get(path); - if (t != null) { - return t; - } - } finally { - this.lock.readLock().unlock(); - } - - if (Files.notExists(path.getParent())) { - Files.createDirectories(path.getParent()); - } - - if (this.regionFiles.size() > this.cacheConfig.maximumOpenRegionFiles()) { - throw new IllegalStateException(String.format("RegionFileCache got bigger than expected (%d > %d)", - this.regionFiles.size(), this.cacheConfig.maximumOpenRegionFiles())); - } - - T t = Objects.requireNonNull(this.createRegionFile(path)); - - this.lock.writeLock().lock(); - try { - // TODO close file handle if another thread was faster - this.regionFiles.putIfAbsent(path, t); - return this.regionFiles.get(path); - } finally { - this.lock.writeLock().unlock(); - } - } - - public final void close(Path path) throws IOException { - this.lock.writeLock().lock(); - try { - T t = this.regionFiles.remove(path); - if (t != null) { - this.closeRegionFile(t); - } - } finally { - this.lock.writeLock().unlock(); - } - } - - public final void clear() { - this.lock.writeLock().lock(); - try { - for (T t : this.regionFiles.values()) { - try { - if (t != null) { - this.closeRegionFile(t); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - this.regionFiles.clear(); - } finally { - this.lock.writeLock().unlock(); - } - } + protected final ReadWriteLock lock = new ReentrantReadWriteLock(true); + protected final Map regionFiles; + + protected final CacheConfig cacheConfig; + + public AbstractRegionFileCache(CacheConfig cacheConfig) { + this.cacheConfig = cacheConfig; + + this.regionFiles = new SimpleCache<>(cacheConfig.maximumOpenRegionFiles(), this::remove); + } + + protected abstract T createRegionFile(Path path) throws IOException; + + protected abstract void closeRegionFile(T t) throws IOException; + + protected abstract DataInputStream createInputStream(T t, ChunkCacheKey key) throws IOException; + + protected abstract DataOutputStream createOutputStream(T t, ChunkCacheKey key) throws IOException; + + public final DataInputStream createInputStream(ChunkCacheKey key) throws IOException { + T t = this.get(this.cacheConfig.regionFile(key)); + return t != null ? this.createInputStream(t, key) : null; + } + + public final DataOutputStream createOutputStream(ChunkCacheKey key) throws IOException { + T t = this.get(this.cacheConfig.regionFile(key)); + return t != null ? this.createOutputStream(t, key) : null; + } + + private final void remove(Map.Entry entry) { + try { + this.closeRegionFile(entry.getValue()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + protected final T get(Path path) throws IOException { + this.lock.readLock().lock(); + try { + T t = this.regionFiles.get(path); + if (t != null) { + return t; + } + } finally { + this.lock.readLock().unlock(); + } + + if (Files.notExists(path.getParent())) { + Files.createDirectories(path.getParent()); + } + + if (this.regionFiles.size() > this.cacheConfig.maximumOpenRegionFiles()) { + throw new IllegalStateException(String.format("RegionFileCache got bigger than expected (%d > %d)", + this.regionFiles.size(), this.cacheConfig.maximumOpenRegionFiles())); + } + + T t = Objects.requireNonNull(this.createRegionFile(path)); + + this.lock.writeLock().lock(); + try { + if (this.regionFiles.putIfAbsent(path, t) != null) { + // some other thread was faster, close fd + closeRegionFile(t); + } + return this.regionFiles.get(path); + } finally { + this.lock.writeLock().unlock(); + } + } + + public final void close(Path path) throws IOException { + this.lock.writeLock().lock(); + try { + T t = this.regionFiles.remove(path); + if (t != null) { + this.closeRegionFile(t); + } + } finally { + this.lock.writeLock().unlock(); + } + } + + public final void clear() { + this.lock.writeLock().lock(); + try { + for (T t : this.regionFiles.values()) { + try { + if (t != null) { + this.closeRegionFile(t); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + this.regionFiles.clear(); + } finally { + this.lock.writeLock().unlock(); + } + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java index be158fa6b..e633d8c27 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java @@ -14,7 +14,7 @@ import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.MathUtil; -import dev.imprex.orebfuscator.util.WeightedIntRandom; +import dev.imprex.orebfuscator.util.WeightedRandom; public abstract class AbstractWorldConfig implements WorldConfig { @@ -129,7 +129,7 @@ public boolean shouldObfuscate(int y) { } - WeightedIntRandom[] createWeightedRandoms(WorldAccessor world) { + WeightedRandom[] createWeightedRandoms(WorldAccessor world) { OfcLogger.debug(String.format("Creating weighted randoms for %s for world %s:", name, world)); return WeightedBlockList.create(world, this.weightedBlockLists); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java index 089633348..8d222d167 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java @@ -2,10 +2,9 @@ import java.util.HashSet; import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.jetbrains.annotations.NotNull; import dev.imprex.orebfuscator.config.components.ConfigBlockValue; +import dev.imprex.orebfuscator.config.components.ConfigFunctionValue; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.interop.RegistryAccessor; @@ -14,8 +13,6 @@ public class BlockParser { - private static final Pattern CONFIG_FUNCTION_PATTERN = Pattern.compile("^(?\\w+)\\((?.+)\\)$"); - @NotNull public static ConfigBlockValue parseBlockOrBlockTag( @NotNull RegistryAccessor registry, @@ -23,15 +20,12 @@ public static ConfigBlockValue parseBlockOrBlockTag( @NotNull String value, boolean excludeAir ) { - Matcher matcher = CONFIG_FUNCTION_PATTERN.matcher(value); - if (matcher.find()) { - String function = matcher.group("function"); - String argument = matcher.group("argument"); - - return switch (function.toLowerCase()) { - case "tag" -> parseBlockTag(registry, context, argument, excludeAir); + var parsed = ConfigFunctionValue.parse(value); + if (parsed != null) { + return switch (parsed.function()) { + case "tag" -> parseBlockTag(registry, context, parsed.argument(), excludeAir); default -> { - context.warn(ConfigMessage.FUNCTION_UNKNOWN, function, argument); + context.warn(ConfigMessage.FUNCTION_UNKNOWN, parsed.function(), parsed.argument()); yield ConfigBlockValue.invalid(value); } }; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java index 8c4e689c2..9fb8ba813 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java @@ -16,7 +16,7 @@ public class OrebfuscatorCacheConfig implements CacheConfig { - private final ServerAccessor server; + private final Path worldDirectory; private boolean enabledValue = true; @@ -34,8 +34,8 @@ public class OrebfuscatorCacheConfig implements CacheConfig { private boolean enableDiskCache = false; public OrebfuscatorCacheConfig(ServerAccessor server) { - this.server = server; - this.baseDirectory = server.getWorldDirectory().resolve("orebfuscator_cache/"); + this.worldDirectory = server.getWorldDirectory().normalize(); + this.baseDirectory = this.worldDirectory.resolve("orebfuscator_cache/"); } public void deserialize(ConfigurationSection section, ConfigParsingContext context) { @@ -98,7 +98,10 @@ public void serialize(ConfigurationSection section) { section.set("memoryCache.expireAfterAccess", this.expireAfterAccess); section.set("diskCache.enabled", this.enableDiskCacheValue); - section.set("diskCache.directory", this.baseDirectory.toString()); + + String directoryString = this.worldDirectory.relativize(baseDirectory).toString(); + section.set("diskCache.directory", directoryString); + section.set("diskCache.maximumOpenFiles", this.maximumOpenRegionFiles); section.set("diskCache.deleteFilesAfterAccess", this.deleteRegionFilesAfterAccess); section.set("diskCache.maximumTaskQueueSize", this.maximumTaskQueueSize); @@ -106,14 +109,13 @@ public void serialize(ConfigurationSection section) { private Path deserializeBaseDirectory(ConfigurationSection section, ConfigParsingContext context, String defaultPath) { - Path worldPath = this.server.getWorldDirectory().normalize(); String baseDirectory = section.getString("directory", defaultPath); try { - return worldPath.resolve(baseDirectory).normalize(); + return this.worldDirectory.resolve(baseDirectory).normalize(); } catch (InvalidPathException e) { context.warn("directory", ConfigMessage.CACHE_INVALID_PATH, baseDirectory, defaultPath); - return worldPath.resolve(defaultPath).normalize(); + return this.worldDirectory.resolve(defaultPath).normalize(); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java index 6ce5a1b5f..ca01add51 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java @@ -34,11 +34,11 @@ import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.Version; -import dev.imprex.orebfuscator.util.WeightedIntRandom; +import dev.imprex.orebfuscator.util.WeightedRandom; public class OrebfuscatorConfig implements Config { - private static final int CONFIG_VERSION = 4; + private static final int CONFIG_VERSION = 5; private final OrebfuscatorGeneralConfig generalConfig = new OrebfuscatorGeneralConfig(); private final OrebfuscatorAdvancedConfig advancedConfig = new OrebfuscatorAdvancedConfig(); @@ -129,20 +129,20 @@ private byte[] calculateSystemHash(YamlConfiguration configuration) throws IOExc .hash().asBytes(); } - private void deserialize(ConfigurationSection section, ConfigParsingContext context) { - if (ConfigMigrator.willMigrate(section)) { + private void deserialize(YamlConfiguration configuration, ConfigParsingContext context) { + if (ConfigMigrator.willMigrate(configuration)) { try { - this.configuration.save(server.getConfigDirectory().resolve("config-old.yml")); + configuration.save(server.getConfigDirectory().resolve("config-old.yml")); } catch (IOException e) { OfcLogger.error("Can't save original config before migration", e); } } // try to migrate to latest version - ConfigMigrator.migrateToLatestVersion(section); + ConfigMigrator.migrateToLatestVersion(configuration); // instantly fail on invalid config version - if (section.getInt("version", -1) != CONFIG_VERSION) { + if (configuration.getInt("version", -1) != CONFIG_VERSION) { throw new RuntimeException("config is not up to date, please delete your config"); } @@ -152,7 +152,7 @@ private void deserialize(ConfigurationSection section, ConfigParsingContext cont // parse general section ConfigParsingContext generalContext = context.section("general"); - ConfigurationSection generalSection = section.getSection("general"); + ConfigurationSection generalSection = configuration.getSection("general"); if (generalSection != null) { this.generalConfig.deserialize(generalSection, generalContext); } else { @@ -161,7 +161,7 @@ private void deserialize(ConfigurationSection section, ConfigParsingContext cont // parse advanced section ConfigParsingContext advancedContext = context.section("advanced"); - ConfigurationSection advancedSection = section.getSection("advanced"); + ConfigurationSection advancedSection = configuration.getSection("advanced"); if (advancedSection != null) { this.advancedConfig.deserialize(advancedSection, advancedContext); } else { @@ -173,19 +173,16 @@ private void deserialize(ConfigurationSection section, ConfigParsingContext cont // parse cache section ConfigParsingContext cacheContext = context.section("cache", true); - ConfigurationSection cacheSection = section.getSection("cache"); + ConfigurationSection cacheSection = configuration.getSection("cache"); if (cacheSection != null) { this.cacheConfig.deserialize(cacheSection, cacheContext); } else { cacheContext.warn(ConfigMessage.MISSING_USING_DEFAULTS); } - - // TODO find a better way to init registry, etc. - this.server.initializeRegistry(this); // parse obfuscation sections ConfigParsingContext obfuscationContext = context.section("obfuscation"); - ConfigurationSection obfuscationSection = section.getSection("obfuscation"); + ConfigurationSection obfuscationSection = configuration.getSection("obfuscation"); if (obfuscationSection != null) { for (ConfigurationSection config : obfuscationSection.getSubSections()) { ConfigParsingContext configContext = obfuscationContext.section(config.getName(), true); @@ -199,7 +196,7 @@ private void deserialize(ConfigurationSection section, ConfigParsingContext cont // parse proximity sections ConfigParsingContext proximityContext = context.section("proximity"); - ConfigurationSection proximitySection = section.getSection("proximity"); + ConfigurationSection proximitySection = configuration.getSection("proximity"); if (proximitySection != null) { for (ConfigurationSection config : proximitySection.getSubSections()) { ConfigParsingContext configContext = proximityContext.section(config.getName(), true); @@ -336,8 +333,8 @@ private class OrebfuscatorWorldConfigBundle implements WorldConfigBundle { private final int maxSectionIndex; private final WorldAccessor world; - private final WeightedIntRandom[] obfuscationRandoms; - private final WeightedIntRandom[] proximityRandoms; + private final WeightedRandom[] obfuscationRandoms; + private final WeightedRandom[] proximityRandoms; public OrebfuscatorWorldConfigBundle(WorldAccessor world) { String worldName = world.getName(); diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java index 8e7bc3236..f393c178b 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java @@ -42,11 +42,14 @@ private void deserializeHiddenBlocks(RegistryAccessor registry, ConfigurationSec ConfigParsingContext context) { context = context.section("hiddenBlocks"); + boolean isEmpty = true; for (String value : section.getStringList("hiddenBlocks")) { - this.hiddenBlocks.add(BlockParser.parseBlockOrBlockTag(registry, context, value, true)); + var parsed = BlockParser.parseBlockOrBlockTag(registry, context, value, true); + this.hiddenBlocks.add(parsed); + isEmpty &= parsed.blocks().isEmpty(); } - if (this.hiddenBlocks.isEmpty()) { + if (isEmpty) { context.error(ConfigMessage.MISSING_OR_EMPTY); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java index 4bb3c02f2..89e6fe79f 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java @@ -99,13 +99,14 @@ private void deserializeHiddenBlocks(RegistryAccessor registry, ConfigurationSec return; } + boolean isEmpty = true; for (ConfigurationSection block : blockSection.getSubSections()) { - ConfigBlockValue blockLike = BlockParser.parseBlockOrBlockTag(registry, context, block.getName(), true); + ConfigBlockValue parsed = BlockParser.parseBlockOrBlockTag(registry, context, block.getName(), true); int blockFlags = this.defaultBlockFlags; // parse block specific height condition - if (block.isInt("minY") && block.isInt("maxY")) { + if (block.isNumber("minY") && block.isNumber("maxY")) { int minY = block.getInt("minY", this.minY); int maxY = block.getInt("maxY", this.maxY); @@ -126,10 +127,11 @@ private void deserializeHiddenBlocks(RegistryAccessor registry, ConfigurationSec usesBlockSpecificConfigs = true; } - this.hiddenBlocks.put(blockLike, blockFlags); + this.hiddenBlocks.put(parsed, blockFlags); + isEmpty &= parsed.blocks().isEmpty(); } - if (this.hiddenBlocks.isEmpty()) { + if (isEmpty) { context.error(ConfigMessage.MISSING_OR_EMPTY); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java index 71c6899b3..d64566e8f 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java @@ -1,6 +1,7 @@ package dev.imprex.orebfuscator.config.components; import java.util.Collections; +import java.util.Objects; import java.util.Set; import org.jetbrains.annotations.NotNull; import dev.imprex.orebfuscator.util.BlockProperties; @@ -25,6 +26,16 @@ public static ConfigBlockValue invalidTag(@NotNull String value) { @NotNull public static ConfigBlockValue tag(@NotNull BlockTag tag, @NotNull Set blocks) { - return new ConfigBlockValue(String.format("tag(%s)", tag.key().toString()), Collections.unmodifiableSet(blocks)); + return new ConfigBlockValue(String.format("tag(%s)", tag.key()), Collections.unmodifiableSet(blocks)); + } + + @Override + public int hashCode() { + return this.value.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return (this == obj) || (obj instanceof ConfigBlockValue other) && Objects.equals(this.value, other.value); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java new file mode 100644 index 000000000..9f456bf77 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java @@ -0,0 +1,24 @@ +package dev.imprex.orebfuscator.config.components; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public record ConfigFunctionValue(@NotNull String function, @NotNull String argument) { + + private static final Pattern CONFIG_FUNCTION_PATTERN = Pattern.compile("^(?\\w+)\\((?.+)\\)$"); + + @Nullable + public static ConfigFunctionValue parse(@NotNull String value) { + Matcher matcher = CONFIG_FUNCTION_PATTERN.matcher(value); + if (matcher.find()) { + String function = matcher.group("function"); + String argument = matcher.group("argument"); + + return new ConfigFunctionValue(function.toLowerCase(), argument); + } else { + return null; + } + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java index 721ee73a2..18770609e 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import dev.imprex.orebfuscator.config.BlockParser; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; @@ -14,14 +15,14 @@ import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockPos; -import dev.imprex.orebfuscator.util.BlockProperties; +import dev.imprex.orebfuscator.util.BlockStateProperties; import dev.imprex.orebfuscator.util.MathUtil; -import dev.imprex.orebfuscator.util.WeightedIntRandom; +import dev.imprex.orebfuscator.util.WeightedRandom; public class WeightedBlockList { - public static WeightedIntRandom[] create(WorldAccessor world, List lists) { - WeightedIntRandom[] heightMap = new WeightedIntRandom[world.getHeight()]; + public static WeightedRandom[] create(WorldAccessor world, List lists) { + WeightedRandom[] heightMap = new WeightedRandom[world.getHeight()]; List last = new ArrayList<>(); List next = new ArrayList<>(); @@ -40,15 +41,18 @@ public static WeightedIntRandom[] create(WorldAccessor world, List entry : list.blocks.entrySet()) { - for (BlockProperties block : entry.getKey().blocks()) { - if (!builder.add(block.getDefaultBlockState().getId(), entry.getValue())) { - OfcLogger.warn(String.format("duplicate randomBlock entry for %s in %s", block.getKey(), - list.name)); - } + // TODO: only default state or all block states? compression size? + var blockStates = entry.getKey().blocks().stream() + .flatMap(block -> block.getBlockStates().stream()) + .collect(Collectors.toSet()); + double weight = (double) entry.getValue() / (double) blockStates.size(); + + for (BlockStateProperties state : blockStates) { + builder.add(state.getId(), weight); } } } @@ -92,25 +96,15 @@ public WeightedBlockList(RegistryAccessor registry, ConfigurationSection section return; } + boolean isEmpty = true; for (String value : blocksSection.getKeys()) { int weight = blocksSection.getInt(value, 1); - // TODO: how is weight distributed between multiple blocks - // TODO: should we support non default block states in future? - // TODO: can we merge multiple of the same block? - this.blocks.put(BlockParser.parseBlockOrBlockTag(registry, context, value, false), weight); - -// BlockProperties blockProperties = registry.getBlockByName(value); -// if (blockProperties != null) { -// int weight = blocksSection.getInt(value, 1); -// this.blocks.put(ConfigBlockValue.block(blockProperties), weight); -// } else { -// this.blocks.put(ConfigBlockValue.invalid(value), 1); -// blocksContext.warn(ConfigMessage.BLOCK_UNKNOWN, value); -// } + var parsed = BlockParser.parseBlockOrBlockTag(registry, context, value, false); + this.blocks.put(parsed, weight); + isEmpty &= parsed.blocks().isEmpty(); } - // TODO: ignore invalid values in this check - if (this.blocks.isEmpty()) { + if (isEmpty) { blocksContext.error(ConfigMessage.MISSING_OR_EMPTY); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java index 266477e97..40beacd3d 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java @@ -2,13 +2,15 @@ import java.util.function.Predicate; import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; -// TODO: rewrite to new function style public class WorldMatcher implements Predicate { - public static WorldMatcher parseMatcher(String value) { - if (value.startsWith("regex:")) { - return new WorldMatcher(parseRegexMatcher(value.substring(6)), Type.REGEX); + @NotNull + public static WorldMatcher parseMatcher(@NotNull String value) { + var parsed = ConfigFunctionValue.parse(value); + if (parsed != null && parsed.function().equals("regex")) { + return new WorldMatcher(parseRegexMatcher(parsed.argument()), Type.REGEX); } else { return new WorldMatcher(parseWildcardMatcher(value), Type.WILDCARD); } @@ -38,7 +40,7 @@ public boolean test(String value) { public String serialize() { if (this.type == Type.REGEX) { - return "regex:" + this.pattern.pattern(); + return String.format("regex(%s)", this.pattern.pattern()); } else { return this.pattern.pattern() .replace("\\E.*\\Q", "*") diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java new file mode 100644 index 000000000..c72a40df7 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java @@ -0,0 +1,36 @@ +package dev.imprex.orebfuscator.config.migrations; + +import org.jetbrains.annotations.NotNull; +import dev.imprex.orebfuscator.config.yaml.ConfigurationSection; + +class ConfigMigrationV4 implements ConfigMigration { + + @Override + public int sourceVersion() { + return 4; + } + + @Override + public @NotNull ConfigurationSection migrate(@NotNull ConfigurationSection root) { + migrateWorlds(root.getSection("obfuscation")); + migrateWorlds(root.getSection("proximity")); + return root; + } + + private static void migrateWorlds(ConfigurationSection configContainer) { + if (configContainer == null) { + return; + } + + for (ConfigurationSection config : configContainer.getSubSections()) { + var worlds = config.getStringList("worlds").stream().map(value -> { + if (value.startsWith("regex:")) { + return String.format("regex(%s)", value.substring(6)); + } + return value; + }).toList(); + + config.set("worlds", worlds); + } + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java index 8262da0a7..a43ca11e2 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java @@ -14,6 +14,7 @@ public class ConfigMigrator { register(new ConfigMigrationV1()); register(new ConfigMigrationV2()); register(new ConfigMigrationV3()); + register(new ConfigMigrationV4()); } private static void register(ConfigMigration migration) { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ServerAccessor.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ServerAccessor.java index cbd1771ed..c10e72b44 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ServerAccessor.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ServerAccessor.java @@ -2,7 +2,6 @@ import java.nio.file.Path; import java.util.List; -import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.Version; public interface ServerAccessor { @@ -19,6 +18,4 @@ public interface ServerAccessor { List getWorlds(); - void initializeRegistry(Config config); - } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/Reflector.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/Reflector.java index bddca9995..6e823248d 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/Reflector.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/Reflector.java @@ -26,7 +26,7 @@ public static Reflector of(Class target) { private final @NotNull Class target; private @NotNull Class recursiveUntil; - public Reflector(@NotNull Class target) { + private Reflector(@NotNull Class target) { this.target = Objects.requireNonNull(target); this.recursiveUntil = target; } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/Accessors.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/Accessors.java index dca83a4c4..2fc4b4502 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/Accessors.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/Accessors.java @@ -20,7 +20,8 @@ public final class Accessors { private static final MethodType FIELD_GETTER = MethodType.methodType(Object.class, Object.class); private static final MethodType FIELD_SETTER = MethodType.methodType(void.class, Object.class, Object.class); - private Accessors() {} + private Accessors() { + } public static @NotNull ConstructorAccessor wrap(@NotNull Constructor constructor) { return create(constructor, () -> { @@ -35,7 +36,7 @@ private Accessors() {} return create(field, () -> { MethodHandle getter = LOOKUP.unreflectGetter(field); MethodHandle setter = null; - + try { setter = LOOKUP.unreflectSetter(field); } catch (IllegalAccessException e) { @@ -102,6 +103,7 @@ private static MethodHandle generifyExecutable(MethodHandle handle, boolean isSt } private interface AccessorFactory { + T create() throws IllegalAccessException; } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultConstrutorAccessor.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultConstrutorAccessor.java index 38be8fb9f..58b41fb7f 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultConstrutorAccessor.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultConstrutorAccessor.java @@ -5,7 +5,8 @@ import java.lang.invoke.MethodHandle; import java.lang.reflect.Constructor; -final record DefaultConstructorAccessor(@NotNull Constructor member, @NotNull MethodHandle methodHandle) implements ConstructorAccessor { +record DefaultConstructorAccessor(@NotNull Constructor member, @NotNull MethodHandle methodHandle) implements + ConstructorAccessor { @Override public Object invoke(Object... args) { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java index e76e58212..da87f9417 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java @@ -5,7 +5,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -final record DefaultFieldAccessor(@NotNull Field member, @NotNull MethodHandle getterHandle, @Nullable MethodHandle setterHandle) implements FieldAccessor { +record DefaultFieldAccessor(@NotNull Field member, @NotNull MethodHandle getterHandle, + @Nullable MethodHandle setterHandle) implements FieldAccessor { @Override public boolean readonly() { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultMethodAccessor.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultMethodAccessor.java index e0bbf6e44..940bb2f59 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultMethodAccessor.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultMethodAccessor.java @@ -4,7 +4,8 @@ import java.lang.reflect.Method; import org.jetbrains.annotations.NotNull; -final record DefaultMethodAccessor(@NotNull Method member, @NotNull MethodHandle methodHandle) implements MethodAccessor { +record DefaultMethodAccessor(@NotNull Method member, @NotNull MethodHandle methodHandle) implements + MethodAccessor { @Override public Object invoke(Object instance, Object... args) { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/RequirementCollector.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/RequirementCollector.java index 1aa0a94bc..d1a91e771 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/RequirementCollector.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/predicate/RequirementCollector.java @@ -1,21 +1,22 @@ package dev.imprex.orebfuscator.reflect.predicate; import java.util.Objects; +import java.util.StringJoiner; import org.jetbrains.annotations.NotNull; class RequirementCollector { - private final StringBuilder builder; + private final StringJoiner entries; public RequirementCollector(@NotNull String prefix) { - builder = new StringBuilder(prefix).append("{\n"); + this.entries = new StringJoiner(",\n", prefix + "{\n", "\n}"); } @NotNull public RequirementCollector collect(@NotNull String name) { Objects.requireNonNull(name); - builder.append(" ").append(name).append(",\n"); + entries.add(" " + name); return this; } @@ -24,12 +25,12 @@ public RequirementCollector collect(@NotNull String name, @NotNull Object value) Objects.requireNonNull(name); Objects.requireNonNull(value); - builder.append(" ").append(name).append(": ").append(value).append(",\n"); + entries.add(" " + name + ": " + value); return this; } @NotNull public String get() { - return builder.delete(builder.length() - 2, builder.length()).append("\n}").toString(); + return entries.toString(); } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java index b0f8f970b..8e46b483f 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockPos.java @@ -1,111 +1,71 @@ package dev.imprex.orebfuscator.util; -public class BlockPos implements Comparable { - - // from net.minecraft.core.BlockPos - private static final int BITS_PER_X = 26; - private static final int BITS_PER_Z = BITS_PER_X; - private static final int BITS_PER_Y = 64 - BITS_PER_X - BITS_PER_Z; - - private static final int OFFSET_Y = 0; - private static final int OFFSET_Z = OFFSET_Y + BITS_PER_Y; - private static final int OFFSET_X = OFFSET_Z + BITS_PER_Z; - - private static final long MASK_X = (1L << BITS_PER_X) - 1L; - private static final long MASK_Y = (1L << BITS_PER_Y) - 1L; - private static final long MASK_Z = (1L << BITS_PER_Z) - 1L; - - // from net.minecraft.world.level.dimension.DimensionType - public static final int Y_SIZE = (1 << BITS_PER_Y) - 32; - public static final int MAX_Y = (Y_SIZE >> 1) - 1; - public static final int MIN_Y = MAX_Y - Y_SIZE + 1; - - public final int x; - public final int y; - public final int z; - - public BlockPos(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - - public BlockPos add(int x, int y, int z) { - return x == 0 && y == 0 && z == 0 ? this : new BlockPos(this.x + x, this.y + y, this.z + z); - } - - public double distanceSquared(double x, double y, double z) { - double dx = this.x - x; - double dy = this.y - y; - double dz = this.z - z; - return dx * dx + dy * dy + dz * dz; - } - - public long toLong() { - return (this.x & MASK_X) << OFFSET_X | (this.y & MASK_Y) << OFFSET_Y | (this.z & MASK_Z) << OFFSET_Z; - } - - public static BlockPos fromLong(long value) { - int x = (int) (value << (64 - BITS_PER_X - OFFSET_X) >> (64 - BITS_PER_X)); - int y = (int) (value << (64 - BITS_PER_Y - OFFSET_Y) >> (64 - BITS_PER_Y)); - int z = (int) (value << (64 - BITS_PER_Z - OFFSET_Z) >> (64 - BITS_PER_Z)); - return new BlockPos(x, y, z); - } - - public int toSectionPos() { - return (this.x & 0xF) << 12 | (this.y & 0xFFF) << 0 | (this.z & 0xF) << 16; - } - - public static BlockPos fromSectionPos(int x, int z, int sectionPos) { - x += (sectionPos >> 12) & 0xF; - int y = (sectionPos << 20 >> 20); - z += (sectionPos >> 16) & 0xF; - return new BlockPos(x, y, z); - } - - @Override - public int compareTo(BlockPos other) { - if (this.y == other.y) { - if (this.z == other.z) { - return this.x - other.x; - } - return this.z - other.z; - } - return this.y - other.y; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof BlockPos)) { - return false; - } - BlockPos other = (BlockPos) obj; - if (x != other.x) { - return false; - } - if (y != other.y) { - return false; - } - if (z != other.z) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int result = 1; - result = 31 * result + x; - result = 31 * result + y; - result = 31 * result + z; - return result; - } - - @Override - public String toString() { - return "BlockPos [x=" + x + ", y=" + y + ", z=" + z + "]"; - } +public record BlockPos(int x, int y, int z) implements Comparable { + + // from net.minecraft.core.BlockPos + private static final int BITS_PER_X = 26; + private static final int BITS_PER_Z = BITS_PER_X; + private static final int BITS_PER_Y = 64 - BITS_PER_X - BITS_PER_Z; + + private static final int OFFSET_Y = 0; + private static final int OFFSET_Z = OFFSET_Y + BITS_PER_Y; + private static final int OFFSET_X = OFFSET_Z + BITS_PER_Z; + + private static final long MASK_X = (1L << BITS_PER_X) - 1L; + private static final long MASK_Y = (1L << BITS_PER_Y) - 1L; + private static final long MASK_Z = (1L << BITS_PER_Z) - 1L; + + // from net.minecraft.world.level.dimension.DimensionType + public static final int Y_SIZE = (1 << BITS_PER_Y) - 32; + public static final int MAX_Y = (Y_SIZE >> 1) - 1; + public static final int MIN_Y = MAX_Y - Y_SIZE + 1; + + public BlockPos add(int x, int y, int z) { + return x == 0 && y == 0 && z == 0 ? this : new BlockPos(this.x + x, this.y + y, this.z + z); + } + + public double distanceSquared(double x, double y, double z) { + double dx = this.x - x; + double dy = this.y - y; + double dz = this.z - z; + return dx * dx + dy * dy + dz * dz; + } + + public long toLong() { + return (this.x & MASK_X) << OFFSET_X | (this.y & MASK_Y) << OFFSET_Y | (this.z & MASK_Z) << OFFSET_Z; + } + + public static BlockPos fromLong(long value) { + int x = (int) (value << (64 - BITS_PER_X - OFFSET_X) >> (64 - BITS_PER_X)); + int y = (int) (value << (64 - BITS_PER_Y - OFFSET_Y) >> (64 - BITS_PER_Y)); + int z = (int) (value << (64 - BITS_PER_Z - OFFSET_Z) >> (64 - BITS_PER_Z)); + return new BlockPos(x, y, z); + } + + public int toSectionPos() { + return (this.x & 0xF) << 12 | (this.y & 0xFFF) << 0 | (this.z & 0xF) << 16; + } + + public static BlockPos fromSectionPos(int x, int z, int sectionPos) { + x += (sectionPos >> 12) & 0xF; + int y = (sectionPos << 20 >> 20); + z += (sectionPos >> 16) & 0xF; + return new BlockPos(x, y, z); + } + + @Override + public int compareTo(BlockPos other) { + if (this.y == other.y) { + if (this.z == other.z) { + return this.x - other.x; + } + return this.z - other.z; + } + return this.y - other.y; + } + + @Override + public String toString() { + return "BlockPos [x=" + x + ", y=" + y + ", z=" + z + "]"; + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockProperties.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockProperties.java index 3e40eb24e..30a0561ce 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockProperties.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockProperties.java @@ -7,91 +7,92 @@ public class BlockProperties { - public static Builder builder(NamespacedKey key) { - return new Builder(key); - } - - private final NamespacedKey key; - private final BlockStateProperties defaultBlockState; - private final ImmutableList blockStates; - - private BlockProperties(Builder builder) { - this.key = builder.key; - this.defaultBlockState = builder.defaultBlockState; - this.blockStates = ImmutableList.copyOf(builder.blockStates); - } - - public NamespacedKey getKey() { - return key; - } - - public BlockStateProperties getDefaultBlockState() { - return defaultBlockState; - } - - public ImmutableList getBlockStates() { - return blockStates; - } - - @Override - public int hashCode() { - return this.key.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof BlockProperties)) { - return false; - } - BlockProperties other = (BlockProperties) obj; - return Objects.equals(key, other.key); - } - - @Override - public String toString() { - return "BlockProperties [key=" + key + ", defaultBlockState=" + defaultBlockState + ", blockStates=" - + blockStates + "]"; - } - - public static class Builder { - - private final NamespacedKey key; - - private BlockStateProperties defaultBlockState; - private final Set blockStates = new HashSet<>(); - - private Builder(NamespacedKey key) { - this.key = key; - } - - public Builder withBlockState(BlockStateProperties blockState) { - if (!blockStates.add(blockState)) { - throw new IllegalStateException(String.format("duplicate block state id (%s) for block: %s", blockState.getId(), key)); - } - - if (blockState.isDefaultState()) { - // check for multiple default blocks - if (this.defaultBlockState != null) { - throw new IllegalStateException(String.format("multiple default block states for block: %s", blockState.getId(), key)); - } - - this.defaultBlockState = blockState; - } - - return this; - } - - public BlockProperties build() { - Objects.requireNonNull(this.defaultBlockState, "missing default block state for block: " + this.key); - - if (this.blockStates.size() == 0) { - throw new IllegalStateException("missing block states for block: " + this.key); - } - - return new BlockProperties(this); - } - } + public static Builder builder(NamespacedKey key) { + return new Builder(key); + } + + private final NamespacedKey key; + private final BlockStateProperties defaultBlockState; + private final ImmutableList blockStates; + + private BlockProperties(Builder builder) { + this.key = builder.key; + this.defaultBlockState = builder.defaultBlockState; + this.blockStates = ImmutableList.copyOf(builder.blockStates); + } + + public NamespacedKey getKey() { + return key; + } + + public BlockStateProperties getDefaultBlockState() { + return defaultBlockState; + } + + public ImmutableList getBlockStates() { + return blockStates; + } + + @Override + public int hashCode() { + return this.key.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof BlockProperties other)) { + return false; + } + return Objects.equals(key, other.key); + } + + @Override + public String toString() { + return "BlockProperties [key=" + key + ", defaultBlockState=" + defaultBlockState + ", blockStates=" + blockStates + + "]"; + } + + public static class Builder { + + private final NamespacedKey key; + + private BlockStateProperties defaultBlockState; + private final Set blockStates = new HashSet<>(); + + private Builder(NamespacedKey key) { + this.key = key; + } + + public Builder withBlockState(BlockStateProperties blockState) { + if (!blockStates.add(blockState)) { + throw new IllegalStateException( + String.format("duplicate block state id (%s) for block: %s", blockState.getId(), key)); + } + + if (blockState.isDefaultState()) { + // check for multiple default blocks + if (this.defaultBlockState != null) { + throw new IllegalStateException( + String.format("multiple default block states for block: %s", blockState.getId(), key)); + } + + this.defaultBlockState = blockState; + } + + return this; + } + + public BlockProperties build() { + Objects.requireNonNull(this.defaultBlockState, "missing default block state for block: " + this.key); + + if (this.blockStates.size() == 0) { + throw new IllegalStateException("missing block states for block: " + this.key); + } + + return new BlockProperties(this); + } + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockStateProperties.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockStateProperties.java index 7771a0aa5..9c53c5f33 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockStateProperties.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockStateProperties.java @@ -2,103 +2,102 @@ public class BlockStateProperties { - public static Builder builder(int id) { - return new Builder(id); - } - - private final int id; - - private final boolean isAir; - private final boolean isOccluding; - private final boolean isBlockEntity; - private final boolean isDefaultState; - - private BlockStateProperties(Builder builder) { - this.id = builder.id; - this.isAir = builder.isAir; - this.isOccluding = builder.isOccluding; - this.isBlockEntity = builder.isBlockEntity; - this.isDefaultState = builder.isDefaultState; - } - - public int getId() { - return id; - } - - public boolean isAir() { - return isAir; - } - - public boolean isOccluding() { - return isOccluding; - } - - public boolean isBlockEntity() { - return isBlockEntity; - } - - public boolean isDefaultState() { - return isDefaultState; - } - - @Override - public int hashCode() { - return id; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof BlockStateProperties)) { - return false; - } - BlockStateProperties other = (BlockStateProperties) obj; - return id == other.id; - } - - @Override - public String toString() { - return "BlockStateProperties [id=" + id + ", isDefaultState=" + isDefaultState + ", isAir=" + isAir - + ", isOccluding=" + isOccluding + ", isBlockEntity=" + isBlockEntity + "]"; - } - - public static class Builder { - - private final int id; - - private boolean isAir; - private boolean isOccluding; - private boolean isBlockEntity; - private boolean isDefaultState; - - private Builder(int id) { - this.id = id; - } - - public Builder withIsAir(boolean isAir) { - this.isAir = isAir; - return this; - } - - public Builder withIsOccluding(boolean isOccluding) { - this.isOccluding = isOccluding; - return this; - } - - public Builder withIsBlockEntity(boolean isBlockEntity) { - this.isBlockEntity = isBlockEntity; - return this; - } - - public Builder withIsDefaultState(boolean isDefaultState) { - this.isDefaultState = isDefaultState; - return this; - } - - public BlockStateProperties build() { - return new BlockStateProperties(this); - } - } + public static Builder builder(int id) { + return new Builder(id); + } + + private final int id; + + private final boolean isAir; + private final boolean isOccluding; + private final boolean isBlockEntity; + private final boolean isDefaultState; + + private BlockStateProperties(Builder builder) { + this.id = builder.id; + this.isAir = builder.isAir; + this.isOccluding = builder.isOccluding; + this.isBlockEntity = builder.isBlockEntity; + this.isDefaultState = builder.isDefaultState; + } + + public int getId() { + return id; + } + + public boolean isAir() { + return isAir; + } + + public boolean isOccluding() { + return isOccluding; + } + + public boolean isBlockEntity() { + return isBlockEntity; + } + + public boolean isDefaultState() { + return isDefaultState; + } + + @Override + public int hashCode() { + return id; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof BlockStateProperties other)) { + return false; + } + return id == other.id; + } + + @Override + public String toString() { + return "BlockStateProperties [id=" + id + ", isDefaultState=" + isDefaultState + ", isAir=" + isAir + + ", isOccluding=" + isOccluding + ", isBlockEntity=" + isBlockEntity + "]"; + } + + public static class Builder { + + private final int id; + + private boolean isAir; + private boolean isOccluding; + private boolean isBlockEntity; + private boolean isDefaultState; + + private Builder(int id) { + this.id = id; + } + + public Builder withIsAir(boolean isAir) { + this.isAir = isAir; + return this; + } + + public Builder withIsOccluding(boolean isOccluding) { + this.isOccluding = isOccluding; + return this; + } + + public Builder withIsBlockEntity(boolean isBlockEntity) { + this.isBlockEntity = isBlockEntity; + return this; + } + + public Builder withIsDefaultState(boolean isDefaultState) { + this.isDefaultState = isDefaultState; + return this; + } + + public BlockStateProperties build() { + return new BlockStateProperties(this); + } + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java index ceb767395..5769bda45 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/BlockTag.java @@ -7,24 +7,24 @@ public record BlockTag(@NotNull NamespacedKey key, @NotNull Set blocks) { - public BlockTag(@NotNull NamespacedKey key, @NotNull Set blocks) { - this.key = key; - this.blocks = Collections.unmodifiableSet(blocks); - } + public BlockTag(@NotNull NamespacedKey key, @NotNull Set blocks) { + this.key = key; + this.blocks = Collections.unmodifiableSet(blocks); + } - @Override - public int hashCode() { - return this.key.hashCode(); - } + @Override + public int hashCode() { + return this.key.hashCode(); + } - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof BlockTag other)) { - return false; - } - return Objects.equals(key, other.key); - } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof BlockTag other)) { + return false; + } + return Objects.equals(key, other.key); + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkCacheKey.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkCacheKey.java index 6b2a187fc..2de791560 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkCacheKey.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkCacheKey.java @@ -5,11 +5,11 @@ public record ChunkCacheKey(@NotNull String world, int x, int z) { - public ChunkCacheKey(@NotNull WorldAccessor world, BlockPos position) { - this(world.getName(), position.x >> 4, position.z >> 4); - } + public ChunkCacheKey(@NotNull WorldAccessor world, BlockPos position) { + this(world.getName(), position.x() >> 4, position.z() >> 4); + } - public ChunkCacheKey(@NotNull WorldAccessor world, int x, int z) { - this(world.getName(), x, z); - } + public ChunkCacheKey(@NotNull WorldAccessor world, int x, int z) { + this(world.getName(), x, z); + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java index fe679aa39..a9f65cb33 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/ChunkDirection.java @@ -2,38 +2,39 @@ public enum ChunkDirection { - NORTH(1, 0), EAST(0, 1), SOUTH(-1, 0), WEST(0, -1); - - private int offsetX; - private int offsetZ; - - private ChunkDirection(int offsetX, int offsetZ) { - this.offsetX = offsetX; - this.offsetZ = offsetZ; - } - - public int getOffsetX() { - return offsetX; - } - - public int getOffsetZ() { - return offsetZ; - } - - public static ChunkDirection fromPosition(ChunkCacheKey key, int targetX, int targetZ) { - int offsetX = (targetX >> 4) - key.x(); - int offsetZ = (targetZ >> 4) - key.z(); - - if (offsetX == 1 && offsetZ == 0) { - return NORTH; - } else if (offsetX == 0 && offsetZ == 1) { - return EAST; - } else if (offsetX == -1 && offsetZ == 0) { - return SOUTH; - } else if (offsetX == 0 && offsetZ == -1) { - return WEST; - } - - throw new IllegalArgumentException(String.format("invalid offset (origin: %s, x: %d, z: %d)", key, targetX, targetZ)); - } + NORTH(1, 0), EAST(0, 1), SOUTH(-1, 0), WEST(0, -1); + + private final int offsetX; + private final int offsetZ; + + ChunkDirection(int offsetX, int offsetZ) { + this.offsetX = offsetX; + this.offsetZ = offsetZ; + } + + public int getOffsetX() { + return offsetX; + } + + public int getOffsetZ() { + return offsetZ; + } + + public static ChunkDirection fromPosition(ChunkCacheKey key, int targetX, int targetZ) { + int offsetX = (targetX >> 4) - key.x(); + int offsetZ = (targetZ >> 4) - key.z(); + + if (offsetX == 1 && offsetZ == 0) { + return NORTH; + } else if (offsetX == 0 && offsetZ == 1) { + return EAST; + } else if (offsetX == -1 && offsetZ == 0) { + return SOUTH; + } else if (offsetX == 0 && offsetZ == -1) { + return WEST; + } + + throw new IllegalArgumentException( + String.format("invalid offset (origin: %s, x: %d, z: %d)", key, targetX, targetZ)); + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/JavaVersion.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/JavaVersion.java index 788ab1139..fdf6e155b 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/JavaVersion.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/JavaVersion.java @@ -2,35 +2,35 @@ public final class JavaVersion { - private static final int JAVA_VERSION = javaMajorVersion(); + private static final int JAVA_VERSION = javaMajorVersion(); - public static int get() { - return JAVA_VERSION; - } + public static int get() { + return JAVA_VERSION; + } - private static int javaMajorVersion() { - return majorVersion(System.getProperty("java.specification.version", "1.6")); - } + private static int javaMajorVersion() { + return majorVersion(System.getProperty("java.specification.version", "1.6")); + } - /** - * taken from: - * https://github.com/netty/netty/blob/7ad2b91515b3affaeadb4b2975cd6d2a8342c403/common/src/main/java/io/netty/util/internal/PlatformDependent0.java#L1037 - */ - private static int majorVersion(final String javaSpecVersion) { - final String[] components = javaSpecVersion.split("\\."); - final int[] version = new int[components.length]; - for (int i = 0; i < components.length; i++) { - version[i] = Integer.parseInt(components[i]); - } + /** + * taken from: + * https://github.com/netty/netty/blob/7ad2b91515b3affaeadb4b2975cd6d2a8342c403/common/src/main/java/io/netty/util/internal/PlatformDependent0.java#L1037 + */ + private static int majorVersion(final String javaSpecVersion) { + final String[] components = javaSpecVersion.split("\\."); + final int[] version = new int[components.length]; + for (int i = 0; i < components.length; i++) { + version[i] = Integer.parseInt(components[i]); + } - if (version[0] == 1) { - assert version[1] >= 6; - return version[1]; - } else { - return version[0]; - } + if (version[0] == 1) { + assert version[1] >= 6; + return version[1]; + } else { + return version[0]; } + } - private JavaVersion() { - } + private JavaVersion() { + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/MathUtil.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/MathUtil.java index 2fd36ad5b..095a8fa87 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/MathUtil.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/MathUtil.java @@ -2,24 +2,24 @@ public class MathUtil { - public static int ceilToPowerOfTwo(int value) { - value--; - value |= value >> 1; - value |= value >> 2; - value |= value >> 4; - value |= value >> 8; - value |= value >> 16; - value++; - return value; - } + public static int ceilToPowerOfTwo(int value) { + value--; + value |= value >> 1; + value |= value >> 2; + value |= value >> 4; + value |= value >> 8; + value |= value >> 16; + value++; + return value; + } - public static int clamp(int value, int min, int max) { - return Math.max(min, Math.min(max, value)); - } + public static int clamp(int value, int min, int max) { + return Math.max(min, Math.min(max, value)); + } - public static int ceilLog2(int value) { - int result = 31 - Integer.numberOfLeadingZeros(value); - // add 1 if value is NOT a power of 2 (to do the ceil) - return result + (value != 0 && (value & value - 1) == 0 ? 0 : 1); - } + public static int ceilLog2(int value) { + int result = 31 - Integer.numberOfLeadingZeros(value); + // add 1 if value is NOT a power of 2 (to do the ceil) + return result + (value != 0 && (value & value - 1) == 0 ? 0 : 1); + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java index d77e1651e..3a029d3b1 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/NamespacedKey.java @@ -1,193 +1,152 @@ package dev.imprex.orebfuscator.util; -import java.util.UUID; import org.jetbrains.annotations.NotNull; /** - * Represents a String based key which consists of two components - a namespace - * and a key. - * - * Namespaces may only contain lowercase alphanumeric characters, periods, - * underscores, and hyphens. + * Represents a String based key which consists of two components - a namespace and a key. + *

+ * Namespaces may only contain lowercase alphanumeric characters, periods, underscores, and hyphens. *

- * Keys may only contain lowercase alphanumeric characters, periods, - * underscores, hyphens, and forward slashes. - * + * Keys may only contain lowercase alphanumeric characters, periods, underscores, hyphens, and forward slashes. + * * @author org.bukkit.NamespacedKey from 1.19.4 * */ -public final class NamespacedKey { - - /** - * The namespace representing all inbuilt keys. - */ - public static final String MINECRAFT = "minecraft"; - /** - * The namespace representing all keys generated by Bukkit for backwards - * compatibility measures. - */ - public static final String BUKKIT = "bukkit"; - // - private final String namespace; - private final String key; - - private static boolean isValidNamespaceChar(char c) { - return (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.' || c == '_' || c == '-'; - } - - private static boolean isValidKeyChar(char c) { - return isValidNamespaceChar(c) || c == '/'; - } - - private static boolean isValidNamespace(String namespace) { - int len = namespace.length(); - if (len == 0) { - return false; - } - - for (int i = 0; i < len; i++) { - if (!isValidNamespaceChar(namespace.charAt(i))) { - return false; - } - } - - return true; - } - - private static boolean isValidKey(String key) { - int len = key.length(); - if (len == 0) { - return false; - } - - for (int i = 0; i < len; i++) { - if (!isValidKeyChar(key.charAt(i))) { - return false; - } - } - - return true; - } - - /** - * Create a key in a specific namespace. - * - * @param namespace namespace - * @param key key - * @deprecated should never be used by plugins, for internal use only!! - */ - @Deprecated - public NamespacedKey(String namespace, String key) { - if (namespace == null || !isValidNamespace(namespace)) { - throw new IllegalArgumentException(String.format("Invalid namespace. Must be [a-z0-9._-]: %s", namespace)); - } else if (key == null || !isValidKey(key)) { - throw new IllegalArgumentException(String.format("Invalid key. Must be [a-z0-9/._-]: %s", key)); - } - - this.namespace = namespace; - this.key = key; - - String string = toString(); - if (string.length() >= 256) { - throw new IllegalArgumentException(String.format("NamespacedKey must be less than 256 characters (%s)", string)); - } - } - - public String getNamespace() { - return namespace; - } - - public String getKey() { - return key; - } - - @Override - public int hashCode() { - int hash = 5; - hash = 47 * hash + this.namespace.hashCode(); - hash = 47 * hash + this.key.hashCode(); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final NamespacedKey other = (NamespacedKey) obj; - return this.namespace.equals(other.namespace) && this.key.equals(other.key); - } - - @Override - public String toString() { - return this.namespace + ":" + this.key; - } - - /** - * Return a new random key in the {@link #BUKKIT} namespace. - * - * @return new key - * @deprecated should never be used by plugins, for internal use only!! - */ - @Deprecated - public static NamespacedKey randomKey() { - return new NamespacedKey(BUKKIT, UUID.randomUUID().toString()); - } - - /** - * Get a key in the Minecraft namespace. - * - * @param key the key to use - * @return new key in the Minecraft namespace - */ - public static NamespacedKey minecraft(String key) { - return new NamespacedKey(MINECRAFT, key); - } - - - /** - * Get a NamespacedKey from the supplied string. - * - * The default namespace will be Minecraft's (i.e. {@link #minecraft(String)}). - * - * @param key the key to convert to a NamespacedKey - * @return the created NamespacedKey. null if invalid - * @see #fromString(String, Plugin) - */ - public static NamespacedKey fromString(@NotNull String string) { - if (string == null || string.isEmpty()) { - throw new IllegalArgumentException("Input string must not be empty or null"); - } - - String[] components = string.split(":", 3); - if (components.length > 2) { - return null; - } - - String key = (components.length == 2) ? components[1] : ""; - if (components.length == 1) { - String value = components[0]; - if (value.isEmpty() || !isValidKey(value)) { - return null; - } - - return minecraft(value); - } else if (components.length == 2 && !isValidKey(key)) { - return null; - } - - String namespace = components[0]; - if (namespace.isEmpty()) { - return minecraft(key); - } - - if (!isValidNamespace(namespace)) { - return null; - } - - return new NamespacedKey(namespace, key); - } +public record NamespacedKey(String namespace, String key) { + + /** + * The namespace representing all inbuilt keys. + */ + public static final String MINECRAFT = "minecraft"; + + private static boolean isValidNamespaceChar(char c) { + return (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.' || c == '_' || c == '-'; + } + + private static boolean isValidKeyChar(char c) { + return isValidNamespaceChar(c) || c == '/'; + } + + private static boolean isValidNamespace(String namespace) { + int len = namespace.length(); + if (len == 0) { + return false; + } + + for (int i = 0; i < len; i++) { + if (!isValidNamespaceChar(namespace.charAt(i))) { + return false; + } + } + + return true; + } + + private static boolean isValidKey(String key) { + int len = key.length(); + if (len == 0) { + return false; + } + + for (int i = 0; i < len; i++) { + if (!isValidKeyChar(key.charAt(i))) { + return false; + } + } + + return true; + } + + /** + * Create a key in a specific namespace. + * + * @param namespace namespace + * @param key key + * @deprecated should never be used by plugins, for internal use only!! + */ + @Deprecated + public NamespacedKey(String namespace, String key) { + if (namespace == null || !isValidNamespace(namespace)) { + throw new IllegalArgumentException(String.format("Invalid namespace. Must be [a-z0-9._-]: %s", namespace)); + } else if (key == null || !isValidKey(key)) { + throw new IllegalArgumentException(String.format("Invalid key. Must be [a-z0-9/._-]: %s", key)); + } + + this.namespace = namespace; + this.key = key; + + String string = toString(); + if (string.length() >= 256) { + throw new IllegalArgumentException(String.format("NamespacedKey must be less than 256 characters (%s)", string)); + } + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final NamespacedKey other = (NamespacedKey) obj; + return this.namespace.equals(other.namespace) && this.key.equals(other.key); + } + + @Override + public String toString() { + return this.namespace + ":" + this.key; + } + + /** + * Get a key in the Minecraft namespace. + * + * @param key the key to use + * @return new key in the Minecraft namespace + */ + public static NamespacedKey minecraft(String key) { + return new NamespacedKey(MINECRAFT, key); + } + + + /** + * Get a NamespacedKey from the supplied string. + *

+ * The default namespace will be Minecraft's (i.e. {@link #minecraft(String)}). + * + * @return the created NamespacedKey. null if invalid + */ + public static NamespacedKey fromString(@NotNull String string) { + if (string == null || string.isEmpty()) { + throw new IllegalArgumentException("Input string must not be empty or null"); + } + + String[] components = string.split(":", 3); + if (components.length > 2) { + return null; + } + + String key = (components.length == 2) ? components[1] : ""; + if (components.length == 1) { + String value = components[0]; + if (value.isEmpty() || !isValidKey(value)) { + return null; + } + + return minecraft(value); + } else if (components.length == 2 && !isValidKey(key)) { + return null; + } + + String namespace = components[0]; + if (namespace.isEmpty()) { + return minecraft(key); + } + + if (!isValidNamespace(namespace)) { + return null; + } + + return new NamespacedKey(namespace, key); + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/SimpleCache.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/SimpleCache.java index 52ee2ae6c..d51221387 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/SimpleCache.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/SimpleCache.java @@ -9,24 +9,24 @@ */ public class SimpleCache extends LinkedHashMap { - private static final long serialVersionUID = -2732738355560313649L; + private static final long serialVersionUID = -2732738355560313649L; - private final int maximumSize; - private final Consumer> remove; + private final int maximumSize; + private final Consumer> remove; - public SimpleCache(int maximumSize, Consumer> remove) { - super(16, 0.75f, true); + public SimpleCache(int maximumSize, Consumer> remove) { + super(16, 0.75f, true); - this.maximumSize = maximumSize; - this.remove = remove; - } + this.maximumSize = maximumSize; + this.remove = remove; + } - @Override - protected boolean removeEldestEntry(Map.Entry entry) { - if (this.size() > this.maximumSize) { - this.remove.accept(entry); - return true; - } - return false; - } + @Override + protected boolean removeEldestEntry(Map.Entry entry) { + if (this.size() > this.maximumSize) { + this.remove.accept(entry); + return true; + } + return false; + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java index 89c3d9d10..6b1776a0e 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java @@ -10,93 +10,89 @@ public record Version(int major, int minor, int patch) implements Comparable { - private static final Pattern VERSION_PATTERN = Pattern.compile("(?\\d+)(?:\\.(?\\d+))?(?:\\.(?\\d+))?"); - - public static Version parse(String version) { - Matcher matcher = VERSION_PATTERN.matcher(version); - - if (!matcher.find()) { - throw new IllegalArgumentException("can't parse version: " + version); - } - - int major = Integer.parseInt(matcher.group("major")); - - String minorGroup = matcher.group("minor"); - int minor = minorGroup != null - ? Integer.parseInt(minorGroup) - : 0; - - String patchGroup = matcher.group("patch"); - int patch = patchGroup != null - ? Integer.parseInt(patchGroup) - : 0; - - return new Version(major, minor, patch); - } - - public boolean isAbove(Version version) { - return this.compareTo(version) > 0; - } - - public boolean isAtOrAbove(Version version) { - return this.compareTo(version) >= 0; - } - - public boolean isAtOrBelow(Version version) { - return this.compareTo(version) <= 0; - } - - public boolean isBelow(Version version) { - return this.compareTo(version) < 0; - } - - @Override - public int compareTo(Version other) { - int major = Integer.compare(this.major, other.major); - if (major != 0) { - return major; - } - - int minor = Integer.compare(this.minor, other.minor); - if (minor != 0) { - return minor; - } - - return Integer.compare(this.patch, other.patch); - } - - @Override - public int hashCode() { - return Objects.hash(major, minor, patch); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof Version)) { - return false; - } - Version other = (Version) obj; - return major == other.major && minor == other.minor && patch == other.patch; - } - - @Override - public String toString() { - return String.format("%s.%s.%s", this.major, this.minor, this.patch); - } - - public static final class Json extends TypeAdapter { - - @Override - public void write(JsonWriter out, Version value) throws IOException { - out.value(value.toString()); - } - - @Override - public Version read(JsonReader in) throws IOException { - return Version.parse(in.nextString()); - } - } + private static final Pattern VERSION_PATTERN = + Pattern.compile("(?\\d+)(?:\\.(?\\d+))?(?:\\.(?\\d+))?"); + + public static Version parse(String version) { + Matcher matcher = VERSION_PATTERN.matcher(version); + + if (!matcher.find()) { + throw new IllegalArgumentException("can't parse version: " + version); + } + + int major = Integer.parseInt(matcher.group("major")); + + String minorGroup = matcher.group("minor"); + int minor = minorGroup != null ? Integer.parseInt(minorGroup) : 0; + + String patchGroup = matcher.group("patch"); + int patch = patchGroup != null ? Integer.parseInt(patchGroup) : 0; + + return new Version(major, minor, patch); + } + + public boolean isAbove(Version version) { + return this.compareTo(version) > 0; + } + + public boolean isAtOrAbove(Version version) { + return this.compareTo(version) >= 0; + } + + public boolean isAtOrBelow(Version version) { + return this.compareTo(version) <= 0; + } + + public boolean isBelow(Version version) { + return this.compareTo(version) < 0; + } + + @Override + public int compareTo(Version other) { + int major = Integer.compare(this.major, other.major); + if (major != 0) { + return major; + } + + int minor = Integer.compare(this.minor, other.minor); + if (minor != 0) { + return minor; + } + + return Integer.compare(this.patch, other.patch); + } + + @Override + public int hashCode() { + return Objects.hash(major, minor, patch); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof Version other)) { + return false; + } + return major == other.major && minor == other.minor && patch == other.patch; + } + + @Override + public String toString() { + return String.format("%s.%s.%s", this.major, this.minor, this.patch); + } + + public static final class Json extends TypeAdapter { + + @Override + public void write(JsonWriter out, Version value) throws IOException { + out.value(value.toString()); + } + + @Override + public Version read(JsonReader in) throws IOException { + return Version.parse(in.nextString()); + } + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedIntRandom.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedIntRandom.java deleted file mode 100644 index 03bfc8285..000000000 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedIntRandom.java +++ /dev/null @@ -1,67 +0,0 @@ -package dev.imprex.orebfuscator.util; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ThreadLocalRandom; - -public class WeightedIntRandom { - - public static Builder builder() { - return new Builder(); - } - - /** - * Sum of all weights - */ - private final int weight; - - /** - * Flat int array where each entry has a probability of one - * - * @implNote use flat int array instead of treemap cause O(N*log(N)) is too - * slow since this is the second hottest code path - */ - private final int[] entries; - - private WeightedIntRandom(Builder builder) { - this.weight = builder.weight; - this.entries = new int[builder.weight]; - - int index = 0; - for (Map.Entry entry : builder.entries.entrySet()) { - for (int weight = 0; weight < entry.getValue(); weight++) { - this.entries[index++] = entry.getKey(); - } - } - } - - public int next() { - int index = ThreadLocalRandom.current().nextInt(this.weight); - return this.entries[index]; - } - - public static class Builder { - - private int weight = 0; - - private final Map entries = new HashMap<>(); - - private Builder() { - } - - /** - * Returns true if this random did not already contain the specified value - */ - public boolean add(int value, int weight) { - if (entries.putIfAbsent(value, weight) == null) { - this.weight += weight; - return true; - } - return false; - } - - public WeightedIntRandom build() { - return new WeightedIntRandom(this); - } - } -} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedRandom.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedRandom.java new file mode 100644 index 000000000..ac40fd346 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/WeightedRandom.java @@ -0,0 +1,208 @@ +package dev.imprex.orebfuscator.util; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ThreadLocalRandom; +import java.util.random.RandomGenerator; +import org.jetbrains.annotations.NotNull; + +/** + * Weighted random integer sampler using the + * alias method. + *

+ * This data structure allows efficient sampling of integer values according to arbitrary (positive) weights: + *

    + *
  • Preprocessing/build time: {@code O(n)}
  • + *
  • Sampling time: {@code O(1)}
  • + *
  • Memory usage: {@code O(n)}
  • + *
+ *

+ * Usage example: + *

{@code
+ * WeightedRandom wr = WeightedRandom.builder()
+ *     .add(1, 0.5)   // value 1 with weight 0.5
+ *     .add(2, 1.5)   // value 2 with weight 1.5
+ *     .add(3, 3.0)   // value 3 with weight 3.0
+ *     .build();
+ *
+ * int sample = wr.next(); // sample ~10% chance of 1, 30% of 2, 60% of 3
+ * }
+ * + *

+ * This implementation is immutable and thread-safe for concurrent calls to + * {@link #next()} after construction. + */ +public final class WeightedRandom { + + /** + * Creates a new builder for constructing a {@link WeightedRandom}. + * + * @return a new {@link Builder} instance + */ + public static Builder builder() { + return new Builder(); + } + + private final int n; + private final double totalWeight; + private final boolean allWeightsEqual; + + private final int[] values; + private final double[] probabilities; + private final int[] alias; + + /** + * Constructs a weighted random sampler from the given builder. Implements the alias method preprocessing algorithm. + * + * @param builder the builder containing values and weights + */ + private WeightedRandom(@NotNull Builder builder) { + double minWeight = Double.POSITIVE_INFINITY; + double maxWeight = Double.NEGATIVE_INFINITY; + double totalWeight = 0d; + + // implementation from: https://www.keithschwarz.com/darts-dice-coins/ + // STEP 1 + this.n = builder.entries.size(); + this.values = new int[n]; + this.probabilities = new double[n]; + this.alias = new int[n]; + + // STEP 2 + double[] scaled = new double[n]; + Deque small = new ArrayDeque<>(); + Deque large = new ArrayDeque<>(); + + // STEP 3 + int index = 0; + for (var entry : builder.entries.entrySet()) { + values[index] = entry.getKey(); + + double weight = entry.getValue(); + minWeight = Math.min(minWeight, weight); + maxWeight = Math.max(maxWeight, weight); + totalWeight += weight; + + scaled[index++] = weight * n; + } + + this.totalWeight = totalWeight; + + // treat near-equal weights as equal + double span = maxWeight - minWeight; + if (span <= Math.ulp(maxWeight) * 4 || span <= 1e-12 * Math.max(1.0, maxWeight)) { + this.allWeightsEqual = true; + return; + } + this.allWeightsEqual = false; + + // STEP 4 + for (int i = 0; i < n; i++) { + if (scaled[i] < totalWeight) { + small.addLast(i); + } else { + large.addLast(i); + } + } + + // STEP 5 + while (!small.isEmpty() && !large.isEmpty()) { + int l = small.removeLast(); + int g = large.removeLast(); + probabilities[l] = scaled[l]; + alias[l] = g; + scaled[g] = scaled[g] + scaled[l] - totalWeight; + if (scaled[g] < totalWeight) { + small.addLast(g); + } else { + large.addLast(g); + } + } + + // STEP 6 + while (!large.isEmpty()) { + probabilities[large.removeLast()] = totalWeight; + } + + // STEP 7 + while (!small.isEmpty()) { + probabilities[small.removeLast()] = totalWeight; + } + } + + /** + * Samples a random value using {@link ThreadLocalRandom}. + * + * @return a sampled integer according to the configured weights + */ + public int next() { + return next(ThreadLocalRandom.current()); + } + + /** + * Samples a random value using the given random generator. + * + * @param random a {@link RandomGenerator} to use for randomness + * @return a sampled integer according to the configured weights + */ + public int next(@NotNull RandomGenerator random) { + Objects.requireNonNull(random); + + int i = random.nextInt(this.n); + if (this.allWeightsEqual) { + return values[i]; + } + + int pick = random.nextDouble(totalWeight) < probabilities[i] ? i : alias[i]; + return values[pick]; + } + + /** + * Builder for {@link WeightedRandom}. + *

+ * Values are unique; adding the same value multiple times will merge and sum their weights. + */ + public static class Builder { + + private final Map entries = new LinkedHashMap<>(); + + private Builder() { + } + + /** + * Adds a value with the given weight to the distribution. + *

+ * If the value already exists, its weight is increased by the given amount. + * + * @param value the integer value to add + * @param weight the weight associated with this value (must be positive and finite) + * @return this builder for chaining + * @throws IllegalArgumentException if {@code weight <= 0} or not finite + */ + public Builder add(int value, double weight) { + if (weight <= 0.0d || !Double.isFinite(weight)) { + throw new IllegalArgumentException("Weight has to be greater zero and finite!"); + } + + this.entries.merge(value, weight, (a, b) -> a + b); + return this; + } + + /** + * Builds a {@link WeightedRandom} from the current set of values and weights. + * + * @return a new {@link WeightedRandom} instance + * @throws IllegalStateException if no values have been added + */ + public WeightedRandom build() { + if (this.entries.isEmpty()) { + throw new IllegalStateException("No entries added!"); + } + + return new WeightedRandom(this); + } + } +} diff --git a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/ProximityHeightConditionTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/ProximityHeightConditionTest.java index e5e4c426d..25012d37b 100644 --- a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/ProximityHeightConditionTest.java +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/ProximityHeightConditionTest.java @@ -3,48 +3,49 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; + import org.junit.jupiter.api.Test; public class ProximityHeightConditionTest { - private static final int TEST_MIN = ProximityHeightCondition.clampY(-0xFFF); - private static final int TEST_MAX = ProximityHeightCondition.clampY(0xFFF); - - @Test - public void testCreateRemove() { - final int minY = -10; - final int maxY = 10; - - int flag = 0b101; - assertFalse(ProximityHeightCondition.isPresent(flag)); - - flag |= ProximityHeightCondition.create(minY, maxY); - assertTrue(ProximityHeightCondition.isPresent(flag)); - assertEquals(minY, ProximityHeightCondition.getMinY(flag)); - assertEquals(maxY, ProximityHeightCondition.getMaxY(flag)); - - for (int y = TEST_MIN; y <= TEST_MAX; y++) { - boolean expected = minY <= y && maxY >= y; - assertEquals(expected, ProximityHeightCondition.match(flag, y), "failed for " + y); - } - - int other = ProximityHeightCondition.create(minY, maxY); - assertTrue(ProximityHeightCondition.equals(flag, other)); - - flag = ProximityHeightCondition.remove(flag); - assertEquals(0b101, flag); - } - - @Test - public void testReadWrite() { - for (int minY = TEST_MIN; minY <= TEST_MAX; minY++) { - for (int maxY = minY; maxY <= TEST_MAX; maxY++) { - int flag = ProximityHeightCondition.create(minY, maxY); - - assertTrue(ProximityHeightCondition.isPresent(flag)); - assertEquals(minY, ProximityHeightCondition.getMinY(flag)); - assertEquals(maxY, ProximityHeightCondition.getMaxY(flag)); - } - } - } + private static final int TEST_MIN = ProximityHeightCondition.clampY(-0xFFF); + private static final int TEST_MAX = ProximityHeightCondition.clampY(0xFFF); + + @Test + public void testCreateRemove() { + final int minY = -10; + final int maxY = 10; + + int flag = 0b101; + assertFalse(ProximityHeightCondition.isPresent(flag)); + + flag |= ProximityHeightCondition.create(minY, maxY); + assertTrue(ProximityHeightCondition.isPresent(flag)); + assertEquals(minY, ProximityHeightCondition.getMinY(flag)); + assertEquals(maxY, ProximityHeightCondition.getMaxY(flag)); + + for (int y = TEST_MIN; y <= TEST_MAX; y++) { + boolean expected = minY <= y && maxY >= y; + assertEquals(expected, ProximityHeightCondition.match(flag, y), "failed for " + y); + } + + int other = ProximityHeightCondition.create(minY, maxY); + assertTrue(ProximityHeightCondition.equals(flag, other)); + + flag = ProximityHeightCondition.remove(flag); + assertEquals(0b101, flag); + } + + @Test + public void testReadWrite() { + for (int minY = TEST_MIN; minY <= TEST_MAX; minY++) { + for (int maxY = minY; maxY <= TEST_MAX; maxY++) { + int flag = ProximityHeightCondition.create(minY, maxY); + + assertTrue(ProximityHeightCondition.isPresent(flag)); + assertEquals(minY, ProximityHeightCondition.getMinY(flag)); + assertEquals(maxY, ProximityHeightCondition.getMaxY(flag)); + } + } + } } diff --git a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSectionTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSectionTest.java index a100dc74c..9267e220b 100644 --- a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSectionTest.java +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSectionTest.java @@ -281,9 +281,9 @@ void testGetDouble() { section.set("number", 1); section.set("other", true); - assertEquals(1L, section.getDouble("double")); - assertEquals(1L, section.getDouble("doubleObject")); - assertEquals(1L, section.getDouble("number")); + assertEquals(1d, section.getDouble("double")); + assertEquals(1d, section.getDouble("doubleObject")); + assertEquals(1d, section.getDouble("number")); assertNull(section.getDouble("other")); assertNull(section.getDouble("unknown")); } diff --git a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/ConstructorAccessorTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/ConstructorAccessorTest.java index b87c0b019..f566f277c 100644 --- a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/ConstructorAccessorTest.java +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/ConstructorAccessorTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; + import java.util.List; import org.junit.jupiter.api.Test; @@ -36,8 +37,8 @@ void testInvokeVarargs() throws Exception { var constructor = ConstructorTest.class.getDeclaredConstructor(String[].class); var accessor = Accessors.wrap(constructor); - var values = new String[] {"a", "b", "c"}; - var instance = (ConstructorTest) accessor.invoke(new Object[] {values}); + var values = new String[]{"a", "b", "c"}; + var instance = (ConstructorTest) accessor.invoke(new Object[]{values}); assertEquals(List.of(values), instance.values); assertThrows(IllegalStateException.class, () -> accessor.invoke(1)); diff --git a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/FieldAccessorTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/FieldAccessorTest.java index 6c78a8002..0ed961048 100644 --- a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/FieldAccessorTest.java +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/FieldAccessorTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; + import org.junit.jupiter.api.Test; class FieldAccessorTest { diff --git a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/MethodAccessorTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/MethodAccessorTest.java index 1093527eb..ff48df2d1 100644 --- a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/MethodAccessorTest.java +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/reflect/accessor/MethodAccessorTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; + import java.util.Arrays; import org.junit.jupiter.api.Test; @@ -21,7 +22,7 @@ void testWrapMethod() throws Exception { } @Test - @SuppressWarnings("deprecation") + @SuppressWarnings("deprecation") void testWrapStaticMethod() throws Exception { var method = MethodTest.class.getMethod("staticSum", int.class, int.class); assertFalse(method.isAccessible()); @@ -46,8 +47,8 @@ void testInvokeVarargs() throws Exception { var method = MethodTest.class.getDeclaredMethod("sum", int.class, int[].class); var accessor = Accessors.wrap(method); - assertEquals(10, accessor.invoke(MethodTest.INSTANCE, 1, new int[] {2, 3, 4})); - assertThrows(IllegalStateException.class, () -> accessor.invoke(null, 1, new int[] {2, 3, 4})); + assertEquals(10, accessor.invoke(MethodTest.INSTANCE, 1, new int[]{2, 3, 4})); + assertThrows(IllegalStateException.class, () -> accessor.invoke(null, 1, new int[]{2, 3, 4})); } @Test @@ -64,8 +65,8 @@ void testStaticInvokeVarargs() throws Exception { var method = MethodTest.class.getDeclaredMethod("staticSum", int.class, int[].class); var accessor = Accessors.wrap(method); - assertEquals(10, accessor.invoke(null, 1, new int[] {2, 3, 4})); - assertEquals(10, accessor.invoke("ab", 1, new int[] {2, 3, 4})); + assertEquals(10, accessor.invoke(null, 1, new int[]{2, 3, 4})); + assertEquals(10, accessor.invoke("ab", 1, new int[]{2, 3, 4})); } public static class MethodTest { diff --git a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/BlockPosTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/BlockPosTest.java index 454c1e48a..54fdc2ba3 100644 --- a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/BlockPosTest.java +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/BlockPosTest.java @@ -1,43 +1,44 @@ package dev.imprex.orebfuscator.util; import static org.junit.jupiter.api.Assertions.assertEquals; + import org.junit.jupiter.api.Test; public class BlockPosTest { - @Test - public void testLongFormat() { - BlockPos positionA = new BlockPos(-52134, BlockPos.MAX_Y, 6243234); - BlockPos positionB = new BlockPos(0, BlockPos.MIN_Y, -4); - BlockPos positionC = new BlockPos(15, 0, -5663423); - BlockPos positionD = new BlockPos(21523, 16, -5663423); - - long valueA = positionA.toLong(); - long valueB = positionB.toLong(); - long valueC = positionC.toLong(); - long valueD = positionD.toLong(); - - assertEquals(positionA, BlockPos.fromLong(valueA)); - assertEquals(positionB, BlockPos.fromLong(valueB)); - assertEquals(positionC, BlockPos.fromLong(valueC)); - assertEquals(positionD, BlockPos.fromLong(valueD)); - } - - @Test - public void testSectionPos() { - final int chunkX = -42 << 4; - final int chunkZ = 6521 << 4; - - BlockPos positionA = new BlockPos(chunkX + 8, BlockPos.MAX_Y, chunkZ); - BlockPos positionB = new BlockPos(chunkX, BlockPos.MIN_Y, chunkZ + 15); - BlockPos positionC = new BlockPos(chunkX + 15, 0, chunkZ + 4); - - int sectionPosA = positionA.toSectionPos(); - int sectionPosB = positionB.toSectionPos(); - int sectionPosC = positionC.toSectionPos(); - - assertEquals(positionA, BlockPos.fromSectionPos(chunkX, chunkZ, sectionPosA)); - assertEquals(positionB, BlockPos.fromSectionPos(chunkX, chunkZ, sectionPosB)); - assertEquals(positionC, BlockPos.fromSectionPos(chunkX, chunkZ, sectionPosC)); - } + @Test + public void testLongFormat() { + BlockPos positionA = new BlockPos(-52134, BlockPos.MAX_Y, 6243234); + BlockPos positionB = new BlockPos(0, BlockPos.MIN_Y, -4); + BlockPos positionC = new BlockPos(15, 0, -5663423); + BlockPos positionD = new BlockPos(21523, 16, -5663423); + + long valueA = positionA.toLong(); + long valueB = positionB.toLong(); + long valueC = positionC.toLong(); + long valueD = positionD.toLong(); + + assertEquals(positionA, BlockPos.fromLong(valueA)); + assertEquals(positionB, BlockPos.fromLong(valueB)); + assertEquals(positionC, BlockPos.fromLong(valueC)); + assertEquals(positionD, BlockPos.fromLong(valueD)); + } + + @Test + public void testSectionPos() { + final int chunkX = -42 << 4; + final int chunkZ = 6521 << 4; + + BlockPos positionA = new BlockPos(chunkX + 8, BlockPos.MAX_Y, chunkZ); + BlockPos positionB = new BlockPos(chunkX, BlockPos.MIN_Y, chunkZ + 15); + BlockPos positionC = new BlockPos(chunkX + 15, 0, chunkZ + 4); + + int sectionPosA = positionA.toSectionPos(); + int sectionPosB = positionB.toSectionPos(); + int sectionPosC = positionC.toSectionPos(); + + assertEquals(positionA, BlockPos.fromSectionPos(chunkX, chunkZ, sectionPosA)); + assertEquals(positionB, BlockPos.fromSectionPos(chunkX, chunkZ, sectionPosB)); + assertEquals(positionC, BlockPos.fromSectionPos(chunkX, chunkZ, sectionPosC)); + } } diff --git a/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/WeightedRandomTest.java b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/WeightedRandomTest.java new file mode 100644 index 000000000..7dd6e5d0d --- /dev/null +++ b/orebfuscator-core/src/test/java/dev/imprex/orebfuscator/util/WeightedRandomTest.java @@ -0,0 +1,128 @@ +package dev.imprex.orebfuscator.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import org.junit.jupiter.api.Test; + +public class WeightedRandomTest { + + private static final long SEED = 1337; + private static final int SAMPLES = 250_000; + private static final double SIGMA = 2.0; + + private WeightedRandom createWeightedRandom(Map weights) { + var builder = WeightedRandom.builder(); + for (var entry : weights.entrySet()) { + builder.add(entry.getKey(), entry.getValue()); + } + return builder.build(); + } + + private void assertDistribution(WeightedRandom weightedRandom, Map weights, int n, long seed, + double sigma) { + Random random = new Random(seed); + + Map counts = new HashMap<>(); + for (int i = 0; i < n; i++) { + counts.merge(weightedRandom.next(random), 1, Integer::sum); + } + + double totalWeight = weights.values().stream().mapToDouble(Double::doubleValue).sum(); + + for (var entry : weights.entrySet()) { + int key = entry.getKey(); + double prob = entry.getValue() / totalWeight; + int count = counts.getOrDefault(key, 0); + double observed = count / (double) n; + + // Binomial standard deviation for frequency + double sd = Math.sqrt(prob * (1 - prob) / n); + double tol = sigma * sd; + + assertTrue(Math.abs(observed - prob) <= tol, () -> String + .format("freq for %d off: obs=%.6f exp=%.6f tol=%.6f (N=%d, sd=%.6g)", key, observed, prob, tol, n, sd)); + } + } + + @Test + public void testEmptyBuilderThrows() { + var builder = WeightedRandom.builder(); + assertThrows(IllegalStateException.class, builder::build); + } + + @Test + public void testInvalidWeightsThrow() { + var builder = WeightedRandom.builder(); + assertThrows(IllegalArgumentException.class, () -> builder.add(0, 0.0)); + assertThrows(IllegalArgumentException.class, () -> builder.add(0, -1.0)); + assertThrows(IllegalArgumentException.class, () -> builder.add(0, Double.POSITIVE_INFINITY)); + assertThrows(IllegalArgumentException.class, () -> builder.add(0, Double.NEGATIVE_INFINITY)); + } + + @Test + public void testSingleEntry() { + var weightedRandom = WeightedRandom.builder().add(42, 1.0).build(); + + for (int i = 0; i < 1000; i++) { + assertEquals(42, weightedRandom.next()); + } + } + + @Test + public void testSameSeeds() { + var distribution = Map.of(1, 0.1, 2, 0.2, 3, 0.9); + var weightedRandom = createWeightedRandom(distribution); + + Random randomA = new Random(42); + Random randomB = new Random(42); + + List sequenceA = new ArrayList<>(); + List sequenceB = new ArrayList<>(); + for (int i = 0; i < 50; i++) { + sequenceA.add(weightedRandom.next(randomA)); + sequenceB.add(weightedRandom.next(randomB)); + } + + assertEquals(sequenceA, sequenceB, "Sequences with same seed should match exactly"); + } + + @Test + public void testUniformWeights() { + var distribution = Map.of(1, 1.0, 2, 1.0, 3, 1.0, 4, 1.0); + var weightedRandom = createWeightedRandom(distribution); + assertDistribution(weightedRandom, distribution, SAMPLES, SEED, SIGMA); + } + + @Test + public void testRandomWeights() { + var distribution = Map.of(1, 0.1, 2, 0.2, 3, 0.9); + var weightedRandom = createWeightedRandom(distribution); + assertDistribution(weightedRandom, distribution, SAMPLES, SEED, SIGMA); + } + + @Test + public void testMergedWeights() { + var weightedRandom = WeightedRandom.builder() + .add(1, 0.1) + .add(2, 0.3) + .add(1, 0.9) + .build(); + + var distribution = Map.of(1, 1.0, 2, 0.3); + assertDistribution(weightedRandom, distribution, SAMPLES, SEED, SIGMA); + } + + @Test + public void testLargeWeights() { + var distribution = Map.of(1, 0.1, 2, 0.2, 3, 100.0, 4, 0.5); + var weightedRandom = createWeightedRandom(distribution); + assertDistribution(weightedRandom, distribution, SAMPLES, SEED, SIGMA); + } +} diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java index 5dcf59f77..0bc9664bd 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java @@ -19,7 +19,7 @@ public class OrebfuscatorNms { private static NmsManager instance; - public static void initialize(Config config) { + public static void initialize() { if (OrebfuscatorNms.instance != null) { throw new IllegalStateException("NMS adapter is already initialized!"); } @@ -34,8 +34,8 @@ public static void initialize(Config config) { try { String className = "net.imprex.orebfuscator.nms." + nmsVersion + ".NmsManager"; Class nmsManager = Class.forName(className).asSubclass(NmsManager.class); - Constructor constructor = nmsManager.getConstructor(Config.class); - OrebfuscatorNms.instance = constructor.newInstance(config); + Constructor constructor = nmsManager.getConstructor(); + OrebfuscatorNms.instance = constructor.newInstance(); } catch (ClassNotFoundException e) { throw new RuntimeException("Server version \"" + nmsVersion + "\" is currently not supported!", e); } catch (Exception e) { @@ -49,8 +49,8 @@ public static RegistryAccessor registry() { return instance; } - public static AbstractRegionFileCache getRegionFileCache() { - return instance.getRegionFileCache(); + public static AbstractRegionFileCache createRegionFileCache(Config config) { + return instance.createRegionFileCache(config); } public static int getUniqueBlockStateCount() { @@ -78,7 +78,7 @@ public static ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ } public static int getBlockState(World world, BlockPos position) { - return getBlockState(world, position.x, position.y, position.z); + return getBlockState(world, position.x(), position.y(), position.z()); } public static int getBlockState(World world, int x, int y, int z) { @@ -92,11 +92,4 @@ public static void sendBlockUpdates(World world, Iterable iterable) { public static void sendBlockUpdates(Player player, Iterable iterable) { instance.sendBlockUpdates(player, iterable); } - - public static void close() { - if (instance != null) { - instance.close(); - instance = null; - } - } } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java index 603393e85..eb427ad1a 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java @@ -6,7 +6,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; import dev.imprex.orebfuscator.util.BlockTag; @@ -15,8 +14,6 @@ public abstract class AbstractNmsManager implements NmsManager { - private final AbstractRegionFileCache regionFileCache; - private final int uniqueBlockStateCount; private final int maxBitsPerBlockState; @@ -24,9 +21,7 @@ public abstract class AbstractNmsManager implements NmsManager { private final Map blocks = new HashMap<>(); protected final Map tags = new HashMap<>(); - public AbstractNmsManager(int uniqueBlockStateCount, AbstractRegionFileCache regionFileCache) { - this.regionFileCache = regionFileCache; - + public AbstractNmsManager(int uniqueBlockStateCount) { this.uniqueBlockStateCount = uniqueBlockStateCount; this.maxBitsPerBlockState = MathUtil.ceilLog2(uniqueBlockStateCount); @@ -45,11 +40,6 @@ protected final void registerBlockTag(BlockTag tag) { this.tags.put(tag.key(), tag); } - @Override - public final AbstractRegionFileCache getRegionFileCache() { - return this.regionFileCache; - } - @Override public final int getUniqueBlockStateCount() { return this.uniqueBlockStateCount; @@ -84,9 +74,4 @@ public final boolean isOccluding(int id) { public final boolean isBlockEntity(int id) { return this.blockStates[id].isBlockEntity(); } - - @Override - public final void close() { - this.regionFileCache.clear(); - } } diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java index de45b7d3b..a5b95fb14 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/NmsManager.java @@ -4,12 +4,13 @@ import org.bukkit.entity.Player; import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; +import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.interop.RegistryAccessor; import dev.imprex.orebfuscator.util.BlockPos; public interface NmsManager extends RegistryAccessor { - AbstractRegionFileCache getRegionFileCache(); + AbstractRegionFileCache createRegionFileCache(Config config); ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ); @@ -18,6 +19,4 @@ public interface NmsManager extends RegistryAccessor { void sendBlockUpdates(World world, Iterable iterable); void sendBlockUpdates(Player player, Iterable iterable); - - void close(); } \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java index 4b24b7bc9..feaee8524 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java @@ -23,6 +23,7 @@ import com.comphenix.protocol.wrappers.WrappedBlockData; import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.BlockProperties; @@ -75,8 +76,8 @@ private static EntityPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.REGISTRY_ID.a(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.REGISTRY_ID.a()); for (Map.Entry, Block> entry : IRegistry.BLOCK.c()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().a().toString()); @@ -120,6 +121,11 @@ public NmsManager(Config config) { } } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ChunkProviderServer chunkProviderServer = level(world).getChunkProvider(); @@ -148,7 +154,7 @@ public void sendBlockUpdates(World world, Iterable iterable) { List> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.c(pos.x, pos.y, pos.z); + position.c(pos.x(), pos.y(), pos.z()); IBlockData blockState = level.getType(position); - ChunkCoordIntPair chunkCoord = new ChunkCoordIntPair(pos.x >> 4, pos.z >> 4); - short location = (short) ((pos.x & 0xF) << 12 | (pos.z & 0xF) << 8 | pos.y); + ChunkCoordIntPair chunkCoord = new ChunkCoordIntPair(pos.x() >> 4, pos.z() >> 4); + short location = (short) ((pos.x() & 0xF) << 12 | (pos.z() & 0xF) << 8 | pos.y()); sectionPackets.computeIfAbsent(chunkCoord, key -> new ArrayList<>()) .add(new MultiBlockChangeInfo(location, WrappedBlockData.fromHandle(blockState), chunkCoord)); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java index add5da44b..0ee56e480 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java @@ -19,6 +19,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.BlockProperties; @@ -74,8 +75,8 @@ private static EntityPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.REGISTRY_ID.a(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.REGISTRY_ID.a()); for (Map.Entry, Block> entry : IRegistry.BLOCK.d()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().a().toString()); @@ -119,6 +120,11 @@ public NmsManager(Config config) { } } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ChunkProviderServer chunkProviderServer = level(world).getChunkProvider(); @@ -147,7 +153,7 @@ public void sendBlockUpdates(World world, Iterable iterable) { List> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.c(pos.x, pos.y, pos.z); + position.c(pos.x(), pos.y(), pos.z()); IBlockData blockState = level.getType(position); sectionPackets.computeIfAbsent(SectionPosition.a(position), key -> new HashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java index 0bb7e6224..76fac25a7 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java @@ -19,6 +19,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.BlockProperties; @@ -74,8 +75,8 @@ private static EntityPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.REGISTRY_ID.a(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.REGISTRY_ID.a()); for (Map.Entry, Block> entry : IRegistry.BLOCK.d()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().a().toString()); @@ -119,6 +120,11 @@ public NmsManager(Config config) { } } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ChunkProviderServer chunkProviderServer = level(world).getChunkProvider(); @@ -147,7 +153,7 @@ public void sendBlockUpdates(World world, Iterable iterable) { List> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.c(pos.x, pos.y, pos.z); + position.c(pos.x(), pos.y(), pos.z()); IBlockData blockState = level.getType(position); sectionPackets.computeIfAbsent(SectionPosition.a(position), key -> new HashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java index a49f1291a..4f17397ad 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java @@ -19,6 +19,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : Registry.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -114,6 +115,11 @@ public NmsManager(Config config) { } } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkProvider(); @@ -142,7 +148,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new HashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java index 920bfb5b7..c2766af25 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java @@ -18,6 +18,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -74,8 +75,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : Registry.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -116,6 +117,11 @@ public NmsManager(Config config) { } } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -144,7 +150,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java index aa2bff0d0..6403b04d1 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -73,8 +74,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : Registry.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -113,6 +114,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -141,7 +147,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java index be53caced..a9530a0fb 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : Registry.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java index bb1ba0bb7..0da403209 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java index 2ffee8dd0..ef8eebf9c 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java index 6d06814cd..9fc044f2e 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java index ee38a2d72..56275b75f 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java index 29a5f834b..c85a2f03f 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java index e06424dfe..500d20888 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java index 56cd372f0..4c8494e78 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.datafixers.util.Pair; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -72,8 +73,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -112,6 +113,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -140,7 +146,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java index b0e627cf7..8345b43cb 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -71,8 +72,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -111,6 +112,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -139,7 +145,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java index 547a225a7..c59113dd5 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -71,8 +72,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -111,6 +112,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -139,7 +145,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java index 7a59c10e3..2d0a325dc 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -71,8 +72,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -111,6 +112,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -139,7 +145,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java index f85207afb..f0deefe73 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockStateProperties; @@ -71,8 +72,8 @@ private static ServerPlayer player(Player player) { return ((CraftPlayer) player).getHandle(); } - public NmsManager(Config config) { - super(Block.BLOCK_STATE_REGISTRY.size(), new RegionFileCache(config.cache())); + public NmsManager() { + super(Block.BLOCK_STATE_REGISTRY.size()); for (Map.Entry, Block> entry : BuiltInRegistries.BLOCK.entrySet()) { NamespacedKey namespacedKey = NamespacedKey.fromString(entry.getKey().location().toString()); @@ -111,6 +112,11 @@ public NmsManager(Config config) { }); } + @Override + public AbstractRegionFileCache createRegionFileCache(Config config) { + return new RegionFileCache(config.cache()); + } + @Override public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { ServerChunkCache serverChunkCache = level(world).getChunkSource(); @@ -139,7 +145,7 @@ public void sendBlockUpdates(World world, Iterable> blockEntityPackets = new ArrayList<>(); for (dev.imprex.orebfuscator.util.BlockPos pos : iterable) { - if (!serverChunkCache.isChunkLoaded(pos.x >> 4, pos.z >> 4)) { + if (!serverChunkCache.isChunkLoaded(pos.x() >> 4, pos.z() >> 4)) { continue; } - position.set(pos.x, pos.y, pos.z); + position.set(pos.x(), pos.y(), pos.z()); BlockState blockState = level.getBlockState(position); sectionPackets.computeIfAbsent(SectionPos.of(position), key -> new Short2ObjectLinkedOpenHashMap<>()) diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java index 52c2dc03f..7d64b5f2d 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java @@ -14,7 +14,6 @@ import org.bukkit.plugin.java.JavaPlugin; import dev.imprex.orebfuscator.config.OrebfuscatorConfig; -import dev.imprex.orebfuscator.config.api.Config; import dev.imprex.orebfuscator.interop.RegistryAccessor; import dev.imprex.orebfuscator.interop.ServerAccessor; import dev.imprex.orebfuscator.interop.WorldAccessor; @@ -67,7 +66,9 @@ public void onEnable() { this.statistics = new OrebfuscatorStatistics(); // Load configurations + OrebfuscatorNms.initialize(); this.config = new OrebfuscatorConfig(this); + OrebfuscatorCompatibility.initialize(this, config); this.playerMap = new OrebfuscatorPlayerMap(this); @@ -129,7 +130,6 @@ public void onDisable() { } OrebfuscatorCompatibility.close(); - OrebfuscatorNms.close(); this.config = null; } @@ -202,12 +202,4 @@ public List getWorlds() { .map(WorldAccessor.class::cast) .toList(); } - - @Override - public void initializeRegistry(Config config) { - OrebfuscatorCompatibility.initialize(this, config); - - OrebfuscatorNms.close(); - OrebfuscatorNms.initialize(config); - } } \ No newline at end of file diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java index 38ec63250..d51bf4d6f 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/AsyncChunkSerializer.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; @@ -42,9 +43,9 @@ public class AsyncChunkSerializer implements Runnable { private final Thread thread; private volatile boolean running = true; - public AsyncChunkSerializer(Orebfuscator orebfuscator) { + public AsyncChunkSerializer(Orebfuscator orebfuscator, AbstractRegionFileCache regionFileCache) { this.maxTaskQueueSize = orebfuscator.getOrebfuscatorConfig().cache().maximumTaskQueueSize(); - this.serializer = new ChunkSerializer(); + this.serializer = new ChunkSerializer(regionFileCache); this.thread = new Thread(Orebfuscator.THREAD_GROUP, this, "ofc-chunk-serializer"); this.thread.setDaemon(true); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java index 2a47ddf34..84c0c0ffc 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/CacheFileCleanupTask.java @@ -9,18 +9,19 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; -import net.imprex.orebfuscator.Orebfuscator; -import net.imprex.orebfuscator.OrebfuscatorNms; import dev.imprex.orebfuscator.logging.OfcLogger; +import net.imprex.orebfuscator.Orebfuscator; public class CacheFileCleanupTask implements Runnable { private final CacheConfig cacheConfig; + private final AbstractRegionFileCache regionFileCache; private int deleteCount = 0; - public CacheFileCleanupTask(Orebfuscator orebfuscator) { + public CacheFileCleanupTask(Orebfuscator orebfuscator, AbstractRegionFileCache regionFileCache) { this.cacheConfig = orebfuscator.getOrebfuscatorConfig().cache(); + this.regionFileCache = regionFileCache; } @Override @@ -31,7 +32,6 @@ public void run() { } long deleteAfterMillis = this.cacheConfig.deleteRegionFilesAfterAccess(); - AbstractRegionFileCache regionFileCache = OrebfuscatorNms.getRegionFileCache(); this.deleteCount = 0; diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java index b3c373272..67c1ef87f 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ChunkSerializer.java @@ -9,13 +9,16 @@ import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.util.ChunkCacheKey; -import net.imprex.orebfuscator.OrebfuscatorNms; public class ChunkSerializer { private static final int CACHE_VERSION = 2; - private final AbstractRegionFileCache regionFileCache = OrebfuscatorNms.getRegionFileCache(); + private final AbstractRegionFileCache regionFileCache; + + public ChunkSerializer(AbstractRegionFileCache regionFileCache) { + this.regionFileCache = regionFileCache; + } @Nullable public CacheChunkEntry read(@NotNull ChunkCacheKey key) throws IOException { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java index f3a7318cf..913ac52d6 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java @@ -9,10 +9,12 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.RemovalNotification; +import dev.imprex.orebfuscator.cache.AbstractRegionFileCache; import dev.imprex.orebfuscator.config.api.CacheConfig; import dev.imprex.orebfuscator.util.ChunkCacheKey; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; +import net.imprex.orebfuscator.OrebfuscatorNms; import net.imprex.orebfuscator.OrebfuscatorStatistics; import net.imprex.orebfuscator.obfuscation.ObfuscationRequest; import net.imprex.orebfuscator.obfuscation.ObfuscationResult; @@ -22,6 +24,7 @@ public class ObfuscationCache { private final CacheConfig cacheConfig; private final OrebfuscatorStatistics statistics; + private final AbstractRegionFileCache regionFileCache; private final Cache cache; private final AsyncChunkSerializer serializer; @@ -36,14 +39,16 @@ public ObfuscationCache(Orebfuscator orebfuscator) { .build(); this.statistics.setMemoryCacheSizeSupplier(() -> this.cache.size()); + this.regionFileCache = OrebfuscatorNms.createRegionFileCache(orebfuscator.getOrebfuscatorConfig()); + if (this.cacheConfig.enableDiskCache()) { - this.serializer = new AsyncChunkSerializer(orebfuscator); + this.serializer = new AsyncChunkSerializer(orebfuscator, regionFileCache); } else { this.serializer = null; } if (this.cacheConfig.enabled() && this.cacheConfig.deleteRegionFilesAfterAccess() > 0) { - OrebfuscatorCompatibility.runAsyncAtFixedRate(new CacheFileCleanupTask(orebfuscator), 0, 72000L); + OrebfuscatorCompatibility.runAsyncAtFixedRate(new CacheFileCleanupTask(orebfuscator, regionFileCache), 0, 72000L); } } @@ -122,7 +127,7 @@ public void invalidate(ChunkCacheKey key) { } public void close() { - if (this.cacheConfig.enableDiskCache()) { + if (this.serializer != null) { // flush memory cache to disk on shutdown this.cache.asMap().entrySet().removeIf(entry -> { this.serializer.write(entry.getKey(), entry.getValue()); @@ -131,5 +136,7 @@ public void close() { this.serializer.close(); } + + this.regionFileCache.clear(); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java index cfbe83519..0e22f59cb 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityWorker.java @@ -125,8 +125,8 @@ private void process(Player player) { // check if block AABB is inside frustum int result = frustum.intersectAab( - blockPos.x, blockPos.y, blockPos.z, - blockPos.x + 1, blockPos.y + 1, blockPos.z + 1); + blockPos.x(), blockPos.y(), blockPos.z(), + blockPos.x() + 1, blockPos.y() + 1, blockPos.z() + 1); // block is outside if (result != FrustumIntersection.INSIDE && result != FrustumIntersection.INTERSECT) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java index 423dee362..f928e01aa 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/FastGazeUtil.java @@ -22,9 +22,9 @@ public static boolean doFastCheck(BlockPos pos, Location eyes, World player, boo double ex = eyes.getX(); double ey = eyes.getY(); double ez = eyes.getZ(); - double x = pos.x; - double y = pos.y; - double z = pos.z; + double x = pos.x(); + double y = pos.y(); + double z = pos.z(); if (onlyCheckCenter) { return // center FastGazeUtil.fastAABBRayCheck(x, y, z, x + 0.5, y + 0.5, z + 0.5, ex, ey, ez, player); From 23ef9cb5441bfbe4fca1b62d78c79a558e274b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Fri, 5 Sep 2025 23:16:56 +0200 Subject: [PATCH 08/14] feat: support modded blocks --- .../config/components/WeightedBlockList.java | 4 +- .../orebfuscator/nms/v1_16_R1/NmsManager.java | 11 +----- .../orebfuscator/nms/v1_16_R2/NmsManager.java | 11 +----- .../orebfuscator/nms/v1_16_R3/NmsManager.java | 11 +----- .../orebfuscator/nms/v1_17_R1/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_18_R1/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_18_R2/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_19_R1/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_19_R2/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_19_R3/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_20_R1/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_20_R2/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_20_R3/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_20_R4/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_21_R1/NmsManager.java | 8 +--- .../orebfuscator/nms/v1_21_R2/NmsManager.java | 7 +--- .../orebfuscator/nms/v1_21_R3/NmsManager.java | 7 +--- .../orebfuscator/nms/v1_21_R4/NmsManager.java | 7 +--- .../orebfuscator/nms/v1_21_R5/NmsManager.java | 7 +--- .../orebfuscator/OrebfuscatorStatistics.java | 39 +++++++++++++++---- .../obfuscation/ObfuscationListener.java | 11 ++++++ .../orebfuscator/util/RingLongBuffer.java | 38 ++++++++++++++++++ 22 files changed, 115 insertions(+), 126 deletions(-) create mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java index 18770609e..9c5e9c5b0 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java @@ -45,9 +45,9 @@ public static WeightedRandom[] create(WorldAccessor world, List entry : list.blocks.entrySet()) { - // TODO: only default state or all block states? compression size? + // TODO: add support for other block states in future var blockStates = entry.getKey().blocks().stream() - .flatMap(block -> block.getBlockStates().stream()) + .map(block -> block.getDefaultBlockState()) .collect(Collectors.toSet()); double weight = (double) entry.getValue() / (double) blockStates.size(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java index feaee8524..49fa951d0 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Objects; import java.util.Set; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R1.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -33,6 +31,7 @@ import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; import net.minecraft.server.v1_16_R1.Block; +import net.minecraft.server.v1_16_R1.BlockAccessAir; import net.minecraft.server.v1_16_R1.BlockPosition; import net.minecraft.server.v1_16_R1.Blocks; import net.minecraft.server.v1_16_R1.Chunk; @@ -87,15 +86,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (IBlockData blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getCombinedId(blockState)) .withIsAir(blockState.isAir()) - /** - * l -> for barrier/slime_block/spawner/leaves - * isOccluding -> for every other block - */ - .withIsOccluding(material.isOccluding() && blockState.l()/*canOcclude*/) + .withIsOccluding(blockState.i(BlockAccessAir.INSTANCE, BlockPosition.ZERO)/*isSolidRender*/) .withIsBlockEntity(block.isTileEntity()) .withIsDefaultState(Objects.equals(block.getBlockData(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java index 0ee56e480..633139c8e 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Objects; import java.util.Set; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R2.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -29,6 +27,7 @@ import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; import net.minecraft.server.v1_16_R2.Block; +import net.minecraft.server.v1_16_R2.BlockAccessAir; import net.minecraft.server.v1_16_R2.BlockPosition; import net.minecraft.server.v1_16_R2.Blocks; import net.minecraft.server.v1_16_R2.Chunk; @@ -86,15 +85,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (IBlockData blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getCombinedId(blockState)) .withIsAir(blockState.isAir()) - /** - * l -> for barrier/slime_block/spawner/leaves - * isOccluding -> for every other block - */ - .withIsOccluding(material.isOccluding() && blockState.l()/*canOcclude*/) + .withIsOccluding(blockState.i(BlockAccessAir.INSTANCE, BlockPosition.ZERO)/*isSolidRender*/) .withIsBlockEntity(block.isTileEntity()) .withIsDefaultState(Objects.equals(block.getBlockData(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java index 76fac25a7..e1952aff3 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Objects; import java.util.Set; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R3.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -29,6 +27,7 @@ import net.imprex.orebfuscator.nms.AbstractNmsManager; import net.imprex.orebfuscator.nms.ReadOnlyChunk; import net.minecraft.server.v1_16_R3.Block; +import net.minecraft.server.v1_16_R3.BlockAccessAir; import net.minecraft.server.v1_16_R3.BlockPosition; import net.minecraft.server.v1_16_R3.Blocks; import net.minecraft.server.v1_16_R3.Chunk; @@ -86,15 +85,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (IBlockData blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getCombinedId(blockState)) .withIsAir(blockState.isAir()) - /** - * l -> for barrier/slime_block/spawner/leaves - * isOccluding -> for every other block - */ - .withIsOccluding(material.isOccluding() && blockState.l()/*canOcclude*/) + .withIsOccluding(blockState.i(BlockAccessAir.INSTANCE, BlockPosition.ZERO)/*isSolidRender*/) .withIsBlockEntity(block.isTileEntity()) .withIsDefaultState(Objects.equals(block.getBlockData(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java index 4f17397ad..354af82f1 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java @@ -8,10 +8,8 @@ import java.util.Objects; import java.util.Set; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_17_R1.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.tags.BlockTags; import net.minecraft.tags.Tag; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java index c2766af25..0f97c77a5 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java @@ -8,10 +8,8 @@ import java.util.Objects; import java.util.Set; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_18_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R1.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -42,6 +40,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.tags.BlockTags; import net.minecraft.tags.Tag; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -86,12 +85,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java index 6403b04d1..31dc13326 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -41,6 +39,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -85,12 +84,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java index a9530a0fb..a2c90a75f 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java index 0da403209..b8195d365 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R2.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java index ef8eebf9c..600b2d106 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R3.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java index 9fc044f2e..c26dfd020 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R1/src/main/java/net/imprex/orebfuscator/nms/v1_20_R1/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java index 56275b75f..91bec71a6 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R2/src/main/java/net/imprex/orebfuscator/nms/v1_20_R2/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R2.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java index c85a2f03f..aaba94744 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R3/src/main/java/net/imprex/orebfuscator/nms/v1_20_R3/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R3.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_20_R3.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java index 500d20888..9b60b1c97 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_20_R4/src/main/java/net/imprex/orebfuscator/nms/v1_20_R4/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_20_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R4.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_20_R4.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java index 4c8494e78..da6a448a9 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R1/src/main/java/net/imprex/orebfuscator/nms/v1_21_R1/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_21_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R1.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_21_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -40,6 +38,7 @@ import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.EmptyBlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -84,12 +83,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java index 8345b43cb..53e409bd2 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R2/src/main/java/net/imprex/orebfuscator/nms/v1_21_R2/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R2.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -83,12 +81,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender()) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java index c59113dd5..52a6b30e1 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R3/src/main/java/net/imprex/orebfuscator/nms/v1_21_R3/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R3.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -83,12 +81,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender()) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java index 2d0a325dc..a3f718f89 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R4/src/main/java/net/imprex/orebfuscator/nms/v1_21_R4/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_21_R4.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R4.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_21_R4.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -83,12 +81,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender()) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java index f0deefe73..b1877dace 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java +++ b/orebfuscator-nms/orebfuscator-nms-v1_21_R5/src/main/java/net/imprex/orebfuscator/nms/v1_21_R5/NmsManager.java @@ -9,10 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_21_R5.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R5.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_21_R5.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -83,12 +81,9 @@ public NmsManager() { BlockProperties.Builder builder = BlockProperties.builder(namespacedKey); for (BlockState blockState : possibleBlockStates) { - Material material = CraftBlockData.fromData(blockState).getMaterial(); - BlockStateProperties properties = BlockStateProperties.builder(Block.getId(blockState)) .withIsAir(blockState.isAir()) - // check if material is occluding and use blockData check for rare edge cases like barrier, spawner, slime_block, ... - .withIsOccluding(material.isOccluding() && blockState.canOcclude()) + .withIsOccluding(blockState.isSolidRender()) .withIsBlockEntity(blockState.hasBlockEntity()) .withIsDefaultState(Objects.equals(block.defaultBlockState(), blockState)) .build(); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java index d786c0083..63f0e04af 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java @@ -45,6 +45,8 @@ private static String formatBytes(long bytes) { private LongSupplier obfuscationProcessTime = () -> 0; private LongSupplier proximityWaitTime = () -> 0; private LongSupplier proximityProcessTime = () -> 0; + private LongSupplier originalChunkSize = () -> 0; + private LongSupplier obfuscatedChunkSize = () -> 0; public void onCacheHitMemory() { this.cacheHitCountMemory.incrementAndGet(); @@ -90,6 +92,14 @@ public void setProximityProcessTime(LongSupplier supplier) { this.proximityProcessTime = Objects.requireNonNull(supplier); } + public void setOriginalChunkSize(LongSupplier supplier) { + this.originalChunkSize = Objects.requireNonNull(supplier); + } + + public void setObfuscatedChunkSize(LongSupplier supplier) { + this.obfuscatedChunkSize = Objects.requireNonNull(supplier); + } + @Override public String toString() { long cacheHitCountMemory = this.cacheHitCountMemory.get(); @@ -108,7 +118,7 @@ public String toString() { memoryCacheHitRate = (double) cacheHitCountMemory / totalCacheRequest; diskCacheHitRate = (double) cacheHitCountDisk / totalCacheRequest; } - + long memoryCacheBytesPerEntry = 0; if (memoryCacheSize > 0) { memoryCacheBytesPerEntry = cacheEstimatedSize / memoryCacheSize; @@ -134,9 +144,9 @@ public String toString() { } builder.append(" - obfuscation (wait/process/utilization): ") - .append(formatNanos(obfuscationWaitTime)).append(" | ") - .append(formatNanos(obfuscationProcessTime)).append(" | ") - .append(formatPrecent(obfuscationUtilization)).append('\n'); + .append(formatNanos(obfuscationWaitTime)).append(" | ") + .append(formatNanos(obfuscationProcessTime)).append(" | ") + .append(formatPrecent(obfuscationUtilization)).append('\n'); long proximityWaitTime = this.proximityWaitTime.getAsLong(); long proximityProcessTime = this.proximityProcessTime.getAsLong(); @@ -148,9 +158,22 @@ public String toString() { } builder.append(" - proximity (wait/process/utilization): ") - .append(formatNanos(proximityWaitTime)).append(" | ") - .append(formatNanos(proximityProcessTime)).append(" | ") - .append(formatPrecent(proximityUtilization)).append('\n'); + .append(formatNanos(proximityWaitTime)).append(" | ") + .append(formatNanos(proximityProcessTime)).append(" | ") + .append(formatPrecent(proximityUtilization)).append('\n'); + + long originalChunkSize = this.originalChunkSize.getAsLong(); + long obfuscatedChunkSize = this.obfuscatedChunkSize.getAsLong(); + + double ratio = 1; + if (originalChunkSize > 0) { + ratio = (double) obfuscatedChunkSize / originalChunkSize; + } + + builder.append(" - size (original/obfuscated/ratio): ") + .append(formatBytes(originalChunkSize)).append(" | ") + .append(formatBytes(obfuscatedChunkSize)).append(" | ") + .append(formatPrecent(ratio)).append('\n'); return builder.toString(); } @@ -169,6 +192,8 @@ public JsonObject toJson() { object.addProperty("obfuscationProcessTime", this.obfuscationProcessTime.getAsLong()); object.addProperty("proximityWaitTime", this.proximityWaitTime.getAsLong()); object.addProperty("proximityProcessTime", this.proximityProcessTime.getAsLong()); + object.addProperty("originalChunkSize", this.originalChunkSize.getAsLong()); + object.addProperty("obfuscatedChunkSize", this.obfuscatedChunkSize.getAsLong()); return object; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java index 645591c37..664963ad9 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java @@ -30,6 +30,7 @@ import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.PermissionUtil; +import net.imprex.orebfuscator.util.RingLongBuffer; import net.imprex.orebfuscator.util.ServerVersion; public class ObfuscationListener extends PacketAdapter { @@ -56,6 +57,9 @@ private static PacketType tryGetPacketType(PacketTypeEnum packetTypeEnum, String private final AsynchronousManager asynchronousManager; private final AsyncListenerHandler asyncListenerHandler; + private final RingLongBuffer originalSize = new RingLongBuffer(1000); + private final RingLongBuffer obfuscatedSize = new RingLongBuffer(1000); + public ObfuscationListener(Orebfuscator orebfuscator) { super(orebfuscator, PACKET_TYPES.stream() .filter(Objects::nonNull) @@ -74,6 +78,10 @@ public ObfuscationListener(Orebfuscator orebfuscator) { } else { this.asyncListenerHandler.start(); } + + var statistics = orebfuscator.getStatistics(); + statistics.setOriginalChunkSize(() -> (long) originalSize.average()); + statistics.setObfuscatedChunkSize(() -> (long) obfuscatedSize.average()); } public void unregister() { @@ -142,6 +150,9 @@ private void completeExceptionally(PacketEvent event, ChunkStruct struct, Throwa } private void complete(PacketEvent event, ChunkStruct struct, ObfuscationResult chunk) { + originalSize.add(struct.data.length); + obfuscatedSize.add(chunk.getData().length); + struct.setDataBuffer(chunk.getData()); Set blockEntities = chunk.getBlockEntities(); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java new file mode 100644 index 000000000..8b8cd2141 --- /dev/null +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java @@ -0,0 +1,38 @@ +package net.imprex.orebfuscator.util; + +public class RingLongBuffer { + + private final long[] buffer; + + private int size; + private int head; + + public RingLongBuffer(int size) { + this.buffer = new long[size]; + } + + public double average() { + if (size == 0) { + return 0; + } + + double sum = 0; + for (int i = 0; i < size; i++) { + sum += buffer[i]; + } + + return sum / size; + } + + public synchronized void add(long time) { + buffer[head++] = time; + + if (head >= buffer.length) { + head = 0; + } + + if (size < buffer.length) { + size++; + } + } +} From f6e395c440c890cd3b682cf4b54f31b270e95f02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Sat, 6 Sep 2025 00:22:11 +0200 Subject: [PATCH 09/14] feat: improve performance of packet size stats --- .../obfuscation/ObfuscationListener.java | 6 +-- .../orebfuscator/util/RingLongBuffer.java | 38 ----------------- .../orebfuscator/util/RollingAverage.java | 42 +++++++++++++++++++ 3 files changed, 45 insertions(+), 41 deletions(-) delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java create mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java index 664963ad9..7e80dc8bc 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java @@ -30,7 +30,7 @@ import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.PermissionUtil; -import net.imprex.orebfuscator.util.RingLongBuffer; +import net.imprex.orebfuscator.util.RollingAverage; import net.imprex.orebfuscator.util.ServerVersion; public class ObfuscationListener extends PacketAdapter { @@ -57,8 +57,8 @@ private static PacketType tryGetPacketType(PacketTypeEnum packetTypeEnum, String private final AsynchronousManager asynchronousManager; private final AsyncListenerHandler asyncListenerHandler; - private final RingLongBuffer originalSize = new RingLongBuffer(1000); - private final RingLongBuffer obfuscatedSize = new RingLongBuffer(1000); + private final RollingAverage originalSize = new RollingAverage(2048); + private final RollingAverage obfuscatedSize = new RollingAverage(2048); public ObfuscationListener(Orebfuscator orebfuscator) { super(orebfuscator, PACKET_TYPES.stream() diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java deleted file mode 100644 index 8b8cd2141..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RingLongBuffer.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.imprex.orebfuscator.util; - -public class RingLongBuffer { - - private final long[] buffer; - - private int size; - private int head; - - public RingLongBuffer(int size) { - this.buffer = new long[size]; - } - - public double average() { - if (size == 0) { - return 0; - } - - double sum = 0; - for (int i = 0; i < size; i++) { - sum += buffer[i]; - } - - return sum / size; - } - - public synchronized void add(long time) { - buffer[head++] = time; - - if (head >= buffer.length) { - head = 0; - } - - if (size < buffer.length) { - size++; - } - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java new file mode 100644 index 000000000..fbf34ede0 --- /dev/null +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java @@ -0,0 +1,42 @@ +package net.imprex.orebfuscator.util; + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.util.concurrent.atomic.AtomicInteger; + +public class RollingAverage { + + private static final VarHandle BUFFER_HANDLE = MethodHandles.arrayElementVarHandle(long[].class); + + private final long[] buffer; + + private final AtomicInteger head = new AtomicInteger(0); + private final AtomicInteger size = new AtomicInteger(0); + + public RollingAverage(int capacity) { + this.buffer = new long[capacity]; + } + + public void add(long value) { + int index = head.getAndUpdate(h -> (h + 1) % buffer.length); + BUFFER_HANDLE.setRelease(buffer, index, value); + + if (size.get() < buffer.length) { + size.updateAndGet(s -> s < buffer.length ? s + 1 : s); + } + } + + public double average() { + int size = this.size.get(); + if (size == 0) { + return 0; + } + + double sum = 0; + for (int i = 0; i < size; i++) { + sum += (long) BUFFER_HANDLE.getAcquire(buffer, i); + } + + return sum / size; + } +} From db848c12f157cbcf52f69b6321ebf9393b3f2eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Sat, 6 Sep 2025 00:37:36 +0200 Subject: [PATCH 10/14] chore: RollingAverage formatting --- .../imprex/orebfuscator/util/RollingAverage.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java index fbf34ede0..5d665e7f6 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/RollingAverage.java @@ -10,20 +10,20 @@ public class RollingAverage { private final long[] buffer; - private final AtomicInteger head = new AtomicInteger(0); - private final AtomicInteger size = new AtomicInteger(0); + private final AtomicInteger head = new AtomicInteger(0); + private final AtomicInteger size = new AtomicInteger(0); public RollingAverage(int capacity) { - this.buffer = new long[capacity]; + this.buffer = new long[capacity]; } public void add(long value) { - int index = head.getAndUpdate(h -> (h + 1) % buffer.length); - BUFFER_HANDLE.setRelease(buffer, index, value); + int index = head.getAndUpdate(h -> (h + 1) % buffer.length); + BUFFER_HANDLE.setRelease(buffer, index, value); - if (size.get() < buffer.length) { - size.updateAndGet(s -> s < buffer.length ? s + 1 : s); - } + if (size.get() < buffer.length) { + size.updateAndGet(s -> s < buffer.length ? s + 1 : s); + } } public double average() { From bfb9e26b38cff5339d03227e6c610a83630a0b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Sun, 7 Sep 2025 00:47:01 +0200 Subject: [PATCH 11/14] chore: use groupId ('dev.imprex.orebfuscator') for core --- orebfuscator-core/pom.xml | 2 +- orebfuscator-nms/orebfuscator-nms-api/pom.xml | 2 +- orebfuscator-plugin/pom.xml | 2 +- .../java/net/imprex/orebfuscator/OrebfuscatorStatistics.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/orebfuscator-core/pom.xml b/orebfuscator-core/pom.xml index b823d0ac4..7029ecbb5 100644 --- a/orebfuscator-core/pom.xml +++ b/orebfuscator-core/pom.xml @@ -9,7 +9,7 @@ ${revision} - dev.imprex + dev.imprex.orebfuscator orebfuscator-core jar diff --git a/orebfuscator-nms/orebfuscator-nms-api/pom.xml b/orebfuscator-nms/orebfuscator-nms-api/pom.xml index 15542a52c..172b872c8 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/pom.xml +++ b/orebfuscator-nms/orebfuscator-nms-api/pom.xml @@ -18,7 +18,7 @@ provided - dev.imprex + dev.imprex.orebfuscator orebfuscator-core ${revision} compile diff --git a/orebfuscator-plugin/pom.xml b/orebfuscator-plugin/pom.xml index d3f0b39b9..d6f39b8cd 100644 --- a/orebfuscator-plugin/pom.xml +++ b/orebfuscator-plugin/pom.xml @@ -118,7 +118,7 @@ compile - dev.imprex + dev.imprex.orebfuscator orebfuscator-core ${revision} compile diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java index 63f0e04af..adbf1bb5f 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorStatistics.java @@ -170,7 +170,7 @@ public String toString() { ratio = (double) obfuscatedChunkSize / originalChunkSize; } - builder.append(" - size (original/obfuscated/ratio): ") + builder.append(" - chunk size (original/obfuscated/ratio): ") .append(formatBytes(originalChunkSize)).append(" | ") .append(formatBytes(obfuscatedChunkSize)).append(" | ") .append(formatPrecent(ratio)).append('\n'); From eb0cf32b9147ad3f3f6b51aa4191d491d0aede54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Thu, 11 Sep 2025 00:08:44 +0200 Subject: [PATCH 12/14] chore: minor core config cleanup --- .../config/AbstractWorldConfig.java | 6 +- .../config/OrebfuscatorAdvancedConfig.java | 27 ++++---- .../config/OrebfuscatorCacheConfig.java | 9 ++- .../config/OrebfuscatorConfig.java | 20 ++---- .../config/OrebfuscatorObfuscationConfig.java | 14 ++-- .../config/OrebfuscatorProximityConfig.java | 15 +++-- .../config/api/WorldConfigBundle.java | 4 -- .../config/{ => components}/BlockParser.java | 65 ++++++++++++------- .../config/components/WeightedBlockList.java | 9 +-- .../config/yaml/YamlConfiguration.java | 1 - .../orebfuscator/logging/OfcLogger.java | 6 +- 11 files changed, 91 insertions(+), 85 deletions(-) rename orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/{ => components}/BlockParser.java (59%) diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java index e633d8c27..deea607cf 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java @@ -4,12 +4,12 @@ import java.util.List; import java.util.stream.Collectors; import dev.imprex.orebfuscator.config.api.WorldConfig; +import dev.imprex.orebfuscator.config.components.BlockParser; import dev.imprex.orebfuscator.config.components.WeightedBlockList; import dev.imprex.orebfuscator.config.components.WorldMatcher; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.config.yaml.ConfigurationSection; -import dev.imprex.orebfuscator.interop.RegistryAccessor; import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockPos; @@ -62,7 +62,7 @@ protected void serializeBase(ConfigurationSection section) { .collect(Collectors.toList())); } - protected void deserializeRandomBlocks(RegistryAccessor registry, ConfigurationSection section, + protected void deserializeRandomBlocks(BlockParser.Factory blockParserFactory, ConfigurationSection section, ConfigParsingContext context) { context = context.section("randomBlocks"); @@ -74,7 +74,7 @@ protected void deserializeRandomBlocks(RegistryAccessor registry, ConfigurationS for (ConfigurationSection subSection : subSectionContainer.getSubSections()) { ConfigParsingContext subContext = context.section(subSection.getName()); - this.weightedBlockLists.add(new WeightedBlockList(registry, subSection, subContext)); + this.weightedBlockLists.add(new WeightedBlockList(blockParserFactory, subSection, subContext)); } if (this.weightedBlockLists.isEmpty()) { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java index 66f382b03..a10a236b8 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java @@ -19,9 +19,9 @@ public class OrebfuscatorAdvancedConfig implements AdvancedConfig { private int proximityThreadCheckInterval = 50; private int proximityPlayerCheckInterval = 5000; - private boolean obfuscationWorkerThreadsSet = false; + private boolean obfuscationThreadsSet = false; private boolean hasObfuscationTimeout = false; - private boolean proximityHiderThreadsSet = false; + private boolean proximityThreadsSet = false; private boolean hasProximityPlayerCheckInterval = true; public void deserialize(ConfigurationSection section, ConfigParsingContext context) { @@ -32,7 +32,7 @@ public void deserialize(ConfigurationSection section, ConfigParsingContext conte ConfigurationSection obfuscationSection = section.getSection("obfuscation"); if (obfuscationSection != null) { this.obfuscationThreads = obfuscationSection.getInt("threads", -1); - this.obfuscationWorkerThreadsSet = (this.obfuscationThreads > 0); + this.obfuscationThreadsSet = (this.obfuscationThreads > 0); this.obfuscationTimeout = obfuscationSection.getLong("timeout", 10_000L); this.hasObfuscationTimeout = (this.obfuscationTimeout > 0); @@ -48,7 +48,7 @@ public void deserialize(ConfigurationSection section, ConfigParsingContext conte ConfigurationSection proximitySection = section.getSection("proximity"); if (proximitySection != null) { this.proximityThreads = proximitySection.getInt("threads", -1); - this.proximityHiderThreadsSet = (this.proximityThreads > 0); + this.proximityThreadsSet = (this.proximityThreads > 0); this.proximityDefaultBucketSize = proximitySection.getInt("defaultBucketSize", 50); proximityContext.errorMinValue("defaultBucketSize", 1, this.proximityDefaultBucketSize); @@ -61,29 +61,24 @@ public void deserialize(ConfigurationSection section, ConfigParsingContext conte } else { proximityContext.warn(ConfigMessage.MISSING_USING_DEFAULTS); } - } - public void initialize() { int availableThreads = Runtime.getRuntime().availableProcessors(); - this.obfuscationThreads = obfuscationWorkerThreadsSet ? obfuscationThreads : availableThreads; - this.proximityThreads = (int) (proximityHiderThreadsSet ? proximityThreads : Math.ceil(availableThreads / 2f)); - - if (this.verbose) { - OfcLogger.enableVerboseLogging(); - } + this.obfuscationThreads = obfuscationThreadsSet ? obfuscationThreads : availableThreads; + this.proximityThreads = (int) (proximityThreadsSet ? proximityThreads : Math.ceil(availableThreads / 2f)); - OfcLogger.debug("advanced.obfuscationWorkerThreads = " + this.obfuscationThreads); - OfcLogger.debug("advanced.proximityHiderThreads = " + this.proximityThreads); + OfcLogger.setVerboseLogging(this.verbose); + OfcLogger.debug("advanced.obfuscationThreads = " + this.obfuscationThreads); + OfcLogger.debug("advanced.proximityThreads = " + this.proximityThreads); } public void serialize(ConfigurationSection section) { section.set("verbose", this.verbose); - section.set("obfuscation.threads", this.obfuscationWorkerThreadsSet ? this.obfuscationThreads : -1); + section.set("obfuscation.threads", this.obfuscationThreadsSet ? this.obfuscationThreads : -1); section.set("obfuscation.timeout", this.hasObfuscationTimeout ? this.obfuscationTimeout : -1); section.set("obfuscation.maxMillisecondsPerTick", this.maxMillisecondsPerTick); - section.set("proximity.threads", this.proximityHiderThreadsSet ? this.proximityThreads : -1); + section.set("proximity.threads", this.proximityThreadsSet ? this.proximityThreads : -1); section.set("proximity.defaultBucketSize", this.proximityDefaultBucketSize); section.set("proximity.threadCheckInterval", this.proximityThreadCheckInterval); section.set("proximity.playerCheckInterval", diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java index 9fb8ba813..3c03d88b1 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java @@ -19,9 +19,8 @@ public class OrebfuscatorCacheConfig implements CacheConfig { private final Path worldDirectory; private boolean enabledValue = true; - - private int maximumSize = 8192; - private long expireAfterAccess = TimeUnit.SECONDS.toMillis(30); + private int maximumSize = 32768; + private long expireAfterAccess = TimeUnit.SECONDS.toMillis(60); private boolean enableDiskCacheValue = true; private Path baseDirectory; @@ -45,10 +44,10 @@ public void deserialize(ConfigurationSection section, ConfigParsingContext conte ConfigParsingContext memoryContext = context.section("memoryCache"); ConfigurationSection memorySection = section.getSection("memoryCache"); if (memorySection != null) { - this.maximumSize = memorySection.getInt("maximumSize", 8192); + this.maximumSize = memorySection.getInt("maximumSize", 32768); memoryContext.errorMinValue("maximumSize", 1, this.maximumSize); - this.expireAfterAccess = memorySection.getLong("expireAfterAccess", TimeUnit.SECONDS.toMillis(30)); + this.expireAfterAccess = memorySection.getLong("expireAfterAccess", TimeUnit.SECONDS.toMillis(60)); memoryContext.errorMinValue("expireAfterAccess", 1, this.expireAfterAccess); } else { memoryContext.warn(ConfigMessage.MISSING_USING_DEFAULTS); diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java index ca01add51..e90de9d44 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java @@ -22,6 +22,7 @@ import dev.imprex.orebfuscator.config.api.ObfuscationConfig; import dev.imprex.orebfuscator.config.api.ProximityConfig; import dev.imprex.orebfuscator.config.api.WorldConfigBundle; +import dev.imprex.orebfuscator.config.components.BlockParser; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.config.context.DefaultConfigParsingContext; @@ -168,9 +169,6 @@ private void deserialize(YamlConfiguration configuration, ConfigParsingContext c advancedContext.warn(ConfigMessage.MISSING_USING_DEFAULTS); } - // post init advanced config - this.advancedConfig.initialize(); - // parse cache section ConfigParsingContext cacheContext = context.section("cache", true); ConfigurationSection cacheSection = configuration.getSection("cache"); @@ -180,6 +178,8 @@ private void deserialize(YamlConfiguration configuration, ConfigParsingContext c cacheContext.warn(ConfigMessage.MISSING_USING_DEFAULTS); } + final BlockParser.Factory blockParserFactory = BlockParser.factory(server.getRegistry()); + // parse obfuscation sections ConfigParsingContext obfuscationContext = context.section("obfuscation"); ConfigurationSection obfuscationSection = configuration.getSection("obfuscation"); @@ -187,7 +187,7 @@ private void deserialize(YamlConfiguration configuration, ConfigParsingContext c for (ConfigurationSection config : obfuscationSection.getSubSections()) { ConfigParsingContext configContext = obfuscationContext.section(config.getName(), true); this.obfuscationConfigs.add( - new OrebfuscatorObfuscationConfig(server.getRegistry(), config, configContext)); + new OrebfuscatorObfuscationConfig(blockParserFactory, config, configContext)); } } if (this.obfuscationConfigs.isEmpty()) { @@ -200,7 +200,7 @@ private void deserialize(YamlConfiguration configuration, ConfigParsingContext c if (proximitySection != null) { for (ConfigurationSection config : proximitySection.getSubSections()) { ConfigParsingContext configContext = proximityContext.section(config.getName(), true); - this.proximityConfigs.add(new OrebfuscatorProximityConfig(server.getRegistry(), config, configContext)); + this.proximityConfigs.add(new OrebfuscatorProximityConfig(blockParserFactory, config, configContext)); } } if (this.proximityConfigs.isEmpty()) { @@ -402,16 +402,6 @@ public boolean needsObfuscation() { return this.needsObfuscation; } - @Override - public boolean skipReadSectionIndex(int index) { - return index < this.minSectionIndex || index > this.maxSectionIndex; - } - - @Override - public boolean skipProcessingSectionIndex(int index) { - return index < this.minSectionIndex || index > this.maxSectionIndex; - } - @Override public int minSectionIndex() { return this.minSectionIndex; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java index f393c178b..a370b4c43 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java @@ -5,11 +5,11 @@ import java.util.List; import java.util.Set; import dev.imprex.orebfuscator.config.api.ObfuscationConfig; +import dev.imprex.orebfuscator.config.components.BlockParser; import dev.imprex.orebfuscator.config.components.ConfigBlockValue; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.config.yaml.ConfigurationSection; -import dev.imprex.orebfuscator.interop.RegistryAccessor; public class OrebfuscatorObfuscationConfig extends AbstractWorldConfig implements ObfuscationConfig { @@ -17,15 +17,15 @@ public class OrebfuscatorObfuscationConfig extends AbstractWorldConfig implement private final Set hiddenBlocks = new LinkedHashSet<>(); - OrebfuscatorObfuscationConfig(RegistryAccessor registry, ConfigurationSection section, + OrebfuscatorObfuscationConfig(BlockParser.Factory blockParserFactory, ConfigurationSection section, ConfigParsingContext context) { super(section.getName()); this.deserializeBase(section, context); this.layerObfuscation = section.getBoolean("layerObfuscation", false); - this.deserializeHiddenBlocks(registry, section, context); - this.deserializeRandomBlocks(registry, section, context); + this.deserializeHiddenBlocks(blockParserFactory, section, context); + this.deserializeRandomBlocks(blockParserFactory, section, context); this.disableOnError(context); } @@ -38,13 +38,15 @@ void serialize(ConfigurationSection section) { this.serializeRandomBlocks(section); } - private void deserializeHiddenBlocks(RegistryAccessor registry, ConfigurationSection section, + private void deserializeHiddenBlocks(BlockParser.Factory blockParserFactory, ConfigurationSection section, ConfigParsingContext context) { context = context.section("hiddenBlocks"); + final BlockParser blockParser = blockParserFactory.excludeAir(); + boolean isEmpty = true; for (String value : section.getStringList("hiddenBlocks")) { - var parsed = BlockParser.parseBlockOrBlockTag(registry, context, value, true); + var parsed = blockParser.parse(context, value); this.hiddenBlocks.add(parsed); isEmpty &= parsed.blocks().isEmpty(); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java index 89e6fe79f..612f14ef9 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java @@ -7,12 +7,12 @@ import org.joml.Matrix4f; import dev.imprex.orebfuscator.config.api.BlockFlags; import dev.imprex.orebfuscator.config.api.ProximityConfig; +import dev.imprex.orebfuscator.config.components.BlockParser; import dev.imprex.orebfuscator.config.components.ConfigBlockValue; import dev.imprex.orebfuscator.config.components.WeightedBlockList; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.config.yaml.ConfigurationSection; -import dev.imprex.orebfuscator.interop.RegistryAccessor; import dev.imprex.orebfuscator.util.BlockProperties; public class OrebfuscatorProximityConfig extends AbstractWorldConfig implements ProximityConfig { @@ -34,7 +34,8 @@ public class OrebfuscatorProximityConfig extends AbstractWorldConfig implements private final Map hiddenBlocks = new LinkedHashMap<>(); private final Set allowForUseBlockBelow = new HashSet<>(); - OrebfuscatorProximityConfig(RegistryAccessor registry, ConfigurationSection section, ConfigParsingContext context) { + OrebfuscatorProximityConfig(BlockParser.Factory blockParserFactory, ConfigurationSection section, + ConfigParsingContext context) { super(section.getName()); this.deserializeBase(section, context); @@ -61,8 +62,8 @@ public class OrebfuscatorProximityConfig extends AbstractWorldConfig implements this.defaultBlockFlags |= BlockFlags.FLAG_USE_BLOCK_BELOW; } - this.deserializeHiddenBlocks(registry, section, context); - this.deserializeRandomBlocks(registry, section, context); + this.deserializeHiddenBlocks(blockParserFactory, section, context); + this.deserializeRandomBlocks(blockParserFactory, section, context); for (WeightedBlockList blockList : this.weightedBlockLists) { this.allowForUseBlockBelow.addAll(blockList.getBlocks().stream() @@ -90,7 +91,7 @@ protected void serialize(ConfigurationSection section) { this.serializeRandomBlocks(section); } - private void deserializeHiddenBlocks(RegistryAccessor registry, ConfigurationSection section, + private void deserializeHiddenBlocks(BlockParser.Factory blockParserFactory, ConfigurationSection section, ConfigParsingContext context) { context = context.section("hiddenBlocks"); @@ -99,9 +100,11 @@ private void deserializeHiddenBlocks(RegistryAccessor registry, ConfigurationSec return; } + final BlockParser blockParser = blockParserFactory.excludeAir(); + boolean isEmpty = true; for (ConfigurationSection block : blockSection.getSubSections()) { - ConfigBlockValue parsed = BlockParser.parseBlockOrBlockTag(registry, context, block.getName(), true); + ConfigBlockValue parsed = blockParser.parse(context, block.getName()); int blockFlags = this.defaultBlockFlags; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java index 1cba822db..ba33f9368 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java @@ -10,10 +10,6 @@ public interface WorldConfigBundle { boolean needsObfuscation(); - boolean skipReadSectionIndex(int index); - - boolean skipProcessingSectionIndex(int index); - int minSectionIndex(); int maxSectionIndex(); diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java similarity index 59% rename from orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java rename to orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java index 8d222d167..85b1eb7ee 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/BlockParser.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java @@ -1,10 +1,9 @@ -package dev.imprex.orebfuscator.config; +package dev.imprex.orebfuscator.config.components; import java.util.HashSet; +import java.util.Objects; import java.util.Set; import org.jetbrains.annotations.NotNull; -import dev.imprex.orebfuscator.config.components.ConfigBlockValue; -import dev.imprex.orebfuscator.config.components.ConfigFunctionValue; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.interop.RegistryAccessor; @@ -13,34 +12,36 @@ public class BlockParser { + public static BlockParser.Factory factory(RegistryAccessor registryAccessor) { + return new Factory(registryAccessor); + } + + private final @NotNull RegistryAccessor registry; + private final boolean excludeAir; + + private BlockParser(@NotNull RegistryAccessor registry, boolean excludeAir) { + this.registry = Objects.requireNonNull(registry); + this.excludeAir = excludeAir; + } + @NotNull - public static ConfigBlockValue parseBlockOrBlockTag( - @NotNull RegistryAccessor registry, - @NotNull ConfigParsingContext context, - @NotNull String value, - boolean excludeAir - ) { + public ConfigBlockValue parse(@NotNull ConfigParsingContext context, @NotNull String value) { var parsed = ConfigFunctionValue.parse(value); if (parsed != null) { return switch (parsed.function()) { - case "tag" -> parseBlockTag(registry, context, parsed.argument(), excludeAir); + case "tag" -> parseBlockTag(context, parsed.argument()); default -> { context.warn(ConfigMessage.FUNCTION_UNKNOWN, parsed.function(), parsed.argument()); yield ConfigBlockValue.invalid(value); } }; } else { - return parseBlock(registry, context, value, excludeAir); + return parseBlock(context, value); } } @NotNull - private static ConfigBlockValue parseBlockTag( - @NotNull RegistryAccessor registry, - @NotNull ConfigParsingContext context, - @NotNull String value, - boolean excludeAir - ) { + private ConfigBlockValue parseBlockTag(@NotNull ConfigParsingContext context, @NotNull String value) { BlockTag tag = registry.getBlockTagByName(value); if (tag == null) { context.warn(ConfigMessage.BLOCK_TAG_UNKNOWN, value); @@ -76,12 +77,7 @@ private static ConfigBlockValue parseBlockTag( } @NotNull - private static ConfigBlockValue parseBlock( - @NotNull RegistryAccessor registry, - @NotNull ConfigParsingContext context, - @NotNull String value, - boolean excludeAir - ) { + private ConfigBlockValue parseBlock(@NotNull ConfigParsingContext context, @NotNull String value) { BlockProperties block = registry.getBlockByName(value); if (block == null) { context.warn(ConfigMessage.BLOCK_UNKNOWN, value); @@ -93,4 +89,27 @@ private static ConfigBlockValue parseBlock( return ConfigBlockValue.invalid(value); } + + public static class Factory { + + private final @NotNull RegistryAccessor registry; + + private final BlockParser excludeAir; + private final BlockParser includeAir; + + public Factory(@NotNull RegistryAccessor registry) { + this.registry = Objects.requireNonNull(registry); + + this.excludeAir = new BlockParser(registry, true); + this.includeAir = new BlockParser(registry, false); + } + + public BlockParser excludeAir() { + return excludeAir; + } + + public BlockParser includeAir() { + return includeAir; + } + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java index 9c5e9c5b0..19349a51d 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java @@ -7,11 +7,9 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import dev.imprex.orebfuscator.config.BlockParser; import dev.imprex.orebfuscator.config.context.ConfigMessage; import dev.imprex.orebfuscator.config.context.ConfigParsingContext; import dev.imprex.orebfuscator.config.yaml.ConfigurationSection; -import dev.imprex.orebfuscator.interop.RegistryAccessor; import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.BlockPos; @@ -80,7 +78,8 @@ public static WeightedRandom[] create(WorldAccessor world, List blocks = new LinkedHashMap<>(); - public WeightedBlockList(RegistryAccessor registry, ConfigurationSection section, ConfigParsingContext context) { + public WeightedBlockList(BlockParser.Factory blockParserFactory, ConfigurationSection section, + ConfigParsingContext context) { this.name = section.getName(); int minY = MathUtil.clamp(section.getInt("minY", BlockPos.MIN_Y), BlockPos.MIN_Y, BlockPos.MAX_Y); @@ -95,11 +94,13 @@ public WeightedBlockList(RegistryAccessor registry, ConfigurationSection section blocksContext.error(ConfigMessage.MISSING_OR_EMPTY); return; } + + final BlockParser parser = blockParserFactory.includeAir(); boolean isEmpty = true; for (String value : blocksSection.getKeys()) { int weight = blocksSection.getInt(value, 1); - var parsed = BlockParser.parseBlockOrBlockTag(registry, context, value, false); + var parsed = parser.parse(context, value); this.blocks.put(parsed, weight); isEmpty &= parsed.blocks().isEmpty(); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/YamlConfiguration.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/YamlConfiguration.java index c22a7a1f8..b517c396f 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/YamlConfiguration.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/YamlConfiguration.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.yaml.snakeyaml.DumperOptions; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/OfcLogger.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/OfcLogger.java index 8c9aab039..00b16f334 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/OfcLogger.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/OfcLogger.java @@ -20,10 +20,12 @@ public static void setLogger(@NotNull LoggerAccessor logger) { } } - public static void enableVerboseLogging() { - if (!verbose) { + public static void setVerboseLogging(boolean enabled) { + if (!verbose && enabled) { verbose = true; debug("Verbose logging has been enabled"); + } else { + verbose = enabled; } } From 053ffd8ce29dfc7d63261355a71d08503fe4b68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Fri, 12 Sep 2025 23:49:58 +0200 Subject: [PATCH 13/14] feat: dynamic default config lookup based on game version --- .../config/AbstractWorldConfig.java | 10 + .../orebfuscator/config/ConfigLookup.java | 100 +++++ .../config/OrebfuscatorConfig.java | 29 +- .../config/OrebfuscatorObfuscationConfig.java | 8 + .../config/OrebfuscatorProximityConfig.java | 8 + .../config/components/ConfigBlockValue.java | 39 +- .../config/components/WeightedBlockList.java | 4 + .../dev/imprex/orebfuscator/util/Version.java | 10 +- .../main/resources/config/config-1.16.0.yml | 278 +++++------- .../main/resources/config/config-1.17.0.yml | 275 ++++-------- .../main/resources/config/config-1.18.0.yml | 271 ++++-------- .../main/resources/config/config-1.20.3.yml | 280 +++++------- .../main/resources/config/config-1.21.9.yml | 283 +++++------- .../orebfuscator/OrebfuscatorCommand.java | 6 +- .../src/main/resources/config/config-1.17.yml | 410 ------------------ 15 files changed, 696 insertions(+), 1315 deletions(-) create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java rename orebfuscator-plugin/src/main/resources/config/config-1.16.yml => orebfuscator-core/src/main/resources/config/config-1.16.0.yml (57%) rename orebfuscator-plugin/src/main/resources/config/config-1.19.yml => orebfuscator-core/src/main/resources/config/config-1.17.0.yml (57%) rename orebfuscator-plugin/src/main/resources/config/config-1.20.yml => orebfuscator-core/src/main/resources/config/config-1.18.0.yml (58%) rename orebfuscator-plugin/src/main/resources/config/config-1.21.yml => orebfuscator-core/src/main/resources/config/config-1.20.3.yml (58%) rename orebfuscator-plugin/src/main/resources/config/config-1.18.yml => orebfuscator-core/src/main/resources/config/config-1.21.9.yml (58%) delete mode 100644 orebfuscator-plugin/src/main/resources/config/config-1.17.yml diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java index deea607cf..175fd921e 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java @@ -3,8 +3,10 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import com.google.gson.JsonObject; import dev.imprex.orebfuscator.config.api.WorldConfig; import dev.imprex.orebfuscator.config.components.BlockParser; +import dev.imprex.orebfuscator.config.components.ConfigBlockValue; import dev.imprex.orebfuscator.config.components.WeightedBlockList; import dev.imprex.orebfuscator.config.components.WorldMatcher; import dev.imprex.orebfuscator.config.context.ConfigMessage; @@ -98,6 +100,14 @@ protected String getName() { return name; } + public JsonObject randomBlocksToJson() { + JsonObject object = new JsonObject(); + for (WeightedBlockList list : weightedBlockLists) { + object.add(list.getName(), ConfigBlockValue.toJson(list.getBlocks())); + } + return object; + } + @Override public boolean isEnabled() { return this.enabled; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java new file mode 100644 index 000000000..e71cf5e66 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java @@ -0,0 +1,100 @@ +package dev.imprex.orebfuscator.config; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import dev.imprex.orebfuscator.util.Version; + +public class ConfigLookup { + + private static final Pattern FILENAME_PATTERN = Pattern.compile("config-(?.*)\\.yml"); + + public static Version getConfigVersion(Version version) throws IOException { + List versions = discoverConfigs().stream() + .map(FILENAME_PATTERN::matcher) + .filter(Matcher::find) + .map(m -> m.group("version")) + .map(Version::tryParse) + .filter(Optional::isPresent) + .map(Optional::get) + .sorted(Comparator.reverseOrder()) + .toList(); + + for (Version configVersion : versions) { + if (version.isAtOrAbove(configVersion)) { + return configVersion; + } + } + + return null; + } + + public static InputStream loadConfig(Version version) { + String path = String.format("/config/config-%s.yml", version); + return ConfigLookup.class.getResourceAsStream(path); + } + + private static List discoverConfigs() throws IOException { + var protectionDomain = ConfigLookup.class.getProtectionDomain(); + var codeSource = protectionDomain != null + ? protectionDomain.getCodeSource() + : null; + var location = codeSource != null + ? codeSource.getLocation() + : null; + + if (location == null) { + return Collections.emptyList(); + } + + if (location.getPath().endsWith(".jar")) { + URI jar = URI.create("jar:" + location); + try (FileSystem fileSystem = FileSystems.newFileSystem(jar, Map.of())) { + Path configDir = fileSystem.getPath("/config/"); + if (!Files.isDirectory(configDir)) { + return Collections.emptyList(); + } + + try (var stream = Files.list(configDir)) { + return stream + .map(configDir::relativize) + .map(Path::toString) + .toList(); + } + } + } + + Path jarDir = Paths.get(URI.create(location.toString())); + if (!Files.isDirectory(jarDir)) { + return Collections.emptyList(); + } + + // remap local IDE execution paths + Path baseDir = jarDir.endsWith("build/classes/java/main/") + ? jarDir.resolve("../../../resources/main/config").normalize() + : jarDir.resolve("config/"); + + if (!Files.isDirectory(baseDir)) { + return Collections.emptyList(); + } + + try (var stream = Files.list(baseDir)) { + return stream + .map(baseDir::relativize) + .map(Path::toString) + .toList(); + } + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java index e90de9d44..5e74c0da1 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java @@ -14,6 +14,7 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import com.google.common.hash.Hashing; +import com.google.gson.JsonObject; import dev.imprex.orebfuscator.config.api.AdvancedConfig; import dev.imprex.orebfuscator.config.api.BlockFlags; import dev.imprex.orebfuscator.config.api.CacheConfig; @@ -73,17 +74,11 @@ public YamlConfiguration loadConfiguration() { Files.createDirectories(this.path.getParent()); Version version = this.server.getMinecraftVersion(); - InputStream inputStream = OrebfuscatorConfig.class.getResourceAsStream( - "/config/config-" + version + ".yml"); - - // check for prefix if full version doesn't match - if (inputStream == null) { - String configVersion = version.major() + "." + version.minor(); - inputStream = OrebfuscatorConfig.class.getResourceAsStream( - "/config/config-" + configVersion + ".yml"); - } + Version configVersion = ConfigLookup.getConfigVersion(version); + + OfcLogger.info(String.format("No config found, creating default config for version %s and above", configVersion)); - try (InputStream stream = Objects.requireNonNull(inputStream, + try (InputStream stream = Objects.requireNonNull(ConfigLookup.loadConfig(configVersion), "Can't find default config for version: " + version)) { Files.copy(stream, path); } @@ -229,6 +224,20 @@ private void serialize(ConfigurationSection section) { proximityConfig.serialize(proximity.createSection(proximityConfig.getName())); } } + + public JsonObject toJson() { + JsonObject object = new JsonObject(); + + for (var config : obfuscationConfigs) { + object.add(config.getName(), config.toJson()); + } + + for (var config : proximityConfigs) { + object.add(config.getName(), config.toJson()); + } + + return object; + } @Override public byte[] systemHash() { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java index a370b4c43..e1dc29b1b 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java @@ -4,6 +4,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import com.google.gson.JsonObject; import dev.imprex.orebfuscator.config.api.ObfuscationConfig; import dev.imprex.orebfuscator.config.components.BlockParser; import dev.imprex.orebfuscator.config.components.ConfigBlockValue; @@ -66,6 +67,13 @@ private void serializeHiddenBlocks(ConfigurationSection section) { section.set("hiddenBlocks", blockNames); } + public JsonObject toJson() { + JsonObject object = new JsonObject(); + object.add("hiddenBlocks", ConfigBlockValue.toJson(hiddenBlocks)); + object.add("randomBlocks", randomBlocksToJson()); + return object; + } + @Override public boolean layerObfuscation() { return this.layerObfuscation; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java index 612f14ef9..509c8b7a6 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Set; import org.joml.Matrix4f; +import com.google.gson.JsonObject; import dev.imprex.orebfuscator.config.api.BlockFlags; import dev.imprex.orebfuscator.config.api.ProximityConfig; import dev.imprex.orebfuscator.config.components.BlockParser; @@ -158,6 +159,13 @@ private void serializeHiddenBlocks(ConfigurationSection section) { } } + public JsonObject toJson() { + JsonObject object = new JsonObject(); + object.add("hiddenBlocks", ConfigBlockValue.toJson(hiddenBlocks.keySet())); + object.add("randomBlocks", randomBlocksToJson()); + return object; + } + @Override public int distance() { return this.distance; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java index d64566e8f..37a192d57 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java @@ -1,13 +1,37 @@ package dev.imprex.orebfuscator.config.components; +import java.util.Collection; import java.util.Collections; import java.util.Objects; import java.util.Set; import org.jetbrains.annotations.NotNull; +import com.google.gson.JsonArray; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockTag; -public record ConfigBlockValue(@NotNull String value, @NotNull Set blocks) { +public record ConfigBlockValue(@NotNull String value, @NotNull Set blocks) implements Comparable { + + public static JsonObject toJson(Collection values) { + JsonObject object = new JsonObject(); + + var list = values.stream().sorted((a, b) -> a.value().compareTo(b.value())).toList(); + + for (var entry : list) { + if (entry.blocks().size() > 1) { + JsonArray array = new JsonArray(entry.blocks().size()); + for (var block : entry.blocks()) { + array.add(block.getKey().toString()); + } + object.add(entry.value(), array); + } else { + object.add(entry.value(), JsonNull.INSTANCE); + } + } + + return object; + } @NotNull public static ConfigBlockValue invalid(@NotNull String value) { @@ -38,4 +62,17 @@ public int hashCode() { public boolean equals(Object obj) { return (this == obj) || (obj instanceof ConfigBlockValue other) && Objects.equals(this.value, other.value); } + + @Override + public int compareTo(ConfigBlockValue o) { + boolean isATag = this.value().startsWith("tag("); + boolean isBTag = o.value().startsWith("tag("); + + int tag = Boolean.compare(isATag, isBTag); + if (tag == 0) { + return this.value().compareTo(o.value()); + } + + return tag; + } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java index 19349a51d..74475e551 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java @@ -122,6 +122,10 @@ public void serialize(ConfigurationSection section) { } } + public String getName() { + return name; + } + public Set getBlocks() { return Collections.unmodifiableSet(this.blocks.keySet()); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java index 6b1776a0e..12b8e958b 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.Objects; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.google.gson.TypeAdapter; @@ -14,10 +15,15 @@ public record Version(int major, int minor, int patch) implements Comparable\\d+)(?:\\.(?\\d+))?(?:\\.(?\\d+))?"); public static Version parse(String version) { + return tryParse(version) + .orElseThrow(() -> new IllegalArgumentException("Can't parse version: " + version)); + } + + public static Optional tryParse(String version) { Matcher matcher = VERSION_PATTERN.matcher(version); if (!matcher.find()) { - throw new IllegalArgumentException("can't parse version: " + version); + return Optional.empty(); } int major = Integer.parseInt(matcher.group("major")); @@ -28,7 +34,7 @@ public static Version parse(String version) { String patchGroup = matcher.group("patch"); int patch = patchGroup != null ? Integer.parseInt(patchGroup) : 0; - return new Version(major, minor, patch); + return Optional.of(new Version(major, minor, patch)); } public boolean isAbove(Version version) { diff --git a/orebfuscator-plugin/src/main/resources/config/config-1.16.yml b/orebfuscator-core/src/main/resources/config/config-1.16.0.yml similarity index 57% rename from orebfuscator-plugin/src/main/resources/config/config-1.16.yml rename to orebfuscator-core/src/main/resources/config/config-1.16.0.yml index aca8f0ea5..648d6ef6d 100644 --- a/orebfuscator-plugin/src/main/resources/config/config-1.16.yml +++ b/orebfuscator-core/src/main/resources/config/config-1.16.0.yml @@ -1,4 +1,4 @@ -version: 4 +version: 5 general: checkForUpdates: true updateOnBlockDamage: true @@ -36,41 +36,27 @@ obfuscation: - world layerObfuscation: false hiddenBlocks: - - minecraft:chest - - minecraft:ender_chest - - minecraft:trapped_chest - - minecraft:spawner - - minecraft:emerald_ore + - tag(minecraft:base_stone_overworld) + - minecraft:bedrock + - minecraft:coal_ore - minecraft:diamond_ore + - minecraft:emerald_ore - minecraft:gold_ore - minecraft:iron_ore - - minecraft:coal_ore - minecraft:lapis_ore - minecraft:redstone_ore - - minecraft:stone - - minecraft:clay - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:bedrock + - tag(minecraft:shulker_boxes) + - minecraft:barrel + - minecraft:chest + - minecraft:dispenser + - minecraft:dropper + - minecraft:ender_chest + - minecraft:hopper + - minecraft:trapped_chest randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:cave_air: 5 minecraft:cobblestone: 1 @@ -97,39 +83,24 @@ obfuscation: - world_nether layerObfuscation: false hiddenBlocks: + - tag(minecraft:base_stone_nether) + - tag(minecraft:soul_fire_base_blocks) + - minecraft:ancient_debris + - minecraft:bedrock + - minecraft:nether_gold_ore + - minecraft:nether_quartz_ore + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:spawner - - minecraft:netherrack - - minecraft:nether_quartz_ore - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:ancient_debris - - minecraft:nether_gold_ore - - minecraft:basalt - - minecraft:soul_sand - - minecraft:soul_soil - - minecraft:bedrock randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 4 minecraft:nether_quartz_ore: 1 @@ -153,31 +124,19 @@ obfuscation: - world_the_end layerObfuscation: false hiddenBlocks: + - minecraft:end_stone + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:spawner - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 minecraft:end_stone_bricks: 1 @@ -187,190 +146,155 @@ obfuscation: proximity: proximity-overworld: enabled: true - minY: 0 + minY: -2032 maxY: 2031 worlds: - world distance: 24 frustumCulling: enabled: true - minDistance: 3 - fov: 80 + minDistance: 3.0 + fov: 80.0 rayCastCheck: enabled: false onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:mossy_cobblestone: {} minecraft:diamond_ore: {} minecraft:emerald_ore: {} - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + minecraft:mossy_cobblestone: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:cauldron: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:stone: 1 proximity-nether: enabled: true - minY: 0 + minY: -2032 maxY: 2031 worlds: - world_nether distance: 24 frustumCulling: enabled: true - minDistance: 3 - fov: 80 + minDistance: 3.0 + fov: 80.0 rayCastCheck: enabled: false onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + minecraft:ancient_debris: {} + minecraft:lodestone: {} + minecraft:nether_gold_ore: {} + minecraft:respawn_anchor: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:cauldron: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - minecraft:ancient_debris: {} - minecraft:nether_gold_ore: {} - minecraft:respawn_anchor: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 1 proximity-end: enabled: true - minY: 0 + minY: -2032 maxY: 2031 worlds: - world_the_end distance: 24 frustumCulling: enabled: true - minDistance: 3 - fov: 80 + minDistance: 3.0 + fov: 80.0 rayCastCheck: enabled: false onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:cauldron: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 diff --git a/orebfuscator-plugin/src/main/resources/config/config-1.19.yml b/orebfuscator-core/src/main/resources/config/config-1.17.0.yml similarity index 57% rename from orebfuscator-plugin/src/main/resources/config/config-1.19.yml rename to orebfuscator-core/src/main/resources/config/config-1.17.0.yml index 02455a163..913da5494 100644 --- a/orebfuscator-plugin/src/main/resources/config/config-1.19.yml +++ b/orebfuscator-core/src/main/resources/config/config-1.17.0.yml @@ -1,4 +1,4 @@ -version: 4 +version: 5 general: checkForUpdates: true updateOnBlockDamage: true @@ -36,48 +36,27 @@ obfuscation: - world layerObfuscation: false hiddenBlocks: - - minecraft:emerald_ore - - minecraft:deepslate_emerald_ore - - minecraft:diamond_ore - - minecraft:deepslate_diamond_ore - - minecraft:gold_ore - - minecraft:deepslate_gold_ore + - tag(minecraft:base_stone_overworld) + - tag(minecraft:coal_ores) + - tag(minecraft:copper_ores) + - tag(minecraft:diamond_ores) + - tag(minecraft:emerald_ores) + - tag(minecraft:gold_ores) + - tag(minecraft:iron_ores) + - tag(minecraft:lapis_ores) + - tag(minecraft:redstone_ores) + - minecraft:bedrock + - minecraft:raw_copper_block - minecraft:raw_gold_block - - minecraft:iron_ore - - minecraft:deepslate_iron_ore - minecraft:raw_iron_block - - minecraft:coal_ore - - minecraft:deepslate_coal_ore - - minecraft:lapis_ore - - minecraft:deepslate_lapis_ore - - minecraft:redstone_ore - - minecraft:deepslate_redstone_ore - - minecraft:copper_ore - - minecraft:raw_copper_block - - minecraft:deepslate_copper_ore - - minecraft:stone - - minecraft:deepslate + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:bedrock randomBlocks: section-global: minY: -2032 @@ -114,8 +93,8 @@ obfuscation: minecraft:deepslate_lapis_ore: 5 minecraft:deepslate_redstone_ore: 5 section-bedrock: - minY: -64 - maxY: -60 + minY: 0 + maxY: 5 blocks: minecraft:bedrock: 20 obfuscation-nether: @@ -126,38 +105,24 @@ obfuscation: - world_nether layerObfuscation: false hiddenBlocks: - - minecraft:netherrack + - tag(minecraft:base_stone_nether) + - tag(minecraft:soul_fire_base_blocks) + - minecraft:ancient_debris + - minecraft:bedrock + - minecraft:nether_gold_ore - minecraft:nether_quartz_ore + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:ancient_debris - - minecraft:nether_gold_ore - - minecraft:basalt - - minecraft:soul_sand - - minecraft:soul_soil - - minecraft:bedrock randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 4 minecraft:nether_quartz_ore: 1 @@ -181,30 +146,19 @@ obfuscation: - world_the_end layerObfuscation: false hiddenBlocks: + - minecraft:end_stone + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 minecraft:end_stone_bricks: 1 @@ -228,50 +182,36 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: + tag(minecraft:diamond_ores): {} + tag(minecraft:emerald_ores): {} minecraft:mossy_cobblestone: {} - minecraft:diamond_ore: {} - minecraft:deepslate_diamond_ore: {} - minecraft:emerald_ore: {} - minecraft:deepslate_emerald_ore: {} - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-stone: minY: -5 @@ -299,52 +239,41 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + minecraft:ancient_debris: {} + minecraft:lodestone: {} + minecraft:nether_gold_ore: {} + minecraft:respawn_anchor: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - minecraft:ancient_debris: {} - minecraft:nether_gold_ore: {} - minecraft:respawn_anchor: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 1 proximity-end: @@ -363,48 +292,36 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 diff --git a/orebfuscator-plugin/src/main/resources/config/config-1.20.yml b/orebfuscator-core/src/main/resources/config/config-1.18.0.yml similarity index 58% rename from orebfuscator-plugin/src/main/resources/config/config-1.20.yml rename to orebfuscator-core/src/main/resources/config/config-1.18.0.yml index 02455a163..221c5b5f3 100644 --- a/orebfuscator-plugin/src/main/resources/config/config-1.20.yml +++ b/orebfuscator-core/src/main/resources/config/config-1.18.0.yml @@ -1,4 +1,4 @@ -version: 4 +version: 5 general: checkForUpdates: true updateOnBlockDamage: true @@ -36,48 +36,27 @@ obfuscation: - world layerObfuscation: false hiddenBlocks: - - minecraft:emerald_ore - - minecraft:deepslate_emerald_ore - - minecraft:diamond_ore - - minecraft:deepslate_diamond_ore - - minecraft:gold_ore - - minecraft:deepslate_gold_ore + - tag(minecraft:base_stone_overworld) + - tag(minecraft:coal_ores) + - tag(minecraft:copper_ores) + - tag(minecraft:diamond_ores) + - tag(minecraft:emerald_ores) + - tag(minecraft:gold_ores) + - tag(minecraft:iron_ores) + - tag(minecraft:lapis_ores) + - tag(minecraft:redstone_ores) + - minecraft:bedrock + - minecraft:raw_copper_block - minecraft:raw_gold_block - - minecraft:iron_ore - - minecraft:deepslate_iron_ore - minecraft:raw_iron_block - - minecraft:coal_ore - - minecraft:deepslate_coal_ore - - minecraft:lapis_ore - - minecraft:deepslate_lapis_ore - - minecraft:redstone_ore - - minecraft:deepslate_redstone_ore - - minecraft:copper_ore - - minecraft:raw_copper_block - - minecraft:deepslate_copper_ore - - minecraft:stone - - minecraft:deepslate + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:bedrock randomBlocks: section-global: minY: -2032 @@ -126,38 +105,24 @@ obfuscation: - world_nether layerObfuscation: false hiddenBlocks: - - minecraft:netherrack + - tag(minecraft:base_stone_nether) + - tag(minecraft:soul_fire_base_blocks) + - minecraft:ancient_debris + - minecraft:bedrock + - minecraft:nether_gold_ore - minecraft:nether_quartz_ore + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:ancient_debris - - minecraft:nether_gold_ore - - minecraft:basalt - - minecraft:soul_sand - - minecraft:soul_soil - - minecraft:bedrock randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 4 minecraft:nether_quartz_ore: 1 @@ -181,30 +146,19 @@ obfuscation: - world_the_end layerObfuscation: false hiddenBlocks: + - minecraft:end_stone + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 minecraft:end_stone_bricks: 1 @@ -228,50 +182,36 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: + tag(minecraft:diamond_ores): {} + tag(minecraft:emerald_ores): {} minecraft:mossy_cobblestone: {} - minecraft:diamond_ore: {} - minecraft:deepslate_diamond_ore: {} - minecraft:emerald_ore: {} - minecraft:deepslate_emerald_ore: {} - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-stone: minY: -5 @@ -299,52 +239,41 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + minecraft:ancient_debris: {} + minecraft:lodestone: {} + minecraft:nether_gold_ore: {} + minecraft:respawn_anchor: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - minecraft:ancient_debris: {} - minecraft:nether_gold_ore: {} - minecraft:respawn_anchor: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 1 proximity-end: @@ -363,48 +292,36 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 diff --git a/orebfuscator-plugin/src/main/resources/config/config-1.21.yml b/orebfuscator-core/src/main/resources/config/config-1.20.3.yml similarity index 58% rename from orebfuscator-plugin/src/main/resources/config/config-1.21.yml rename to orebfuscator-core/src/main/resources/config/config-1.20.3.yml index a66c3002b..b00acd8a6 100644 --- a/orebfuscator-plugin/src/main/resources/config/config-1.21.yml +++ b/orebfuscator-core/src/main/resources/config/config-1.20.3.yml @@ -1,4 +1,4 @@ -version: 4 +version: 5 general: checkForUpdates: true updateOnBlockDamage: true @@ -36,48 +36,28 @@ obfuscation: - world layerObfuscation: false hiddenBlocks: - - minecraft:emerald_ore - - minecraft:deepslate_emerald_ore - - minecraft:diamond_ore - - minecraft:deepslate_diamond_ore - - minecraft:gold_ore - - minecraft:deepslate_gold_ore + - tag(minecraft:base_stone_overworld) + - tag(minecraft:coal_ores) + - tag(minecraft:copper_ores) + - tag(minecraft:diamond_ores) + - tag(minecraft:emerald_ores) + - tag(minecraft:gold_ores) + - tag(minecraft:iron_ores) + - tag(minecraft:lapis_ores) + - tag(minecraft:redstone_ores) + - minecraft:bedrock + - minecraft:raw_copper_block - minecraft:raw_gold_block - - minecraft:iron_ore - - minecraft:deepslate_iron_ore - minecraft:raw_iron_block - - minecraft:coal_ore - - minecraft:deepslate_coal_ore - - minecraft:lapis_ore - - minecraft:deepslate_lapis_ore - - minecraft:redstone_ore - - minecraft:deepslate_redstone_ore - - minecraft:copper_ore - - minecraft:raw_copper_block - - minecraft:deepslate_copper_ore - - minecraft:stone - - minecraft:deepslate + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:crafter + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:bedrock randomBlocks: section-global: minY: -2032 @@ -126,38 +106,25 @@ obfuscation: - world_nether layerObfuscation: false hiddenBlocks: - - minecraft:netherrack + - tag(minecraft:base_stone_nether) + - tag(minecraft:soul_fire_base_blocks) + - minecraft:ancient_debris + - minecraft:bedrock + - minecraft:nether_gold_ore - minecraft:nether_quartz_ore + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:crafter + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:ancient_debris - - minecraft:nether_gold_ore - - minecraft:basalt - - minecraft:soul_sand - - minecraft:soul_soil - - minecraft:bedrock randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 4 minecraft:nether_quartz_ore: 1 @@ -181,30 +148,20 @@ obfuscation: - world_the_end layerObfuscation: false hiddenBlocks: + - minecraft:end_stone + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:crafter + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 minecraft:end_stone_bricks: 1 @@ -228,51 +185,37 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: + tag(minecraft:diamond_ores): {} + tag(minecraft:emerald_ores): {} minecraft:mossy_cobblestone: {} - minecraft:diamond_ore: {} - minecraft:deepslate_diamond_ore: {} - minecraft:emerald_ore: {} - minecraft:deepslate_emerald_ore: {} - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafter: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:crafter: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-stone: minY: -5 @@ -300,53 +243,42 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafter: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + minecraft:ancient_debris: {} + minecraft:lodestone: {} + minecraft:nether_gold_ore: {} + minecraft:respawn_anchor: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - minecraft:ancient_debris: {} - minecraft:nether_gold_ore: {} - minecraft:respawn_anchor: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:crafter: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 1 proximity-end: @@ -365,49 +297,37 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafter: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:crafter: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 diff --git a/orebfuscator-plugin/src/main/resources/config/config-1.18.yml b/orebfuscator-core/src/main/resources/config/config-1.21.9.yml similarity index 58% rename from orebfuscator-plugin/src/main/resources/config/config-1.18.yml rename to orebfuscator-core/src/main/resources/config/config-1.21.9.yml index 02455a163..de013be60 100644 --- a/orebfuscator-plugin/src/main/resources/config/config-1.18.yml +++ b/orebfuscator-core/src/main/resources/config/config-1.21.9.yml @@ -1,4 +1,4 @@ -version: 4 +version: 5 general: checkForUpdates: true updateOnBlockDamage: true @@ -36,48 +36,29 @@ obfuscation: - world layerObfuscation: false hiddenBlocks: - - minecraft:emerald_ore - - minecraft:deepslate_emerald_ore - - minecraft:diamond_ore - - minecraft:deepslate_diamond_ore - - minecraft:gold_ore - - minecraft:deepslate_gold_ore + - tag(minecraft:base_stone_overworld) + - tag(minecraft:coal_ores) + - tag(minecraft:copper_ores) + - tag(minecraft:diamond_ores) + - tag(minecraft:emerald_ores) + - tag(minecraft:gold_ores) + - tag(minecraft:iron_ores) + - tag(minecraft:lapis_ores) + - tag(minecraft:redstone_ores) + - minecraft:bedrock + - minecraft:raw_copper_block - minecraft:raw_gold_block - - minecraft:iron_ore - - minecraft:deepslate_iron_ore - minecraft:raw_iron_block - - minecraft:coal_ore - - minecraft:deepslate_coal_ore - - minecraft:lapis_ore - - minecraft:deepslate_lapis_ore - - minecraft:redstone_ore - - minecraft:deepslate_redstone_ore - - minecraft:copper_ore - - minecraft:raw_copper_block - - minecraft:deepslate_copper_ore - - minecraft:stone - - minecraft:deepslate + - tag(minecraft:copper_chests) + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:crafter + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:bedrock randomBlocks: section-global: minY: -2032 @@ -126,38 +107,26 @@ obfuscation: - world_nether layerObfuscation: false hiddenBlocks: - - minecraft:netherrack + - tag(minecraft:base_stone_nether) + - tag(minecraft:soul_fire_base_blocks) + - minecraft:ancient_debris + - minecraft:bedrock + - minecraft:nether_gold_ore - minecraft:nether_quartz_ore + - tag(minecraft:copper_chests) + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:crafter + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:ancient_debris - - minecraft:nether_gold_ore - - minecraft:basalt - - minecraft:soul_sand - - minecraft:soul_soil - - minecraft:bedrock randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 4 minecraft:nether_quartz_ore: 1 @@ -181,30 +150,21 @@ obfuscation: - world_the_end layerObfuscation: false hiddenBlocks: + - minecraft:end_stone + - tag(minecraft:copper_chests) + - tag(minecraft:shulker_boxes) + - minecraft:barrel - minecraft:chest + - minecraft:crafter + - minecraft:dispenser + - minecraft:dropper - minecraft:ender_chest + - minecraft:hopper - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 minecraft:end_stone_bricks: 1 @@ -228,50 +188,38 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: + tag(minecraft:diamond_ores): {} + tag(minecraft:emerald_ores): {} minecraft:mossy_cobblestone: {} - minecraft:diamond_ore: {} - minecraft:deepslate_diamond_ore: {} - minecraft:emerald_ore: {} - minecraft:deepslate_emerald_ore: {} - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:copper_chests): {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:crafter: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-stone: minY: -5 @@ -299,52 +247,43 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + minecraft:ancient_debris: {} + minecraft:lodestone: {} + minecraft:nether_gold_ore: {} + minecraft:respawn_anchor: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - minecraft:ancient_debris: {} - minecraft:nether_gold_ore: {} - minecraft:respawn_anchor: {} + tag(minecraft:copper_chests): {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:crafter: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:netherrack: 1 proximity-end: @@ -363,48 +302,38 @@ proximity: onlyCheckCenter: false useBlockBelow: true hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} + tag(minecraft:anvil): {} + tag(minecraft:beehives): {} + tag(minecraft:beds): {} + tag(minecraft:cauldrons): {} minecraft:blast_furnace: {} + minecraft:brewing_stand: {} minecraft:cartography_table: {} + minecraft:composter: {} + minecraft:crafting_table: {} + minecraft:enchanting_table: {} minecraft:fletching_table: {} + minecraft:furnace: {} minecraft:grindstone: {} - minecraft:composter: {} minecraft:lectern: {} minecraft:loom: {} minecraft:smithing_table: {} minecraft:smoker: {} minecraft:stonecutter: {} - minecraft:hopper: {} minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} + tag(minecraft:copper_chests): {} + tag(minecraft:shulker_boxes): {} + minecraft:barrel: {} + minecraft:chest: {} + minecraft:crafter: {} + minecraft:dispenser: {} + minecraft:dropper: {} + minecraft:ender_chest: {} + minecraft:hopper: {} + minecraft:trapped_chest: {} randomBlocks: section-global: minY: -2032 - maxY: 2032 + maxY: 2031 blocks: minecraft:end_stone: 1 diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java index 01535589e..f3f2e8c73 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/OrebfuscatorCommand.java @@ -29,10 +29,10 @@ import com.google.gson.internal.Streams; import com.google.gson.stream.JsonWriter; -import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; -import net.imprex.orebfuscator.util.MinecraftVersion; import dev.imprex.orebfuscator.logging.OfcLogger; import dev.imprex.orebfuscator.util.JavaVersion; +import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; +import net.imprex.orebfuscator.util.MinecraftVersion; import net.imprex.orebfuscator.util.PermissionUtil; public class OrebfuscatorCommand implements CommandExecutor, TabCompleter { @@ -109,6 +109,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St listeners.add(key, listener); } root.add("listeners", listeners); + + root.add("blocks", orebfuscator.getOrebfuscatorConfig().toJson()); Base64.Encoder encoder = Base64.getUrlEncoder(); diff --git a/orebfuscator-plugin/src/main/resources/config/config-1.17.yml b/orebfuscator-plugin/src/main/resources/config/config-1.17.yml deleted file mode 100644 index b2c5ccbdc..000000000 --- a/orebfuscator-plugin/src/main/resources/config/config-1.17.yml +++ /dev/null @@ -1,410 +0,0 @@ -version: 4 -general: - checkForUpdates: true - updateOnBlockDamage: true - bypassNotification: true - ignoreSpectator: false - updateRadius: 2 -advanced: - verbose: false - obfuscation: - threads: -1 - timeout: 10000 - maxMillisecondsPerTick: 10 - proximity: - threads: -1 - defaultBucketSize: 50 - threadCheckInterval: 50 - playerCheckInterval: 5000 -cache: - enabled: true - memoryCache: - maximumSize: 32768 - expireAfterAccess: 60000 - diskCache: - enabled: true - directory: orebfuscator_cache - maximumOpenFiles: 256 - deleteFilesAfterAccess: 172800000 - maximumTaskQueueSize: 32768 -obfuscation: - obfuscation-overworld: - enabled: true - minY: -2032 - maxY: 2031 - worlds: - - world - layerObfuscation: false - hiddenBlocks: - - minecraft:emerald_ore - - minecraft:deepslate_emerald_ore - - minecraft:diamond_ore - - minecraft:deepslate_diamond_ore - - minecraft:gold_ore - - minecraft:deepslate_gold_ore - - minecraft:iron_ore - - minecraft:deepslate_iron_ore - - minecraft:coal_ore - - minecraft:deepslate_coal_ore - - minecraft:lapis_ore - - minecraft:deepslate_lapis_ore - - minecraft:redstone_ore - - minecraft:deepslate_redstone_ore - - minecraft:copper_ore - - minecraft:deepslate_copper_ore - - minecraft:stone - - minecraft:deepslate - - minecraft:spawner - - minecraft:chest - - minecraft:ender_chest - - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:bedrock - randomBlocks: - section-global: - minY: -2032 - maxY: 2031 - blocks: - minecraft:cave_air: 5 - minecraft:cobblestone: 1 - minecraft:mossy_cobblestone: 1 - minecraft:obsidian: 1 - section-stone: - minY: -5 - maxY: 2031 - blocks: - minecraft:stone: 15 - minecraft:diamond_ore: 10 - minecraft:emerald_ore: 5 - minecraft:gold_ore: 5 - minecraft:iron_ore: 5 - minecraft:copper_ore: 5 - minecraft:coal_ore: 5 - minecraft:lapis_ore: 5 - minecraft:redstone_ore: 5 - section-deepslate: - minY: -2032 - maxY: 5 - blocks: - minecraft:deepslate: 15 - minecraft:deepslate_diamond_ore: 10 - minecraft:deepslate_emerald_ore: 5 - minecraft:deepslate_gold_ore: 5 - minecraft:deepslate_iron_ore: 5 - minecraft:deepslate_copper_ore: 5 - minecraft:deepslate_coal_ore: 5 - minecraft:deepslate_lapis_ore: 5 - minecraft:deepslate_redstone_ore: 5 - section-bedrock: - minY: 0 - maxY: 5 - blocks: - minecraft:bedrock: 20 - obfuscation-nether: - enabled: true - minY: -2032 - maxY: 2031 - worlds: - - world_nether - layerObfuscation: false - hiddenBlocks: - - minecraft:netherrack - - minecraft:nether_quartz_ore - - minecraft:spawner - - minecraft:chest - - minecraft:ender_chest - - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - - minecraft:ancient_debris - - minecraft:nether_gold_ore - - minecraft:basalt - - minecraft:soul_sand - - minecraft:soul_soil - - minecraft:bedrock - randomBlocks: - section-global: - minY: -2032 - maxY: 2032 - blocks: - minecraft:netherrack: 4 - minecraft:nether_quartz_ore: 1 - minecraft:nether_gold_ore: 1 - minecraft:ancient_debris: 1 - section-bedrock-top: - minY: 123 - maxY: 127 - blocks: - minecraft:bedrock: 20 - section-bedrock-bottom: - minY: 0 - maxY: 4 - blocks: - minecraft:bedrock: 20 - obfuscation-end: - enabled: true - minY: -2032 - maxY: 2031 - worlds: - - world_the_end - layerObfuscation: false - hiddenBlocks: - - minecraft:spawner - - minecraft:chest - - minecraft:ender_chest - - minecraft:trapped_chest - - minecraft:shulker_box - - minecraft:white_shulker_box - - minecraft:orange_shulker_box - - minecraft:magenta_shulker_box - - minecraft:light_blue_shulker_box - - minecraft:yellow_shulker_box - - minecraft:lime_shulker_box - - minecraft:pink_shulker_box - - minecraft:gray_shulker_box - - minecraft:light_gray_shulker_box - - minecraft:cyan_shulker_box - - minecraft:purple_shulker_box - - minecraft:blue_shulker_box - - minecraft:brown_shulker_box - - minecraft:green_shulker_box - - minecraft:red_shulker_box - - minecraft:black_shulker_box - randomBlocks: - section-global: - minY: -2032 - maxY: 2032 - blocks: - minecraft:end_stone: 1 - minecraft:end_stone_bricks: 1 - minecraft:bedrock: 1 - minecraft:obsidian: 1 - minecraft:purpur_block: 1 -proximity: - proximity-overworld: - enabled: true - minY: 0 - maxY: 2031 - worlds: - - world - distance: 24 - frustumCulling: - enabled: true - minDistance: 3 - fov: 80 - rayCastCheck: - enabled: false - onlyCheckCenter: false - useBlockBelow: true - hiddenBlocks: - minecraft:mossy_cobblestone: {} - minecraft:diamond_ore: {} - minecraft:deepslate_diamond_ore: {} - minecraft:emerald_ore: {} - minecraft:deepslate_emerald_ore: {} - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} - minecraft:blast_furnace: {} - minecraft:cartography_table: {} - minecraft:fletching_table: {} - minecraft:grindstone: {} - minecraft:composter: {} - minecraft:lectern: {} - minecraft:loom: {} - minecraft:smithing_table: {} - minecraft:smoker: {} - minecraft:stonecutter: {} - minecraft:hopper: {} - minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - randomBlocks: - section-stone: - minY: -5 - maxY: 2031 - blocks: - minecraft:stone: 1 - section-deepslate: - minY: -2032 - maxY: 5 - blocks: - minecraft:deepslate: 1 - proximity-nether: - enabled: true - minY: 0 - maxY: 2031 - worlds: - - world_nether - distance: 24 - frustumCulling: - enabled: true - minDistance: 3 - fov: 80 - rayCastCheck: - enabled: false - onlyCheckCenter: false - useBlockBelow: true - hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} - minecraft:blast_furnace: {} - minecraft:cartography_table: {} - minecraft:fletching_table: {} - minecraft:grindstone: {} - minecraft:composter: {} - minecraft:lectern: {} - minecraft:loom: {} - minecraft:smithing_table: {} - minecraft:smoker: {} - minecraft:stonecutter: {} - minecraft:hopper: {} - minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - minecraft:ancient_debris: {} - minecraft:nether_gold_ore: {} - minecraft:respawn_anchor: {} - randomBlocks: - section-global: - minY: -2032 - maxY: 2032 - blocks: - minecraft:netherrack: 1 - proximity-end: - enabled: true - minY: 0 - maxY: 2031 - worlds: - - world_the_end - distance: 24 - frustumCulling: - enabled: true - minDistance: 3 - fov: 80 - rayCastCheck: - enabled: false - onlyCheckCenter: false - useBlockBelow: true - hiddenBlocks: - minecraft:chest: {} - minecraft:ender_chest: {} - minecraft:trapped_chest: {} - minecraft:anvil: {} - minecraft:crafting_table: {} - minecraft:dispenser: {} - minecraft:enchanting_table: {} - minecraft:furnace: {} - minecraft:blast_furnace: {} - minecraft:cartography_table: {} - minecraft:fletching_table: {} - minecraft:grindstone: {} - minecraft:composter: {} - minecraft:lectern: {} - minecraft:loom: {} - minecraft:smithing_table: {} - minecraft:smoker: {} - minecraft:stonecutter: {} - minecraft:hopper: {} - minecraft:spawner: {} - minecraft:shulker_box: {} - minecraft:white_shulker_box: {} - minecraft:orange_shulker_box: {} - minecraft:magenta_shulker_box: {} - minecraft:light_blue_shulker_box: {} - minecraft:yellow_shulker_box: {} - minecraft:lime_shulker_box: {} - minecraft:pink_shulker_box: {} - minecraft:gray_shulker_box: {} - minecraft:light_gray_shulker_box: {} - minecraft:cyan_shulker_box: {} - minecraft:purple_shulker_box: {} - minecraft:blue_shulker_box: {} - minecraft:brown_shulker_box: {} - minecraft:green_shulker_box: {} - minecraft:red_shulker_box: {} - minecraft:black_shulker_box: {} - minecraft:bee_nest: {} - minecraft:beehive: {} - randomBlocks: - section-global: - minY: -2032 - maxY: 2032 - blocks: - minecraft:end_stone: 1 From 8a2911b37cf9d0178c18fc881633da47048583d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Mon, 15 Sep 2025 18:09:16 +0200 Subject: [PATCH 14/14] feat: move chunk package to core module --- orebfuscator-core/pom.xml | 4 +- .../orebfuscator/chunk/ByteBufUtil.java | 48 ++++++ .../dev/imprex/orebfuscator/chunk/Chunk.java | 143 +++++++++++++++++ .../orebfuscator/chunk/ChunkFactory.java | 28 ++++ .../orebfuscator/chunk/ChunkSection.java | 146 ++++++++++++++++++ .../orebfuscator/chunk/ChunkVersionFlags.java | 33 ++++ .../orebfuscator/chunk/DirectPalette.java | 24 +++ .../orebfuscator/chunk/IndirectPalette.java | 69 +++++++++ .../imprex/orebfuscator/chunk/Palette.java | 15 ++ .../chunk/SimpleVarBitBuffer.java | 51 ++++++ .../chunk/SingleValuePalette.java | 48 ++++++ .../orebfuscator/chunk/VarBitBuffer.java | 12 ++ .../orebfuscator/chunk/ZeroVarBitBuffer.java | 23 +++ .../orebfuscator/config/ConfigLookup.java | 2 +- .../config/OrebfuscatorConfig.java | 7 +- .../config/components/BlockParser.java | 4 +- .../config/components/ConfigBlockValue.java | 10 +- .../config/components/WeightedBlockList.java | 2 +- .../interop/ChunkPacketAccessor.java | 21 +++ .../accessor/DefaultFieldAccessor.java | 2 +- .../dev/imprex/orebfuscator/util/Version.java | 16 ++ .../orebfuscator/util/MinecraftVersion.java | 8 +- .../net/imprex/orebfuscator/Orebfuscator.java | 7 + .../orebfuscator/chunk/ByteBufUtil.java | 48 ------ .../net/imprex/orebfuscator/chunk/Chunk.java | 138 ----------------- .../orebfuscator/chunk/ChunkCapabilities.java | 53 ------- .../orebfuscator/chunk/ChunkSection.java | 136 ---------------- .../orebfuscator/chunk/DirectPalette.java | 24 --- .../orebfuscator/chunk/IndirectPalette.java | 71 --------- .../imprex/orebfuscator/chunk/Palette.java | 15 -- .../chunk/SimpleVarBitBuffer.java | 50 ------ .../chunk/SingleValuePalette.java | 48 ------ .../orebfuscator/chunk/VarBitBuffer.java | 12 -- .../orebfuscator/chunk/ZeroVarBitBuffer.java | 34 ---- .../BukkitChunkPacketAccessor.java} | 66 ++++++-- .../iterop/BukkitWorldAccessor.java | 8 +- .../obfuscation/ObfuscationListener.java | 34 ++-- .../obfuscation/ObfuscationProcessor.java | 23 +-- .../obfuscation/ObfuscationRequest.java | 20 +-- .../obfuscation/ObfuscationSystem.java | 6 +- .../obfuscation/ObfuscationTask.java | 8 +- .../proximity/ProximityPacketListener.java | 6 +- ...rappedClientboundLevelChunkPacketData.java | 2 +- 43 files changed, 812 insertions(+), 713 deletions(-) create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ByteBufUtil.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Chunk.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkFactory.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkSection.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkVersionFlags.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/DirectPalette.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/IndirectPalette.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Palette.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SingleValuePalette.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/VarBitBuffer.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java create mode 100644 orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ChunkPacketAccessor.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ByteBufUtil.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkCapabilities.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkSection.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/DirectPalette.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/IndirectPalette.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Palette.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SingleValuePalette.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/VarBitBuffer.java delete mode 100644 orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java rename orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/{chunk/ChunkStruct.java => iterop/BukkitChunkPacketAccessor.java} (64%) rename orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/{chunk => util}/WrappedClientboundLevelChunkPacketData.java (98%) diff --git a/orebfuscator-core/pom.xml b/orebfuscator-core/pom.xml index 7029ecbb5..9afa7bfa2 100644 --- a/orebfuscator-core/pom.xml +++ b/orebfuscator-core/pom.xml @@ -15,7 +15,7 @@ - + diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ByteBufUtil.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ByteBufUtil.java new file mode 100644 index 000000000..c1062b8c7 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ByteBufUtil.java @@ -0,0 +1,48 @@ +package dev.imprex.orebfuscator.chunk; + +import io.netty.buffer.ByteBuf; + +public class ByteBufUtil { + + public static int getVarIntSize(int value) { + for (int bytes = 1; bytes < 5; bytes++) { + if ((value & -1 << bytes * 7) == 0) { + return bytes; + } + } + return 5; + } + + public static void skipVarInt(ByteBuf buffer) { + int bytes = 0; + byte in; + do { + in = buffer.readByte(); + if (++bytes > 5) { + throw new IndexOutOfBoundsException("varint32 too long"); + } + } while ((in & 0x80) != 0); + } + + public static int readVarInt(ByteBuf buffer) { + int out = 0; + int bytes = 0; + byte in; + do { + in = buffer.readByte(); + out |= (in & 0x7F) << bytes++ * 7; + if (bytes > 5) { + throw new IndexOutOfBoundsException("varint32 too long"); + } + } while ((in & 0x80) != 0); + return out; + } + + public static void writeVarInt(ByteBuf buffer, int value) { + while ((value & -0x80) != 0) { + buffer.writeByte(value & 0x7F | 0x80); + value >>>= 7; + } + buffer.writeByte(value); + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Chunk.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Chunk.java new file mode 100644 index 000000000..3c908454d --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Chunk.java @@ -0,0 +1,143 @@ +package dev.imprex.orebfuscator.chunk; + +import java.util.Arrays; +import dev.imprex.orebfuscator.interop.ChunkPacketAccessor; +import dev.imprex.orebfuscator.interop.WorldAccessor; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.Unpooled; + +public class Chunk implements AutoCloseable { + + private final ChunkFactory factory; + + private final int chunkX; + private final int chunkZ; + + private final WorldAccessor worldAccessor; + private final ChunkSectionHolder[] sections; + + private final ByteBuf inputBuffer; + private final ByteBuf outputBuffer; + + Chunk(ChunkFactory factory, ChunkPacketAccessor packet) { + this.factory = factory; + + this.chunkX = packet.chunkX(); + this.chunkZ = packet.chunkZ(); + + this.worldAccessor = packet.world(); + this.sections = new ChunkSectionHolder[this.worldAccessor.getSectionCount()]; + + byte[] data = packet.data(); + this.inputBuffer = Unpooled.wrappedBuffer(data); + this.outputBuffer = PooledByteBufAllocator.DEFAULT.heapBuffer(data.length); + + for (int sectionIndex = 0; sectionIndex < this.sections.length; sectionIndex++) { + if (packet.isSectionPresent(sectionIndex)) { + this.sections[sectionIndex] = new ChunkSectionHolder(); + } + } + } + + public WorldAccessor world() { + return worldAccessor; + } + + public int getSectionCount() { + return this.sections.length; + } + + public ChunkSection getSection(int index) { + ChunkSectionHolder chunkSection = this.sections[index]; + if (chunkSection != null) { + return chunkSection.chunkSection; + } + return null; + } + + public int getBlockState(int x, int y, int z) { + if (x >> 4 == this.chunkX && z >> 4 == this.chunkZ) { + ChunkSectionHolder chunkSection = this.sections[this.worldAccessor.getSectionIndex(y)]; + if (chunkSection != null) { + return chunkSection.data[ChunkSection.positionToIndex(x & 0xF, y & 0xF, z & 0xF)]; + } + return 0; + } + + return -1; + } + + public byte[] finalizeOutput() { + for (ChunkSectionHolder chunkSection : this.sections) { + if (chunkSection != null) { + chunkSection.write(); + } + } + + this.outputBuffer.writeBytes(this.inputBuffer); + + return Arrays.copyOfRange( + this.outputBuffer.array(), this.outputBuffer.arrayOffset(), + this.outputBuffer.arrayOffset() + this.outputBuffer.readableBytes()); + } + + @Override + public void close() throws Exception { + this.inputBuffer.release(); + this.outputBuffer.release(); + } + + private void skipBiomePalettedContainer() { + int bitsPerValue = this.inputBuffer.readUnsignedByte(); + + if (bitsPerValue == 0) { + ByteBufUtil.readVarInt(this.inputBuffer); + } else if (bitsPerValue <= 3) { + for (int i = ByteBufUtil.readVarInt(this.inputBuffer); i > 0; i--) { + ByteBufUtil.readVarInt(this.inputBuffer); + } + } + + int expectedDataLength = SimpleVarBitBuffer.calculateArraySize(bitsPerValue, 64); + + if (factory.versionFlags().hasLongArrayLengthField()) { + int dataLength = ByteBufUtil.readVarInt(this.inputBuffer); + if (expectedDataLength != dataLength) { + throw new IndexOutOfBoundsException( + "data.length != VarBitBuffer::size " + dataLength + " " + expectedDataLength); + } + } + + this.inputBuffer.skipBytes(Long.BYTES * expectedDataLength); + } + + private class ChunkSectionHolder { + + public final ChunkSection chunkSection; + + public final int[] data; + public final int extraOffset; + + private int extraBytes; + + public ChunkSectionHolder() { + this.chunkSection = new ChunkSection(factory); + + this.data = this.chunkSection.read(inputBuffer); + this.extraOffset = inputBuffer.readerIndex(); + + if (factory.versionFlags().hasBiomePalettedContainer()) { + skipBiomePalettedContainer(); + this.extraBytes = inputBuffer.readerIndex() - this.extraOffset; + } + } + + public void write() { + this.chunkSection.write(outputBuffer); + if (this.extraBytes > 0) { + outputBuffer.writeBytes(inputBuffer, this.extraOffset, extraBytes); + } + } + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkFactory.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkFactory.java new file mode 100644 index 000000000..8581780b3 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkFactory.java @@ -0,0 +1,28 @@ +package dev.imprex.orebfuscator.chunk; + +import dev.imprex.orebfuscator.interop.ChunkPacketAccessor; +import dev.imprex.orebfuscator.interop.RegistryAccessor; +import dev.imprex.orebfuscator.interop.ServerAccessor; + +public class ChunkFactory { + + private final RegistryAccessor registryAccessor; + private final ChunkVersionFlags versionFlags; + + public ChunkFactory(ServerAccessor serverAccessor) { + this.registryAccessor = serverAccessor.getRegistry(); + this.versionFlags = new ChunkVersionFlags(serverAccessor); + } + + RegistryAccessor registryAccessor() { + return registryAccessor; + } + + ChunkVersionFlags versionFlags() { + return versionFlags; + } + + public Chunk fromPacket(ChunkPacketAccessor packet) { + return new Chunk(this, packet); + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkSection.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkSection.java new file mode 100644 index 000000000..c9fa599ba --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkSection.java @@ -0,0 +1,146 @@ +package dev.imprex.orebfuscator.chunk; + +import dev.imprex.orebfuscator.interop.RegistryAccessor; +import io.netty.buffer.ByteBuf; + +public class ChunkSection { + + private final RegistryAccessor registryAccessor; + private final ChunkVersionFlags versionFlags; + + private int blockCount; + private int bitsPerBlock = -1; + + private Palette palette; + private VarBitBuffer data; + + public ChunkSection(ChunkFactory factory) { + this.registryAccessor = factory.registryAccessor(); + this.versionFlags = factory.versionFlags(); + + this.setBitsPerBlock(0, true); + } + + public RegistryAccessor registryAccessor() { + return registryAccessor; + } + + private void setBitsPerBlock(int bitsPerBlock, boolean grow) { + if (this.bitsPerBlock != bitsPerBlock) { + if (versionFlags.hasSingleValuePalette() && bitsPerBlock == 0) { + this.bitsPerBlock = 0; + this.palette = new SingleValuePalette(this, 0); + } else if (!grow && bitsPerBlock == 1) { + // fix: fawe chunk format incompatibility with bitsPerBlock == 1 + // https://github.com/Imprex-Development/Orebfuscator/issues/36 + this.bitsPerBlock = bitsPerBlock; + this.palette = new IndirectPalette(this.bitsPerBlock, this); + } else if (bitsPerBlock <= 8) { + this.bitsPerBlock = Math.max(4, bitsPerBlock); + this.palette = new IndirectPalette(this.bitsPerBlock, this); + } else { + this.bitsPerBlock = registryAccessor.getMaxBitsPerBlockState(); + this.palette = new DirectPalette(); + } + + if (this.bitsPerBlock == 0) { + this.data = new ZeroVarBitBuffer(4096); + } else { + this.data = new SimpleVarBitBuffer(this.bitsPerBlock, 4096); + } + } + } + + int grow(int bitsPerBlock, int blockId) { + Palette palette = this.palette; + VarBitBuffer data = this.data; + + this.setBitsPerBlock(bitsPerBlock, true); + + for (int i = 0; i < data.size(); i++) { + int preBlockId = palette.valueFor(data.get(i)); + this.data.set(i, this.palette.idFor(preBlockId)); + } + + return this.palette.idFor(blockId); + } + + static int positionToIndex(int x, int y, int z) { + return y << 8 | z << 4 | x; + } + + public void setBlockState(int x, int y, int z, int blockId) { + this.setBlockState(positionToIndex(x, y, z), blockId); + } + + public void setBlockState(int index, int blockId) { + int prevBlockId = this.getBlockState(index); + + if (!registryAccessor.isAir(prevBlockId)) { + --this.blockCount; + } + + if (!registryAccessor.isAir(blockId)) { + ++this.blockCount; + } + + int paletteIndex = this.palette.idFor(blockId); + this.data.set(index, paletteIndex); + } + + public int getBlock(int x, int y, int z) { + return this.getBlockState(positionToIndex(x, y, z)); + } + + public int getBlockState(int index) { + return this.palette.valueFor(this.data.get(index)); + } + + public boolean isEmpty() { + return this.blockCount == 0; + } + + public void write(ByteBuf buffer) { + buffer.writeShort(this.blockCount); + + buffer.writeByte(this.bitsPerBlock); + this.palette.write(buffer); + + long[] data = this.data.toArray(); + + if (versionFlags.hasLongArrayLengthField()) { + ByteBufUtil.writeVarInt(buffer, data.length); + } + + for (long entry : data) { + buffer.writeLong(entry); + } + } + + public int[] read(ByteBuf buffer) { + this.blockCount = buffer.readShort(); + + this.setBitsPerBlock(buffer.readUnsignedByte(), false); + + this.palette.read(buffer); + + long[] data = this.data.toArray(); + + if (versionFlags.hasLongArrayLengthField()) { + int length = ByteBufUtil.readVarInt(buffer); + if (data.length != length) { + throw new IndexOutOfBoundsException("data.length != VarBitBuffer::size " + length + " " + this.data); + } + } + + for (int i = 0; i < data.length; i++) { + data[i] = buffer.readLong(); + } + + int[] directData = new int[4096]; + for (int i = 0; i < directData.length; i++) { + directData[i] = this.getBlockState(i); + } + return directData; + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkVersionFlags.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkVersionFlags.java new file mode 100644 index 000000000..14f9cae36 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ChunkVersionFlags.java @@ -0,0 +1,33 @@ +package dev.imprex.orebfuscator.chunk; + +import dev.imprex.orebfuscator.interop.ServerAccessor; + +public final class ChunkVersionFlags { + + // hasLongArrayLengthField < 1.21.5 + // hasBiomePalettedContainer >= 1.18 + // hasSingleValuePalette >= 1.18 + + private final boolean hasLongArrayLengthField; + private final boolean hasBiomePalettedContainer; + private final boolean hasSingleValuePalette; + + public ChunkVersionFlags(ServerAccessor serverAccessor) { + var version = serverAccessor.getMinecraftVersion(); + hasLongArrayLengthField = version.isBelow("1.21.5"); + hasBiomePalettedContainer = version.isAtOrAbove("1.18"); + hasSingleValuePalette = version.isAtOrAbove("1.18"); + } + + public boolean hasLongArrayLengthField() { + return hasLongArrayLengthField; + } + + public boolean hasBiomePalettedContainer() { + return hasBiomePalettedContainer; + } + + public boolean hasSingleValuePalette() { + return hasSingleValuePalette; + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/DirectPalette.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/DirectPalette.java new file mode 100644 index 000000000..884625fc8 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/DirectPalette.java @@ -0,0 +1,24 @@ +package dev.imprex.orebfuscator.chunk; + +import io.netty.buffer.ByteBuf; + +public class DirectPalette implements Palette { + + @Override + public int idFor(int value) { + return value; + } + + @Override + public int valueFor(int id) { + return id; + } + + @Override + public void read(ByteBuf buffer) { + } + + @Override + public void write(ByteBuf buffer) { + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/IndirectPalette.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/IndirectPalette.java new file mode 100644 index 000000000..29d87f497 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/IndirectPalette.java @@ -0,0 +1,69 @@ +package dev.imprex.orebfuscator.chunk; + +import java.util.Arrays; +import io.netty.buffer.ByteBuf; + +public class IndirectPalette implements Palette { + + private final int bitsPerValue; + private final ChunkSection chunkSection; + + private final byte[] byValue; + private final int[] byId; + + private int size = 0; + + public IndirectPalette(int bitsPerValue, ChunkSection chunkSection) { + this.bitsPerValue = bitsPerValue; + this.chunkSection = chunkSection; + + // TODO improve block to index + this.byValue = new byte[chunkSection.registryAccessor().getUniqueBlockStateCount()]; + Arrays.fill(this.byValue, (byte) 0xFF); + this.byId = new int[1 << bitsPerValue]; + } + + @Override + public int idFor(int value) { + int id = this.byValue[value] & 0xFF; + if (id == 0xFF) { + id = this.size++; + + if (id != 0xFF && id < this.byId.length) { + this.byValue[value] = (byte) id; + this.byId[id] = value; + } else { + id = this.chunkSection.grow(this.bitsPerValue + 1, value); + } + } + return id; + } + + @Override + public int valueFor(int id) { + if (id < 0 || id >= this.size) { + throw new IndexOutOfBoundsException(); + } else { + return this.byId[id]; + } + } + + @Override + public void read(ByteBuf buffer) { + this.size = ByteBufUtil.readVarInt(buffer); + for (int id = 0; id < size; id++) { + int value = ByteBufUtil.readVarInt(buffer); + this.byId[id] = value; + this.byValue[value] = (byte) id; + } + } + + @Override + public void write(ByteBuf buffer) { + ByteBufUtil.writeVarInt(buffer, this.size); + + for (int id = 0; id < this.size; id++) { + ByteBufUtil.writeVarInt(buffer, this.valueFor(id)); + } + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Palette.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Palette.java new file mode 100644 index 000000000..bd005e2d9 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/Palette.java @@ -0,0 +1,15 @@ +package dev.imprex.orebfuscator.chunk; + +import io.netty.buffer.ByteBuf; + +public interface Palette { + + int idFor(int value); + + int valueFor(int id); + + void read(ByteBuf buffer); + + void write(ByteBuf buffer); + +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java new file mode 100644 index 000000000..c41edb650 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java @@ -0,0 +1,51 @@ +package dev.imprex.orebfuscator.chunk; + +public class SimpleVarBitBuffer implements VarBitBuffer { + + public static int calculateArraySize(int bitsPerEntry, int size) { + return bitsPerEntry == 0 ? 0 : (int) Math.ceil((float) size / (64 / bitsPerEntry)); + } + + private final int bitsPerEntry; + private final int entriesPerLong; + private final long adjustmentMask; + + private final int size; + private final long[] buffer; + + public SimpleVarBitBuffer(int bitsPerEntry, int size) { + this.bitsPerEntry = bitsPerEntry; + this.entriesPerLong = 64 / bitsPerEntry; + this.adjustmentMask = (1L << bitsPerEntry) - 1L; + + this.size = size; + this.buffer = new long[(int) Math.ceil((float) size / this.entriesPerLong)]; + } + + public int get(int index) { + int position = index / this.entriesPerLong; + int offset = (index - position * this.entriesPerLong) * this.bitsPerEntry; + return (int) (this.buffer[position] >> offset & this.adjustmentMask); + } + + public void set(int index, int value) { + int position = index / this.entriesPerLong; + int offset = (index - position * this.entriesPerLong) * this.bitsPerEntry; + this.buffer[position] = this.buffer[position] + & ~(this.adjustmentMask << offset) | (value & this.adjustmentMask) << offset; + } + + public long[] toArray() { + return this.buffer; + } + + public int size() { + return this.size; + } + + @Override + public String toString() { + return String.format("[size=%d, length=%d, bitsPerEntry=%d, entriesPerLong=%d]", size, buffer.length, bitsPerEntry, + entriesPerLong); + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SingleValuePalette.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SingleValuePalette.java new file mode 100644 index 000000000..b5939a42a --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/SingleValuePalette.java @@ -0,0 +1,48 @@ +package dev.imprex.orebfuscator.chunk; + +import io.netty.buffer.ByteBuf; + +public class SingleValuePalette implements Palette { + + private final ChunkSection chunkSection; + + private int value = -1; + + public SingleValuePalette(ChunkSection chunkSection, int value) { + this.chunkSection = chunkSection; + this.value = value; + } + + @Override + public int idFor(int value) { + if (this.value != -1 && value != this.value) { + return this.chunkSection.grow(1, value); + } else { + this.value = value; + return 0; + } + } + + @Override + public int valueFor(int id) { + if (this.value != -1 && id == 0) { + return this.value; + } else { + throw new IllegalStateException("value isn't initialized"); + } + } + + @Override + public void read(ByteBuf buffer) { + this.value = ByteBufUtil.readVarInt(buffer); + } + + @Override + public void write(ByteBuf buffer) { + if (this.value == -1) { + throw new IllegalStateException("value isn't initialized"); + } else { + ByteBufUtil.writeVarInt(buffer, this.value); + } + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/VarBitBuffer.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/VarBitBuffer.java new file mode 100644 index 000000000..85890c686 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/VarBitBuffer.java @@ -0,0 +1,12 @@ +package dev.imprex.orebfuscator.chunk; + +public interface VarBitBuffer { + + int get(int index); + + void set(int index, int value); + + long[] toArray(); + + int size(); +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java new file mode 100644 index 000000000..4c1fc7b94 --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java @@ -0,0 +1,23 @@ +package dev.imprex.orebfuscator.chunk; + +public record ZeroVarBitBuffer(int size) implements VarBitBuffer { + + public static final long[] EMPTY = new long[0]; + + @Override + public int get(int index) { + return 0; + } + + @Override + public void set(int index, int value) { + if (value != 0) { + throw new IllegalArgumentException("ZeroVarBitBuffer can't hold any value"); + } + } + + @Override + public long[] toArray() { + return EMPTY; + } +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java index e71cf5e66..3af7a23f3 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java @@ -40,7 +40,7 @@ public static Version getConfigVersion(Version version) throws IOException { return null; } - + public static InputStream loadConfig(Version version) { String path = String.format("/config/config-%s.yml", version); return ConfigLookup.class.getResourceAsStream(path); diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java index 5e74c0da1..6c2ca44b5 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java @@ -75,8 +75,9 @@ public YamlConfiguration loadConfiguration() { Version version = this.server.getMinecraftVersion(); Version configVersion = ConfigLookup.getConfigVersion(version); - - OfcLogger.info(String.format("No config found, creating default config for version %s and above", configVersion)); + + OfcLogger.info( + String.format("No config found, creating default config for version %s and above", configVersion)); try (InputStream stream = Objects.requireNonNull(ConfigLookup.loadConfig(configVersion), "Can't find default config for version: " + version)) { @@ -224,7 +225,7 @@ private void serialize(ConfigurationSection section) { proximityConfig.serialize(proximity.createSection(proximityConfig.getName())); } } - + public JsonObject toJson() { JsonObject object = new JsonObject(); diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java index 85b1eb7ee..92743c63f 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java @@ -89,7 +89,7 @@ private ConfigBlockValue parseBlock(@NotNull ConfigParsingContext context, @NotN return ConfigBlockValue.invalid(value); } - + public static class Factory { private final @NotNull RegistryAccessor registry; @@ -99,7 +99,7 @@ public static class Factory { public Factory(@NotNull RegistryAccessor registry) { this.registry = Objects.requireNonNull(registry); - + this.excludeAir = new BlockParser(registry, true); this.includeAir = new BlockParser(registry, false); } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java index 37a192d57..7e35a1344 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Objects; import java.util.Set; import org.jetbrains.annotations.NotNull; @@ -11,12 +12,13 @@ import dev.imprex.orebfuscator.util.BlockProperties; import dev.imprex.orebfuscator.util.BlockTag; -public record ConfigBlockValue(@NotNull String value, @NotNull Set blocks) implements Comparable { +public record ConfigBlockValue(@NotNull String value, @NotNull Set blocks) implements + Comparable { public static JsonObject toJson(Collection values) { JsonObject object = new JsonObject(); - var list = values.stream().sorted((a, b) -> a.value().compareTo(b.value())).toList(); + var list = values.stream().sorted(Comparator.comparing((ConfigBlockValue a) -> a.value())).toList(); for (var entry : list) { if (entry.blocks().size() > 1) { @@ -67,12 +69,12 @@ public boolean equals(Object obj) { public int compareTo(ConfigBlockValue o) { boolean isATag = this.value().startsWith("tag("); boolean isBTag = o.value().startsWith("tag("); - + int tag = Boolean.compare(isATag, isBTag); if (tag == 0) { return this.value().compareTo(o.value()); } - + return tag; } } diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java index 74475e551..8973f914a 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java @@ -94,7 +94,7 @@ public WeightedBlockList(BlockParser.Factory blockParserFactory, ConfigurationSe blocksContext.error(ConfigMessage.MISSING_OR_EMPTY); return; } - + final BlockParser parser = blockParserFactory.includeAir(); boolean isEmpty = true; diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ChunkPacketAccessor.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ChunkPacketAccessor.java new file mode 100644 index 000000000..e77b8533d --- /dev/null +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/interop/ChunkPacketAccessor.java @@ -0,0 +1,21 @@ +package dev.imprex.orebfuscator.interop; + +import java.util.function.Predicate; +import dev.imprex.orebfuscator.util.BlockPos; + +public interface ChunkPacketAccessor { + + WorldAccessor world(); + + int chunkX(); + + int chunkZ(); + + boolean isSectionPresent(int index); + + byte[] data(); + + void setData(byte[] data); + + void filterBlockEntities(Predicate predicate); +} diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java index da87f9417..c91dab56e 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/reflect/accessor/DefaultFieldAccessor.java @@ -6,7 +6,7 @@ import org.jetbrains.annotations.Nullable; record DefaultFieldAccessor(@NotNull Field member, @NotNull MethodHandle getterHandle, - @Nullable MethodHandle setterHandle) implements FieldAccessor { + @Nullable MethodHandle setterHandle) implements FieldAccessor { @Override public boolean readonly() { diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java index 12b8e958b..6a0b4b886 100644 --- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java +++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/Version.java @@ -37,18 +37,34 @@ public static Optional tryParse(String version) { return Optional.of(new Version(major, minor, patch)); } + public boolean isAbove(String version) { + return this.isAbove(Version.parse(version)); + } + public boolean isAbove(Version version) { return this.compareTo(version) > 0; } + public boolean isAtOrAbove(String version) { + return this.isAtOrAbove(Version.parse(version)); + } + public boolean isAtOrAbove(Version version) { return this.compareTo(version) >= 0; } + public boolean isAtOrBelow(String version) { + return this.isAtOrBelow(Version.parse(version)); + } + public boolean isAtOrBelow(Version version) { return this.compareTo(version) <= 0; } + public boolean isBelow(String version) { + return this.isBelow(Version.parse(version)); + } + public boolean isBelow(Version version) { return this.compareTo(version) < 0; } diff --git a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java index 21875ddb2..d6e6cc08a 100644 --- a/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java +++ b/orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java @@ -86,18 +86,18 @@ public static int patchVersion() { } public static boolean isAbove(String version) { - return CURRENT_VERSION.isAbove(Version.parse(version)); + return CURRENT_VERSION.isAbove(version); } public static boolean isAtOrAbove(String version) { - return CURRENT_VERSION.isAtOrAbove(Version.parse(version)); + return CURRENT_VERSION.isAtOrAbove(version); } public static boolean isAtOrBelow(String version) { - return CURRENT_VERSION.isAtOrBelow(Version.parse(version)); + return CURRENT_VERSION.isAtOrBelow(version); } public static boolean isBelow(String version) { - return CURRENT_VERSION.isBelow(Version.parse(version)); + return CURRENT_VERSION.isBelow(version); } } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java index 7d64b5f2d..c152b0839 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java @@ -13,6 +13,7 @@ import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.java.JavaPlugin; +import dev.imprex.orebfuscator.chunk.ChunkFactory; import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.interop.RegistryAccessor; import dev.imprex.orebfuscator.interop.ServerAccessor; @@ -41,6 +42,7 @@ public class Orebfuscator extends JavaPlugin implements Listener, ServerAccessor private ObfuscationSystem obfuscationSystem; private ProximityDirectorThread proximityThread; private ProximityPacketListener proximityPacketListener; + private ChunkFactory chunkFactory; @Override public void onLoad() { @@ -82,6 +84,7 @@ public void onEnable() { this.obfuscationCache = new ObfuscationCache(this); // Load obfuscater + this.chunkFactory = new ChunkFactory(this); this.obfuscationSystem = new ObfuscationSystem(this); // Load proximity hider @@ -171,6 +174,10 @@ public ProximityPacketListener getProximityPacketListener() { return this.proximityPacketListener; } + public ChunkFactory getChunkFactory() { + return chunkFactory; + } + @Override public Path getConfigDirectory() { return getDataFolder().toPath(); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ByteBufUtil.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ByteBufUtil.java deleted file mode 100644 index 8dbd842f1..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ByteBufUtil.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import io.netty.buffer.ByteBuf; - -public class ByteBufUtil { - - public static int getVarIntSize(int value) { - for (int bytes = 1; bytes < 5; bytes++) { - if ((value & -1 << bytes * 7) == 0) { - return bytes; - } - } - return 5; - } - - public static void skipVarInt(ByteBuf buffer) { - int bytes = 0; - byte in; - do { - in = buffer.readByte(); - if (++bytes > 5) { - throw new IndexOutOfBoundsException("varint32 too long"); - } - } while ((in & 0x80) != 0); - } - - public static int readVarInt(ByteBuf buffer) { - int out = 0; - int bytes = 0; - byte in; - do { - in = buffer.readByte(); - out |= (in & 0x7F) << bytes++ * 7; - if (bytes > 5) { - throw new IndexOutOfBoundsException("varint32 too long"); - } - } while ((in & 0x80) != 0); - return out; - } - - public static void writeVarInt(ByteBuf buffer, int value) { - while ((value & -0x80) != 0) { - buffer.writeByte(value & 0x7F | 0x80); - value >>>= 7; - } - buffer.writeByte(value); - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java deleted file mode 100644 index 9d3a77d05..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Chunk.java +++ /dev/null @@ -1,138 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import java.util.Arrays; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.PooledByteBufAllocator; -import io.netty.buffer.Unpooled; -import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; - -public class Chunk implements AutoCloseable { - - public static Chunk fromChunkStruct(ChunkStruct chunkStruct) { - return new Chunk(chunkStruct); - } - - private final int chunkX; - private final int chunkZ; - - private final BukkitWorldAccessor worldAccessor; - private final ChunkSectionHolder[] sections; - - private final ByteBuf inputBuffer; - private final ByteBuf outputBuffer; - - private Chunk(ChunkStruct chunkStruct) { - this.chunkX = chunkStruct.chunkX; - this.chunkZ = chunkStruct.chunkZ; - - this.worldAccessor = chunkStruct.worldAccessor; - this.sections = new ChunkSectionHolder[this.worldAccessor.getSectionCount()]; - - this.inputBuffer = Unpooled.wrappedBuffer(chunkStruct.data); - this.outputBuffer = PooledByteBufAllocator.DEFAULT.heapBuffer(chunkStruct.data.length); - - for (int sectionIndex = 0; sectionIndex < this.sections.length; sectionIndex++) { - if (chunkStruct.sectionMask.get(sectionIndex)) { - this.sections[sectionIndex] = new ChunkSectionHolder(); - } - } - } - - public int getSectionCount() { - return this.sections.length; - } - - public BukkitWorldAccessor getWorldAccessor() { - return worldAccessor; - } - - public ChunkSection getSection(int index) { - ChunkSectionHolder chunkSection = this.sections[index]; - if (chunkSection != null) { - return chunkSection.chunkSection; - } - return null; - } - - public int getBlockState(int x, int y, int z) { - if (x >> 4 == this.chunkX && z >> 4 == this.chunkZ) { - ChunkSectionHolder chunkSection = this.sections[this.worldAccessor.getSectionIndex(y)]; - if (chunkSection != null) { - return chunkSection.data[ChunkSection.positionToIndex(x & 0xF, y & 0xF, z & 0xF)]; - } - return 0; - } - - return -1; - } - - public byte[] finalizeOutput() { - for (ChunkSectionHolder chunkSection : this.sections) { - if (chunkSection != null) { - chunkSection.write(); - } - } - this.outputBuffer.writeBytes(this.inputBuffer); - return Arrays.copyOfRange(this.outputBuffer.array(), this.outputBuffer.arrayOffset(), - this.outputBuffer.arrayOffset() + this.outputBuffer.readableBytes()); - } - - @Override - public void close() throws Exception { - this.inputBuffer.release(); - this.outputBuffer.release(); - } - - private void skipBiomePalettedContainer() { - int bitsPerValue = this.inputBuffer.readUnsignedByte(); - - if (bitsPerValue == 0) { - ByteBufUtil.readVarInt(this.inputBuffer); - } else if (bitsPerValue <= 3) { - for (int i = ByteBufUtil.readVarInt(this.inputBuffer); i > 0; i--) { - ByteBufUtil.readVarInt(this.inputBuffer); - } - } - - int expectedDataLength = SimpleVarBitBuffer.calculateArraySize(bitsPerValue, 64); - - if (ChunkCapabilities.hasLongArrayLengthField()) { - int dataLength = ByteBufUtil.readVarInt(this.inputBuffer); - if (expectedDataLength != dataLength) { - throw new IndexOutOfBoundsException("data.length != VarBitBuffer::size " + dataLength + " " + expectedDataLength); - } - } - - this.inputBuffer.skipBytes(Long.BYTES * expectedDataLength); - } - - private class ChunkSectionHolder { - - public ChunkSection chunkSection; - - public final int[] data; - public final int extraOffset; - - private int extraBytes; - - public ChunkSectionHolder() { - this.chunkSection = new ChunkSection(); - - this.data = this.chunkSection.read(inputBuffer); - this.extraOffset = inputBuffer.readerIndex(); - - if (ChunkCapabilities.hasBiomePalettedContainer()) { - skipBiomePalettedContainer(); - this.extraBytes = inputBuffer.readerIndex() - this.extraOffset; - } - } - - public void write() { - this.chunkSection.write(outputBuffer); - if (this.extraBytes > 0) { - outputBuffer.writeBytes(inputBuffer, this.extraOffset, extraBytes); - } - } - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkCapabilities.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkCapabilities.java deleted file mode 100644 index 7f16ecb20..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkCapabilities.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import net.imprex.orebfuscator.util.MinecraftVersion; - -public final class ChunkCapabilities { - - // hasLongArrayLengthField < 1.21.5 - // hasChunkPosFieldUnloadPacket >= 1.20.2 - // hasClientboundLevelChunkPacketData >= 1.18; - // hasBiomePalettedContainer >= 1.18 - // hasSingleValuePalette >= 1.18 - // hasHeightBitMask < 1.18 - // hasDynamicHeight >= 1.17 - - private static final boolean hasLongArrayLengthField = MinecraftVersion.isBelow("1.21.5"); - private static final boolean hasChunkPosFieldUnloadPacket = MinecraftVersion.isAtOrAbove("1.20.2"); - private static final boolean hasClientboundLevelChunkPacketData = MinecraftVersion.isAtOrAbove("1.18"); - private static final boolean hasBiomePalettedContainer = MinecraftVersion.isAtOrAbove("1.18"); - private static final boolean hasSingleValuePalette = MinecraftVersion.isAtOrAbove("1.18"); - private static final boolean hasHeightBitMask = MinecraftVersion.isBelow("1.18"); - private static final boolean hasDynamicHeight = MinecraftVersion.isAtOrAbove("1.17"); - - private ChunkCapabilities() { - } - - public static boolean hasLongArrayLengthField() { - return hasLongArrayLengthField; - } - - public static boolean hasChunkPosFieldUnloadPacket() { - return hasChunkPosFieldUnloadPacket; - } - - public static boolean hasClientboundLevelChunkPacketData() { - return hasClientboundLevelChunkPacketData; - } - - public static boolean hasBiomePalettedContainer() { - return hasBiomePalettedContainer; - } - - public static boolean hasSingleValuePalette() { - return hasSingleValuePalette; - } - - public static boolean hasHeightBitMask() { - return hasHeightBitMask; - } - - public static boolean hasDynamicHeight() { - return hasDynamicHeight; - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkSection.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkSection.java deleted file mode 100644 index 8010c5227..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkSection.java +++ /dev/null @@ -1,136 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import io.netty.buffer.ByteBuf; -import net.imprex.orebfuscator.OrebfuscatorNms; - -public class ChunkSection { - - private int blockCount; - private int bitsPerBlock = -1; - - private Palette palette; - private VarBitBuffer data; - - public ChunkSection() { - this.setBitsPerBlock(0, true); - } - - private void setBitsPerBlock(int bitsPerBlock, boolean grow) { - if (this.bitsPerBlock != bitsPerBlock) { - if (ChunkCapabilities.hasSingleValuePalette() && bitsPerBlock == 0) { - this.bitsPerBlock = 0; - this.palette = new SingleValuePalette(this, 0); - } else if (!grow && bitsPerBlock == 1) { - // fix: fawe chunk format incompatibility with bitsPerBlock == 1 - // https://github.com/Imprex-Development/Orebfuscator/issues/36 - this.bitsPerBlock = bitsPerBlock; - this.palette = new IndirectPalette(this.bitsPerBlock, this); - } else if (bitsPerBlock <= 8) { - this.bitsPerBlock = Math.max(4, bitsPerBlock); - this.palette = new IndirectPalette(this.bitsPerBlock, this); - } else { - this.bitsPerBlock = OrebfuscatorNms.getMaxBitsPerBlockState(); - this.palette = new DirectPalette(); - } - - if (this.bitsPerBlock == 0) { - this.data = new ZeroVarBitBuffer(4096); - } else { - this.data = new SimpleVarBitBuffer(this.bitsPerBlock, 4096); - } - } - } - - int grow(int bitsPerBlock, int blockId) { - Palette palette = this.palette; - VarBitBuffer data = this.data; - - this.setBitsPerBlock(bitsPerBlock, true); - - for (int i = 0; i < data.size(); i++) { - int preBlockId = palette.valueFor(data.get(i)); - this.data.set(i, this.palette.idFor(preBlockId)); - } - - return this.palette.idFor(blockId); - } - - static int positionToIndex(int x, int y, int z) { - return y << 8 | z << 4 | x; - } - - public void setBlockState(int x, int y, int z, int blockId) { - this.setBlockState(positionToIndex(x, y, z), blockId); - } - - public void setBlockState(int index, int blockId) { - int prevBlockId = this.getBlockState(index); - - if (!OrebfuscatorNms.isAir(prevBlockId)) { - --this.blockCount; - } - - if (!OrebfuscatorNms.isAir(blockId)) { - ++this.blockCount; - } - - int paletteIndex = this.palette.idFor(blockId); - this.data.set(index, paletteIndex); - } - - public int getBlock(int x, int y, int z) { - return this.getBlockState(positionToIndex(x, y, z)); - } - - public int getBlockState(int index) { - return this.palette.valueFor(this.data.get(index)); - } - - public boolean isEmpty() { - return this.blockCount == 0; - } - - public void write(ByteBuf buffer) { - buffer.writeShort(this.blockCount); - - buffer.writeByte(this.bitsPerBlock); - this.palette.write(buffer); - - long[] data = this.data.toArray(); - - if (ChunkCapabilities.hasLongArrayLengthField()) { - ByteBufUtil.writeVarInt(buffer, data.length); - } - - for (long entry : data) { - buffer.writeLong(entry); - } - } - - public int[] read(ByteBuf buffer) { - this.blockCount = buffer.readShort(); - - this.setBitsPerBlock(buffer.readUnsignedByte(), false); - - this.palette.read(buffer); - - long[] data = this.data.toArray(); - - if (ChunkCapabilities.hasLongArrayLengthField()) { - int length = ByteBufUtil.readVarInt(buffer); - if (data.length != length) { - throw new IndexOutOfBoundsException("data.length != VarBitBuffer::size " + length + " " + this.data); - } - } - - for (int i = 0; i < data.length; i++) { - data[i] = buffer.readLong(); - } - - int[] directData = new int[4096]; - for (int i = 0; i < directData.length; i++) { - directData[i] = this.getBlockState(i); - } - return directData; - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/DirectPalette.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/DirectPalette.java deleted file mode 100644 index 75bc0bd09..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/DirectPalette.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import io.netty.buffer.ByteBuf; - -public class DirectPalette implements Palette { - - @Override - public int idFor(int value) { - return value; - } - - @Override - public int valueFor(int id) { - return id; - } - - @Override - public void read(ByteBuf buffer) { - } - - @Override - public void write(ByteBuf buffer) { - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/IndirectPalette.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/IndirectPalette.java deleted file mode 100644 index be579c719..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/IndirectPalette.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import java.util.Arrays; - -import io.netty.buffer.ByteBuf; -import net.imprex.orebfuscator.OrebfuscatorNms; - -public class IndirectPalette implements Palette { - - private final int bitsPerValue; - private final ChunkSection chunkSection; - - private final byte[] byValue; - private final int[] byId; - - private int size = 0; - - public IndirectPalette(int bitsPerValue, ChunkSection chunkSection) { - this.bitsPerValue = bitsPerValue; - this.chunkSection = chunkSection; - - // TODO improve block to index - this.byValue = new byte[OrebfuscatorNms.getUniqueBlockStateCount()]; - Arrays.fill(this.byValue, (byte) 0xFF); - this.byId = new int[1 << bitsPerValue]; - } - - @Override - public int idFor(int value) { - int id = this.byValue[value] & 0xFF; - if (id == 0xFF) { - id = this.size++; - - if (id != 0xFF && id < this.byId.length) { - this.byValue[value] = (byte) id; - this.byId[id] = value; - } else { - id = this.chunkSection.grow(this.bitsPerValue + 1, value); - } - } - return id; - } - - @Override - public int valueFor(int id) { - if (id < 0 || id >= this.size) { - throw new IndexOutOfBoundsException(); - } else { - return this.byId[id]; - } - } - - @Override - public void read(ByteBuf buffer) { - this.size = ByteBufUtil.readVarInt(buffer); - for (int id = 0; id < size; id++) { - int value = ByteBufUtil.readVarInt(buffer); - this.byId[id] = value; - this.byValue[value] = (byte) id; - } - } - - @Override - public void write(ByteBuf buffer) { - ByteBufUtil.writeVarInt(buffer, this.size); - - for (int id = 0; id < this.size; id++) { - ByteBufUtil.writeVarInt(buffer, this.valueFor(id)); - } - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Palette.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Palette.java deleted file mode 100644 index 651702fa8..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/Palette.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import io.netty.buffer.ByteBuf; - -public interface Palette { - - int idFor(int value); - - int valueFor(int id); - - void read(ByteBuf buffer); - - void write(ByteBuf buffer); - -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java deleted file mode 100644 index 2ee77bd67..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SimpleVarBitBuffer.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -public class SimpleVarBitBuffer implements VarBitBuffer { - - public static int calculateArraySize(int bitsPerEntry, int size) { - return bitsPerEntry == 0 ? 0 : (int) Math.ceil((float) size / (64 / bitsPerEntry)); - } - - private final int bitsPerEntry; - private final int entriesPerLong; - private final long adjustmentMask; - - private final int size; - private final long[] buffer; - - public SimpleVarBitBuffer(int bitsPerEntry, int size) { - this.bitsPerEntry = bitsPerEntry; - this.entriesPerLong = 64 / bitsPerEntry; - this.adjustmentMask = (1L << bitsPerEntry) - 1L; - - this.size = size; - this.buffer = new long[(int) Math.ceil((float) size / this.entriesPerLong)]; - } - - public int get(int index) { - int position = index / this.entriesPerLong; - int offset = (index - position * this.entriesPerLong) * this.bitsPerEntry; - return (int) (this.buffer[position] >> offset & this.adjustmentMask); - } - - public void set(int index, int value) { - int position = index / this.entriesPerLong; - int offset = (index - position * this.entriesPerLong) * this.bitsPerEntry; - this.buffer[position] = this.buffer[position] & ~(this.adjustmentMask << offset) - | (value & this.adjustmentMask) << offset; - } - - public long[] toArray() { - return this.buffer; - } - - public int size() { - return this.size; - } - - @Override - public String toString() { - return String.format("[size=%d, length=%d, bitsPerEntry=%d, entriesPerLong=%d]", size, buffer.length, bitsPerEntry, entriesPerLong); - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SingleValuePalette.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SingleValuePalette.java deleted file mode 100644 index 1e5036af2..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/SingleValuePalette.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -import io.netty.buffer.ByteBuf; - -public class SingleValuePalette implements Palette { - - private final ChunkSection chunkSection; - - private int value = -1; - - public SingleValuePalette(ChunkSection chunkSection, int value) { - this.chunkSection = chunkSection; - this.value = value; - } - - @Override - public int idFor(int value) { - if (this.value != -1 && value != this.value) { - return this.chunkSection.grow(1, value); - } else { - this.value = value; - return 0; - } - } - - @Override - public int valueFor(int id) { - if (this.value != -1 && id == 0) { - return this.value; - } else { - throw new IllegalStateException("value isn't initialized"); - } - } - - @Override - public void read(ByteBuf buffer) { - this.value = ByteBufUtil.readVarInt(buffer); - } - - @Override - public void write(ByteBuf buffer) { - if (this.value == -1) { - throw new IllegalStateException("value isn't initialized"); - } else { - ByteBufUtil.writeVarInt(buffer, this.value); - } - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/VarBitBuffer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/VarBitBuffer.java deleted file mode 100644 index 651618552..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/VarBitBuffer.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -public interface VarBitBuffer { - - int get(int index); - - void set(int index, int value); - - long[] toArray(); - - int size(); -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java deleted file mode 100644 index c5ddf752c..000000000 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ZeroVarBitBuffer.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.imprex.orebfuscator.chunk; - -public class ZeroVarBitBuffer implements VarBitBuffer { - - public static final long[] EMPTY = new long[0]; - - private final int size; - - public ZeroVarBitBuffer(int size) { - this.size = size; - } - - @Override - public int get(int index) { - return 0; - } - - @Override - public void set(int index, int value) { - if (value != 0) { - throw new IllegalArgumentException("ZeroVarBitBuffer can't hold any value"); - } - } - - @Override - public long[] toArray() { - return EMPTY; - } - - @Override - public int size() { - return this.size; - } -} diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitChunkPacketAccessor.java similarity index 64% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java rename to orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitChunkPacketAccessor.java index 7f3912945..c3f9af328 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/ChunkStruct.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitChunkPacketAccessor.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.chunk; +package net.imprex.orebfuscator.iterop; import java.util.BitSet; import java.util.Iterator; @@ -10,23 +10,30 @@ import com.comphenix.protocol.wrappers.nbt.NbtBase; import com.comphenix.protocol.wrappers.nbt.NbtCompound; +import dev.imprex.orebfuscator.interop.ChunkPacketAccessor; +import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.util.BlockPos; -import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; +import net.imprex.orebfuscator.util.MinecraftVersion; +import net.imprex.orebfuscator.util.WrappedClientboundLevelChunkPacketData; -public class ChunkStruct { +public class BukkitChunkPacketAccessor implements ChunkPacketAccessor { + + private static final boolean HAS_CLIENTBOUND_LEVEL_CHUNK_PACKET_DATA = MinecraftVersion.isAtOrAbove("1.18"); + private static final boolean HAS_HEIGHT_BITMASK = MinecraftVersion.isBelow("1.18"); + private static final boolean HAS_VARINT_BITMASK = MinecraftVersion.isBelow("1.17"); public final BukkitWorldAccessor worldAccessor; - public final int chunkX; - public final int chunkZ; + private final int chunkX; + private final int chunkZ; - public final BitSet sectionMask; - public final byte[] data; + private final BitSet sectionMask; + private final byte[] data; private final PacketContainer packet; private final WrappedClientboundLevelChunkPacketData packetData; - public ChunkStruct(PacketContainer packet, BukkitWorldAccessor worldAccessor) { + public BukkitChunkPacketAccessor(PacketContainer packet, BukkitWorldAccessor worldAccessor) { this.packet = packet; this.worldAccessor = worldAccessor; @@ -34,7 +41,7 @@ public ChunkStruct(PacketContainer packet, BukkitWorldAccessor worldAccessor) { this.chunkX = packetInteger.read(0); this.chunkZ = packetInteger.read(1); - if (ChunkCapabilities.hasClientboundLevelChunkPacketData()) { + if (HAS_CLIENTBOUND_LEVEL_CHUNK_PACKET_DATA) { this.packetData = new WrappedClientboundLevelChunkPacketData(packet); this.data = this.packetData.getBuffer(); } else { @@ -42,11 +49,11 @@ public ChunkStruct(PacketContainer packet, BukkitWorldAccessor worldAccessor) { this.data = packet.getByteArrays().read(0); } - if (ChunkCapabilities.hasHeightBitMask()) { - if (ChunkCapabilities.hasDynamicHeight()) { - this.sectionMask = packet.getSpecificModifier(BitSet.class).read(0); - } else { + if (HAS_HEIGHT_BITMASK) { + if (HAS_VARINT_BITMASK) { this.sectionMask = convertIntToBitSet(packetInteger.read(2)); + } else { + this.sectionMask = packet.getSpecificModifier(BitSet.class).read(0); } } else { this.sectionMask = new BitSet(); @@ -54,7 +61,33 @@ public ChunkStruct(PacketContainer packet, BukkitWorldAccessor worldAccessor) { } } - public void setDataBuffer(byte[] data) { + @Override + public WorldAccessor world() { + return this.worldAccessor; + } + + @Override + public int chunkX() { + return this.chunkX; + } + + @Override + public int chunkZ() { + return this.chunkZ; + } + + @Override + public boolean isSectionPresent(int index) { + return this.sectionMask.get(index); + } + + @Override + public byte[] data() { + return this.data; + } + + @Override + public void setData(byte[] data) { if (this.packetData != null) { this.packetData.setBuffer(data); } else { @@ -62,7 +95,8 @@ public void setDataBuffer(byte[] data) { } } - public void removeBlockEntityIf(Predicate predicate) { + @Override + public void filterBlockEntities(Predicate predicate) { if (this.packetData != null) { this.packetData.removeBlockEntityIf(relativePostion -> predicate.test(relativePostion.add(chunkX << 4, 0, chunkZ << 4))); @@ -98,7 +132,7 @@ public boolean isEmpty() { return this.sectionMask.isEmpty(); } - private BitSet convertIntToBitSet(int value) { + private static BitSet convertIntToBitSet(int value) { BitSet bitSet = new BitSet(); for (int index = 0; value != 0; index++) { if ((value & 1) == 1) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java index e67b0bcb1..fb360abe3 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/iterop/BukkitWorldAccessor.java @@ -18,10 +18,12 @@ import dev.imprex.orebfuscator.interop.WorldAccessor; import dev.imprex.orebfuscator.logging.OfcLogger; -import net.imprex.orebfuscator.chunk.ChunkCapabilities; +import net.imprex.orebfuscator.util.MinecraftVersion; public class BukkitWorldAccessor implements WorldAccessor { + private static final boolean HAS_DYNAMIC_HEIGHT = MinecraftVersion.isAtOrAbove("1.17"); + private static final Map ACCESSOR_LOOKUP = new ConcurrentHashMap<>(); public static BukkitWorldAccessor get(World world) { @@ -35,7 +37,7 @@ public static BukkitWorldAccessor get(World world) { private static final MethodAccessor WORLD_GET_MIN_HEIGHT = getWorldMethod("getMinHeight"); private static MethodAccessor getWorldMethod(String methodName) { - if (ChunkCapabilities.hasDynamicHeight()) { + if (HAS_DYNAMIC_HEIGHT) { MethodAccessor methodAccessor = getWorldMethod0(World.class, methodName); if (methodAccessor == null) { throw new RuntimeException("unable to find method: World::" + methodName + "()"); @@ -95,7 +97,7 @@ public void onWorldUnload(WorldUnloadEvent event) { private BukkitWorldAccessor(World world) { this.world = Objects.requireNonNull(world); - if (ChunkCapabilities.hasDynamicHeight()) { + if (HAS_DYNAMIC_HEIGHT) { this.maxHeight = (int) WORLD_GET_MAX_HEIGHT.invoke(world); this.minHeight = (int) WORLD_GET_MIN_HEIGHT.invoke(world); } else { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java index 7e80dc8bc..bd4af52d0 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationListener.java @@ -21,14 +21,14 @@ import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.config.api.AdvancedConfig; +import dev.imprex.orebfuscator.logging.OfcLogger; +import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorCompatibility; -import net.imprex.orebfuscator.chunk.ChunkStruct; +import net.imprex.orebfuscator.iterop.BukkitChunkPacketAccessor; import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; -import dev.imprex.orebfuscator.logging.OfcLogger; -import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.util.PermissionUtil; import net.imprex.orebfuscator.util.RollingAverage; import net.imprex.orebfuscator.util.ServerVersion; @@ -105,15 +105,15 @@ public void onPacketSending(PacketEvent event) { return; } - ChunkStruct struct = new ChunkStruct(event.getPacket(), worldAccessor); - if (struct.isEmpty()) { + var packet = new BukkitChunkPacketAccessor(event.getPacket(), worldAccessor); + if (packet.isEmpty()) { return; } // delay packet event.getAsyncMarker().incrementProcessingDelay(); - CompletableFuture future = this.obfuscationSystem.obfuscate(struct); + CompletableFuture future = this.obfuscationSystem.obfuscate(packet); AdvancedConfig advancedConfig = this.config.advanced(); if (advancedConfig.hasObfuscationTimeout()) { @@ -122,12 +122,12 @@ public void onPacketSending(PacketEvent event) { future.whenComplete((chunk, throwable) -> { if (throwable != null) { - this.completeExceptionally(event, struct, throwable); + this.completeExceptionally(event, packet, throwable); } else if (chunk != null) { - this.complete(event, struct, chunk); + this.complete(event, packet, chunk); } else { OfcLogger.warn(String.format("skipping chunk[world=%s, x=%d, z=%d] because obfuscation result is missing", - struct.worldAccessor.getName(), struct.chunkX, struct.chunkZ)); + packet.worldAccessor.getName(), packet.chunkX(), packet.chunkZ())); this.asynchronousManager.signalPacketTransmission(event); } }); @@ -137,32 +137,32 @@ private boolean shouldNotObfuscate(Player player, BukkitWorldAccessor worldAcces return PermissionUtil.canBypassObfuscate(player) || !config.world(worldAccessor).needsObfuscation(); } - private void completeExceptionally(PacketEvent event, ChunkStruct struct, Throwable throwable) { + private void completeExceptionally(PacketEvent event, BukkitChunkPacketAccessor packet, Throwable throwable) { if (throwable instanceof TimeoutException) { OfcLogger.warn(String.format("Obfuscation for chunk[world=%s, x=%d, z=%d] timed out", - struct.worldAccessor.getName(), struct.chunkX, struct.chunkZ)); + packet.worldAccessor.getName(), packet.chunkX(), packet.chunkZ())); } else { OfcLogger.error(String.format("An error occurred while obfuscating chunk[world=%s, x=%d, z=%d]", - struct.worldAccessor.getName(), struct.chunkX, struct.chunkZ), throwable); + packet.worldAccessor.getName(), packet.chunkX(), packet.chunkZ()), throwable); } this.asynchronousManager.signalPacketTransmission(event); } - private void complete(PacketEvent event, ChunkStruct struct, ObfuscationResult chunk) { - originalSize.add(struct.data.length); + private void complete(PacketEvent event, BukkitChunkPacketAccessor packet, ObfuscationResult chunk) { + originalSize.add(packet.data().length); obfuscatedSize.add(chunk.getData().length); - struct.setDataBuffer(chunk.getData()); + packet.setData(chunk.getData()); Set blockEntities = chunk.getBlockEntities(); if (!blockEntities.isEmpty()) { - struct.removeBlockEntityIf(blockEntities::contains); + packet.filterBlockEntities(blockEntities::contains); } final OrebfuscatorPlayer player = this.playerMap.get(event.getPlayer()); if (player != null) { - player.addChunk(struct.chunkX, struct.chunkZ, chunk.getProximityBlocks()); + player.addChunk(packet.chunkX(), packet.chunkZ(), chunk.getProximityBlocks()); } this.asynchronousManager.signalPacketTransmission(event); diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java index ec08146a0..1df38e0d3 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationProcessor.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Set; +import dev.imprex.orebfuscator.chunk.Chunk; +import dev.imprex.orebfuscator.chunk.ChunkFactory; +import dev.imprex.orebfuscator.chunk.ChunkSection; import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.config.ProximityHeightCondition; import dev.imprex.orebfuscator.config.api.BlockFlags; @@ -15,22 +18,22 @@ import dev.imprex.orebfuscator.util.BlockPos; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.OrebfuscatorNms; -import net.imprex.orebfuscator.chunk.Chunk; -import net.imprex.orebfuscator.chunk.ChunkSection; -import net.imprex.orebfuscator.chunk.ChunkStruct; +import net.imprex.orebfuscator.iterop.BukkitChunkPacketAccessor; public class ObfuscationProcessor { private final OrebfuscatorConfig config; + private final ChunkFactory chunkFactory; public ObfuscationProcessor(Orebfuscator orebfuscator) { this.config = orebfuscator.getOrebfuscatorConfig(); + this.chunkFactory = orebfuscator.getChunkFactory(); } public void process(ObfuscationTask task) { - ChunkStruct chunkStruct = task.getChunkStruct(); + BukkitChunkPacketAccessor packet = task.getPacket(); - WorldAccessor worldAccessor = chunkStruct.worldAccessor; + WorldAccessor worldAccessor = packet.worldAccessor; WorldConfigBundle bundle = this.config.world(worldAccessor); BlockFlags blockFlags = bundle.blockFlags(); @@ -40,13 +43,13 @@ public void process(ObfuscationTask task) { Set blockEntities = new HashSet<>(); List proximityBlocks = new ArrayList<>(); - int baseX = chunkStruct.chunkX << 4; - int baseZ = chunkStruct.chunkZ << 4; + int baseX = packet.chunkX() << 4; + int baseZ = packet.chunkZ() << 4; int layerY = Integer.MIN_VALUE; int layerYBlockState = -1; - try (Chunk chunk = Chunk.fromChunkStruct(chunkStruct)) { + try (Chunk chunk = this.chunkFactory.fromPacket(packet)) { for (int sectionIndex = Math.max(0, bundle.minSectionIndex()); sectionIndex <= Math .min(chunk.getSectionCount() - 1, bundle.maxSectionIndex()); sectionIndex++) { ChunkSection chunkSection = chunk.getSection(sectionIndex); @@ -121,7 +124,7 @@ public void process(ObfuscationTask task) { private int getBlockStateBelow(WorldConfigBundle bundle, Chunk chunk, int x, int y, int z, boolean allowNonOcclude) { BlockFlags blockFlags = bundle.blockFlags(); - for (int targetY = y - 1; targetY > chunk.getWorldAccessor().getMinBuildHeight(); targetY--) { + for (int targetY = y - 1; targetY > chunk.world().getMinBuildHeight(); targetY--) { int blockData = chunk.getBlockState(x, targetY, z); if (blockData != -1 && (allowNonOcclude || OrebfuscatorNms.isOccluding(blockData))) { int mask = blockFlags.flags(blockData, y); @@ -144,7 +147,7 @@ && isAdjacentBlockOccluding(task, chunk, x, y, z + 1) } private boolean isAdjacentBlockOccluding(ObfuscationTask task, Chunk chunk, int x, int y, int z) { - if (y >= chunk.getWorldAccessor().getMaxBuildHeight() || y < chunk.getWorldAccessor().getMinBuildHeight()) { + if (y >= chunk.world().getMaxBuildHeight() || y < chunk.world().getMinBuildHeight()) { return false; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java index 868e1aaf5..b784ed6f6 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationRequest.java @@ -10,7 +10,7 @@ import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import dev.imprex.orebfuscator.util.BlockPos; import dev.imprex.orebfuscator.util.ChunkCacheKey; -import net.imprex.orebfuscator.chunk.ChunkStruct; +import net.imprex.orebfuscator.iterop.BukkitChunkPacketAccessor; public class ObfuscationRequest { @@ -23,25 +23,25 @@ private static final byte[] hash(byte[] systemHash, byte[] data) { return HASH_FUNCTION.newHasher().putBytes(systemHash).putBytes(data).hash().asBytes(); } - public static ObfuscationRequest fromChunk(ChunkStruct struct, OrebfuscatorConfig config, + public static ObfuscationRequest fromChunk(BukkitChunkPacketAccessor packet, OrebfuscatorConfig config, ObfuscationTaskDispatcher dispatcher) { - byte[] hash = config.cache().enabled() ? hash(config.systemHash(), struct.data) : EMPTY_HASH; - return new ObfuscationRequest(dispatcher, struct, hash); + byte[] hash = config.cache().enabled() ? hash(config.systemHash(), packet.data()) : EMPTY_HASH; + return new ObfuscationRequest(dispatcher, packet, hash); } private final CompletableFuture future = new CompletableFuture<>(); private final ObfuscationTaskDispatcher dispatcher; - private final ChunkStruct chunkStruct; + private final BukkitChunkPacketAccessor packet; private final ChunkCacheKey chunkCacheKey; private final byte[] chunkHash; - private ObfuscationRequest(ObfuscationTaskDispatcher dispatcher, ChunkStruct chunkStruct, byte[] chunkHash) { + private ObfuscationRequest(ObfuscationTaskDispatcher dispatcher, BukkitChunkPacketAccessor packet, byte[] chunkHash) { this.dispatcher = dispatcher; - this.chunkStruct = chunkStruct; + this.packet = packet; - this.chunkCacheKey = new ChunkCacheKey(chunkStruct.worldAccessor.getName(), chunkStruct.chunkX, chunkStruct.chunkZ); + this.chunkCacheKey = new ChunkCacheKey(packet.world().getName(), packet.chunkX(), packet.chunkZ()); this.chunkHash = chunkHash; } @@ -57,8 +57,8 @@ public byte[] getChunkHash() { return chunkHash; } - public ChunkStruct getChunkStruct() { - return chunkStruct; + public BukkitChunkPacketAccessor getPacket() { + return packet; } public CompletableFuture submitForObfuscation() { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java index 369d97181..9ad42919d 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationSystem.java @@ -8,7 +8,7 @@ import dev.imprex.orebfuscator.config.OrebfuscatorConfig; import net.imprex.orebfuscator.Orebfuscator; import net.imprex.orebfuscator.cache.ObfuscationCache; -import net.imprex.orebfuscator.chunk.ChunkStruct; +import net.imprex.orebfuscator.iterop.BukkitChunkPacketAccessor; public class ObfuscationSystem { @@ -38,8 +38,8 @@ public void registerChunkListener() { this.listener = new ObfuscationListener(orebfuscator); } - public CompletableFuture obfuscate(ChunkStruct chunkStruct) { - ObfuscationRequest request = ObfuscationRequest.fromChunk(chunkStruct, this.config, this.dispatcher); + public CompletableFuture obfuscate(BukkitChunkPacketAccessor packet) { + ObfuscationRequest request = ObfuscationRequest.fromChunk(packet, this.config, this.dispatcher); if (this.config.cache().enabled()) { return this.cache.get(request); } else { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java index 394a0a621..a9332a6ef 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationTask.java @@ -10,13 +10,13 @@ import dev.imprex.orebfuscator.util.ChunkCacheKey; import dev.imprex.orebfuscator.util.ChunkDirection; import net.imprex.orebfuscator.OrebfuscatorCompatibility; -import net.imprex.orebfuscator.chunk.ChunkStruct; +import net.imprex.orebfuscator.iterop.BukkitChunkPacketAccessor; import net.imprex.orebfuscator.nms.ReadOnlyChunk; public class ObfuscationTask { public static CompletableFuture fromRequest(ObfuscationRequest request) { - World world = request.getChunkStruct().worldAccessor.world; + World world = request.getPacket().worldAccessor.world; ChunkCacheKey key = request.getCacheKey(); return OrebfuscatorCompatibility.getNeighboringChunks(world, key) @@ -35,8 +35,8 @@ private ObfuscationTask(ObfuscationRequest request, ReadOnlyChunk[] neighboringC this.neighboringChunks = neighboringChunks; } - public ChunkStruct getChunkStruct() { - return this.request.getChunkStruct(); + public BukkitChunkPacketAccessor getPacket() { + return this.request.getPacket(); } public void complete(byte[] data, Set blockEntities, List proximityBlocks) { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java index b27a8397d..5d79c99b6 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/proximity/ProximityPacketListener.java @@ -15,14 +15,16 @@ import dev.imprex.orebfuscator.config.api.ProximityConfig; import dev.imprex.orebfuscator.interop.WorldAccessor; import net.imprex.orebfuscator.Orebfuscator; -import net.imprex.orebfuscator.chunk.ChunkCapabilities; import net.imprex.orebfuscator.iterop.BukkitWorldAccessor; import net.imprex.orebfuscator.player.OrebfuscatorPlayer; import net.imprex.orebfuscator.player.OrebfuscatorPlayerMap; +import net.imprex.orebfuscator.util.MinecraftVersion; import net.imprex.orebfuscator.util.PermissionUtil; public class ProximityPacketListener extends PacketAdapter { + private static final boolean HAS_CHUNK_POS_FIELD = MinecraftVersion.isAtOrAbove("1.20.2"); + private final ProtocolManager protocolManager; private final OrebfuscatorConfig config; @@ -58,7 +60,7 @@ public void onPacketSending(PacketEvent event) { OrebfuscatorPlayer orebfuscatorPlayer = this.playerMap.get(player); if (orebfuscatorPlayer != null) { PacketContainer packet = event.getPacket(); - if (ChunkCapabilities.hasChunkPosFieldUnloadPacket()) { + if (HAS_CHUNK_POS_FIELD) { ChunkCoordIntPair chunkPos = packet.getChunkCoordIntPairs().read(0); orebfuscatorPlayer.removeChunk(chunkPos.getChunkX(), chunkPos.getChunkZ()); } else { diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/WrappedClientboundLevelChunkPacketData.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/WrappedClientboundLevelChunkPacketData.java similarity index 98% rename from orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/WrappedClientboundLevelChunkPacketData.java rename to orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/WrappedClientboundLevelChunkPacketData.java index 957f428ab..6ee8530a4 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/chunk/WrappedClientboundLevelChunkPacketData.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/util/WrappedClientboundLevelChunkPacketData.java @@ -1,4 +1,4 @@ -package net.imprex.orebfuscator.chunk; +package net.imprex.orebfuscator.util; import java.util.Iterator; import java.util.List;