From ee9343e2982f892edbbfa7d9fb47d436d6c5de89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Wed, 8 Jun 2022 19:20:06 +0200 Subject: [PATCH] [#220] Add support for 1.19 (#221) * feat: add support for 1.19 --- .github/workflows/buildtools.sh | 1 + .../orebfuscator-nms-v1_17_R1/pom.xml | 2 +- .../orebfuscator-nms-v1_18_R1/pom.xml | 2 +- .../orebfuscator-nms-v1_19_R1/pom.xml | 72 ++++ .../nms/v1_19_R1/BlockStateWrapper.java | 27 ++ .../orebfuscator/nms/v1_19_R1/NmsManager.java | 165 +++++++++ .../nms/v1_19_R1/ReadOnlyChunkWrapper.java | 33 ++ .../nms/v1_19_R1/RegionFileCache.java | 44 +++ orebfuscator-nms/pom.xml | 1 + orebfuscator-plugin/pom.xml | 6 + .../src/main/resources/config/config-1.19.yml | 321 ++++++++++++++++++ pom.xml | 5 +- 12 files changed, 675 insertions(+), 4 deletions(-) create mode 100644 orebfuscator-nms/orebfuscator-nms-v1_19_R1/pom.xml create mode 100644 orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/BlockStateWrapper.java create mode 100644 orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java create mode 100644 orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/ReadOnlyChunkWrapper.java create mode 100644 orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java create mode 100644 orebfuscator-plugin/src/main/resources/config/config-1.19.yml diff --git a/.github/workflows/buildtools.sh b/.github/workflows/buildtools.sh index b04712f6..20129673 100644 --- a/.github/workflows/buildtools.sh +++ b/.github/workflows/buildtools.sh @@ -36,4 +36,5 @@ elif [ $1 = "java-16" ]; then elif [ $1 = "java-17" ]; then checkVersion 1.18.1 checkVersion 1.18.2 + checkVersion 1.19 fi \ No newline at end of file diff --git a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/pom.xml b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/pom.xml index ec37c842..c69ea1dd 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_17_R1/pom.xml +++ b/orebfuscator-nms/orebfuscator-nms-v1_17_R1/pom.xml @@ -33,7 +33,7 @@ net.md-5 specialsource-maven-plugin - 1.2.2 + ${plugin.specialsource.version} package diff --git a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/pom.xml b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/pom.xml index 8f60c31f..63999745 100644 --- a/orebfuscator-nms/orebfuscator-nms-v1_18_R1/pom.xml +++ b/orebfuscator-nms/orebfuscator-nms-v1_18_R1/pom.xml @@ -39,7 +39,7 @@ net.md-5 specialsource-maven-plugin - 1.2.3 + ${plugin.specialsource.version} package diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/pom.xml b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/pom.xml new file mode 100644 index 00000000..d0bca0a4 --- /dev/null +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/pom.xml @@ -0,0 +1,72 @@ + + 4.0.0 + + + net.imprex + orebfuscator-nms + ${revision} + + + orebfuscator-nms-v1_19_R1 + jar + + + + net.imprex + orebfuscator-nms-api + ${revision} + provided + + + org.spigotmc + spigot + 1.19-R0.1-SNAPSHOT + remapped-mojang + provided + + + com.comphenix.protocol + ProtocolLib-API + ${dependency.protocollib.version} + provided + + + + + + + net.md-5 + specialsource-maven-plugin + ${plugin.specialsource.version} + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:1.19-R0.1-SNAPSHOT:txt:maps-mojang + true + org.spigotmc:spigot:1.19-R0.1-SNAPSHOT:jar:remapped-mojang + true + remapped-obf + + + + package + + remap + + remap-spigot + + ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + org.spigotmc:minecraft-server:1.19-R0.1-SNAPSHOT:csrg:maps-spigot + org.spigotmc:spigot:1.19-R0.1-SNAPSHOT:jar:remapped-obf + + + + + + + \ 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/BlockStateWrapper.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/BlockStateWrapper.java new file mode 100644 index 00000000..354eb15b --- /dev/null +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/BlockStateWrapper.java @@ -0,0 +1,27 @@ +package net.imprex.orebfuscator.nms.v1_19_R1; + +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; + +import net.imprex.orebfuscator.nms.AbstractBlockState; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.block.state.BlockState; + +public class BlockStateWrapper extends AbstractBlockState { + + public BlockStateWrapper(int x, int y, int z, World world, BlockState state) { + super(x, y, z, world, state); + } + + @Override + public int getBlockId() { + return NmsManager.getBlockId(this.state); + } + + @Override + public void notifyBlockChange() { + ServerLevel serverLevel = ((CraftWorld) this.world).getHandle(); + serverLevel.getChunkSource().blockChanged(new BlockPos(this.getX(), this.getY(), this.getZ())); + } +} 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 new file mode 100644 index 00000000..655b3732 --- /dev/null +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/NmsManager.java @@ -0,0 +1,165 @@ +package net.imprex.orebfuscator.nms.v1_19_R1; + +import java.util.Optional; + +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.craftbukkit.v1_19_R1.util.CraftMagicNumbers; +import org.bukkit.entity.Player; + +import net.imprex.orebfuscator.config.CacheConfig; +import net.imprex.orebfuscator.config.Config; +import net.imprex.orebfuscator.nms.AbstractBlockState; +import net.imprex.orebfuscator.nms.AbstractNmsManager; +import net.imprex.orebfuscator.nms.AbstractRegionFileCache; +import net.imprex.orebfuscator.nms.ReadOnlyChunk; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; +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.util.Mth; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; + +public class NmsManager extends AbstractNmsManager { + + private static ServerLevel level(World world) { + return ((CraftWorld) world).getHandle(); + } + + private static ServerPlayer player(Player player) { + return ((CraftPlayer) player).getHandle(); + } + + private static boolean isChunkLoaded(ServerLevel level, int chunkX, int chunkZ) { + return level.getChunkSource().isChunkLoaded(chunkX, chunkZ); + } + + private static BlockState getBlockData(World world, int x, int y, int z, boolean loadChunk) { + ServerLevel level = level(world); + ServerChunkCache serverChunkCache = level.getChunkSource(); + + if (isChunkLoaded(level, x >> 4, z >> 4) || loadChunk) { + // will load chunk if not loaded already + LevelChunk chunk = serverChunkCache.getChunk(x >> 4, z >> 4, true); + return chunk != null ? chunk.getBlockState(new BlockPos(x, y, z)) : null; + } + return null; + } + + static int getBlockId(BlockState blockData) { + if (blockData == null) { + return 0; + } else { + int id = Block.BLOCK_STATE_REGISTRY.getId(blockData); + return id == -1 ? 0 : id; + } + } + + public NmsManager(Config config) { + super(config); + + for (BlockState blockData : Block.BLOCK_STATE_REGISTRY) { + Material material = CraftBlockData.fromData(blockData).getMaterial(); + int blockId = getBlockId(blockData); + this.registerMaterialId(material, blockId); + this.setBlockFlags(blockId, blockData.isAir(), material.isOccluding(), blockData.hasBlockEntity()); + } + } + + @Override + protected AbstractRegionFileCache createRegionFileCache(CacheConfig cacheConfig) { + return new RegionFileCache(cacheConfig); + } + + @Override + public int getBitsPerBlock() { + return Mth.ceillog2(Block.BLOCK_STATE_REGISTRY.size()); + } + + @Override + public int getTotalBlockCount() { + return Block.BLOCK_STATE_REGISTRY.size(); + } + + @Override + public Optional getMaterialByName(String name) { + Optional block = Registry.BLOCK.getOptional(new ResourceLocation(name)); + if (block.isPresent()) { + return Optional.ofNullable(CraftMagicNumbers.getMaterial(block.get())); + } + return Optional.empty(); + } + + @Override + public Optional getNameByMaterial(Material material) { + ResourceLocation resourceLocation = Registry.BLOCK.getKey(CraftMagicNumbers.getBlock(material)); + if (resourceLocation != null) { + return Optional.of(resourceLocation.toString()); + } + return Optional.empty(); + } + + @Override + public boolean isHoe(Material material) { + switch (material) { + case WOODEN_HOE: + case STONE_HOE: + case IRON_HOE: + case GOLDEN_HOE: + case DIAMOND_HOE: + case NETHERITE_HOE: + return true; + + default: + return false; + } + } + + @Override + public ReadOnlyChunk getReadOnlyChunk(World world, int chunkX, int chunkZ) { + ServerChunkCache serverChunkCache = level(world).getChunkSource(); + LevelChunk chunk = serverChunkCache.getChunk(chunkX, chunkZ, true); + return new ReadOnlyChunkWrapper(chunk); + } + + @Override + public AbstractBlockState getBlockState(World world, int x, int y, int z) { + BlockState blockData = getBlockData(world, x, y, z, false); + return blockData != null ? new BlockStateWrapper(x, y, z, world, blockData) : null; + } + + @Override + public boolean sendBlockChange(Player player, int x, int y, int z) { + ServerPlayer serverPlayer = player(player); + ServerLevel level = serverPlayer.getLevel(); + if (!isChunkLoaded(level, x >> 4, z >> 4)) { + return false; + } + + BlockPos position = new BlockPos(x, y, z); + ClientboundBlockUpdatePacket packet = new ClientboundBlockUpdatePacket(level, position); + serverPlayer.connection.send(packet); + updateBlockEntity(serverPlayer, position, packet.blockState); + + return true; + } + + private void updateBlockEntity(ServerPlayer player, BlockPos position, BlockState blockData) { + if (blockData.hasBlockEntity()) { + ServerLevel serverLevel = player.getLevel(); + BlockEntity blockEntity = serverLevel.getBlockEntity(position); + if (blockEntity != null) { + player.connection.send(blockEntity.getUpdatePacket()); + } + } + } +} diff --git a/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/ReadOnlyChunkWrapper.java b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/ReadOnlyChunkWrapper.java new file mode 100644 index 00000000..7324f0c5 --- /dev/null +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/ReadOnlyChunkWrapper.java @@ -0,0 +1,33 @@ +package net.imprex.orebfuscator.nms.v1_19_R1; + +import net.imprex.orebfuscator.nms.ReadOnlyChunk; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; + +public class ReadOnlyChunkWrapper implements ReadOnlyChunk { + + private final LevelChunk chunk; + + ReadOnlyChunkWrapper(LevelChunk chunk) { + this.chunk = chunk; + } + + private BlockState getState(int x, int y, int z) { + int sectionIndex = chunk.getSectionIndex(y); + LevelChunkSection[] sections = chunk.getSections(); + if (sectionIndex >= 0 && sectionIndex < sections.length) { + LevelChunkSection section = sections[sectionIndex]; + if (sections != null && !section.hasOnlyAir()) { + return section.getBlockState(x & 0xF, y & 0xF, z & 0xF); + } + } + return Blocks.AIR.defaultBlockState(); + } + + @Override + public int getBlockState(int x, int y, int z) { + return NmsManager.getBlockId(getState(x, y, z)); + } +} 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 new file mode 100644 index 00000000..7b52a932 --- /dev/null +++ b/orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java @@ -0,0 +1,44 @@ +package net.imprex.orebfuscator.nms.v1_19_R1; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.file.Path; + +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 net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.storage.RegionFile; +import net.minecraft.world.level.chunk.storage.RegionFileVersion; + +public class RegionFileCache extends AbstractRegionFileCache { + + public RegionFileCache(CacheConfig cacheConfig) { + super(cacheConfig); + } + + @Override + protected RegionFile createRegionFile(Path path) throws IOException { + boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().forceSynchronousWrites(); + return new RegionFile(path, path.getParent(), RegionFileVersion.VERSION_DEFLATE, isSyncChunkWrites); + } + + @Override + protected void closeRegionFile(RegionFile t) throws IOException { + t.close(); + } + + @Override + protected DataInputStream createInputStream(RegionFile t, ChunkPosition key) throws IOException { + return t.getChunkDataInputStream(new ChunkPos(key.getX(), key.getZ())); + } + + @Override + protected DataOutputStream createOutputStream(RegionFile t, ChunkPosition key) throws IOException { + return t.getChunkDataOutputStream(new ChunkPos(key.getX(), key.getZ())); + } +} \ No newline at end of file diff --git a/orebfuscator-nms/pom.xml b/orebfuscator-nms/pom.xml index 492760f1..c25915dd 100644 --- a/orebfuscator-nms/pom.xml +++ b/orebfuscator-nms/pom.xml @@ -26,5 +26,6 @@ orebfuscator-nms-v1_17_R1 orebfuscator-nms-v1_18_R1 orebfuscator-nms-v1_18_R2 + orebfuscator-nms-v1_19_R1 \ No newline at end of file diff --git a/orebfuscator-plugin/pom.xml b/orebfuscator-plugin/pom.xml index d8a8c0a2..d97a8bce 100644 --- a/orebfuscator-plugin/pom.xml +++ b/orebfuscator-plugin/pom.xml @@ -139,5 +139,11 @@ ${revision} compile + + net.imprex + orebfuscator-nms-v1_19_R1 + ${revision} + compile + \ No newline at end of file diff --git a/orebfuscator-plugin/src/main/resources/config/config-1.19.yml b/orebfuscator-plugin/src/main/resources/config/config-1.19.yml new file mode 100644 index 00000000..706a947c --- /dev/null +++ b/orebfuscator-plugin/src/main/resources/config/config-1.19.yml @@ -0,0 +1,321 @@ +version: 2 +general: + checkForUpdates: true + updateOnBlockDamage: true + bypassNotification: true + ignoreSpectator: false + updateRadius: 2 +advanced: + verbose: false + useAsyncPacketListener: true + maxMillisecondsPerTick: 10 + protocolLibThreads: -1 + obfuscationWorkerThreads: -1 + proximityHiderThreads: -1 +cache: + enabled: true + baseDirectory: orebfuscator_cache + maximumOpenRegionFiles: 256 + deleteRegionFilesAfterAccess: 172800000 + maximumSize: 16384 + expireAfterAccess: 60000 + maximumTaskQueueSize: 32768 +obfuscation: + obfuscation-overworld: + enabled: true + minY: -2032 + maxY: 2031 + worlds: + - world + hiddenBlocks: + - minecraft:emerald_ore + - minecraft:deepslate_emerald_ore + - minecraft:diamond_ore + - minecraft:deepslate_diamond_ore + - minecraft:gold_ore + - minecraft:deepslate_gold_ore + - 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 + - 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: + minecraft:stone: 30 + minecraft:deepslate: 30 + minecraft:cave_air: 5 + minecraft:cobblestone: 1 + minecraft:diamond_ore: 25 + minecraft:emerald_ore: 10 + minecraft:gold_ore: 5 + minecraft:iron_ore: 5 + minecraft:copper_ore: 5 + minecraft:coal_ore: 5 + minecraft:lapis_ore: 5 + minecraft:redstone_ore: 5 + minecraft:mossy_cobblestone: 1 + minecraft:obsidian: 1 + minecraft:tnt: 1 + obfuscation-nether: + enabled: true + minY: -2032 + maxY: 2031 + worlds: + - world_nether + hiddenBlocks: + - minecraft:netherrack + - minecraft:nether_quartz_ore + - 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 + randomBlocks: + minecraft:netherrack: 4 + minecraft:nether_quartz_ore: 1 + minecraft:nether_gold_ore: 1 + minecraft:ancient_debris: 1 + obfuscation-end: + enabled: true + minY: -2032 + maxY: 2031 + worlds: + - world_the_end + hiddenBlocks: + - 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: + 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: -2032 + maxY: 2031 + worlds: + - world + distance: 24 + useFastGazeCheck: 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: + minecraft:stone: 1 + proximity-nether: + enabled: true + minY: -2032 + maxY: 2031 + worlds: + - world_nether + distance: 24 + useFastGazeCheck: 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: + minecraft:netherrack: 1 + proximity-end: + enabled: true + minY: -2032 + maxY: 2031 + worlds: + - world_the_end + distance: 24 + useFastGazeCheck: 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: + minecraft:end_stone: 1 diff --git a/pom.xml b/pom.xml index f88291be..c3c9a306 100644 --- a/pom.xml +++ b/pom.xml @@ -15,10 +15,11 @@ 4.1.68.Final 1.13-R0.1-SNAPSHOT 4.4.0 - 2.2.1 + 3.0.0 - 3.2.1 + 3.3.0 1.2.7 + 1.2.4 1.8 1.8