From 3b349c9d0712c7b2f058cba663900fdf8735117c Mon Sep 17 00:00:00 2001 From: Ryan Huston Date: Wed, 7 Dec 2022 20:26:45 -0500 Subject: [PATCH] Add support for 1.19 specific features. (#239) * Added support for 1.19 specific features. * Removed leftover import from testing * Added missing sculk materials for the catalyst and changed user field to #sculk * Reverted version to v21.2 Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com> --- build.gradle | 3 +- pom.xml | 2 +- .../net/coreprotect/bukkit/BukkitAdapter.java | 5 +- .../net/coreprotect/bukkit/Bukkit_v1_19.java | 70 +++++++++++++++++++ .../java/net/coreprotect/config/Config.java | 4 ++ .../listener/block/BlockSpreadListener.java | 41 +++++++---- .../net/coreprotect/model/BlockGroup.java | 1 + .../net/coreprotect/paper/PaperAdapter.java | 2 + .../net/coreprotect/spigot/SpigotAdapter.java | 2 + 9 files changed, 114 insertions(+), 16 deletions(-) create mode 100644 src/main/java/net/coreprotect/bukkit/Bukkit_v1_19.java diff --git a/build.gradle b/build.gradle index 6f924f9..bcd754b 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ dependencies { compileOnly('com.sk89q.worldedit:worldedit-bukkit:7.0.0-SNAPSHOT') { exclude group: 'org.bukkit' } - compileOnly 'io.papermc.paper:paper-api:1.18.1-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-api:1.19-R0.1-SNAPSHOT' implementation 'org.bstats:bstats-bukkit-lite:1.8' implementation 'com.zaxxer:HikariCP:4.0.3' } @@ -85,4 +85,3 @@ processResources { } }) } - diff --git a/pom.xml b/pom.xml index ed34dae..fc606f4 100755 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ io.papermc.paper paper-api - 1.18.1-R0.1-SNAPSHOT + 1.19-R0.1-SNAPSHOT provided diff --git a/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java b/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java index f9b127b..7525186 100644 --- a/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java +++ b/src/main/java/net/coreprotect/bukkit/BukkitAdapter.java @@ -30,6 +30,7 @@ public class BukkitAdapter implements BukkitInterface { public static final int BUKKIT_V1_16 = 16; public static final int BUKKIT_V1_17 = 17; public static final int BUKKIT_V1_18 = 18; + public static final int BUKKIT_V1_19 = 19; public static void loadAdapter() { switch (ConfigHandler.SERVER_VERSION) { @@ -47,9 +48,11 @@ public class BukkitAdapter implements BukkitInterface { BukkitAdapter.ADAPTER = new Bukkit_v1_17(); break; case BUKKIT_V1_18: - default: BukkitAdapter.ADAPTER = new Bukkit_v1_18(); break; + case BUKKIT_V1_19: + default: + BukkitAdapter.ADAPTER = new Bukkit_v1_19(); } } diff --git a/src/main/java/net/coreprotect/bukkit/Bukkit_v1_19.java b/src/main/java/net/coreprotect/bukkit/Bukkit_v1_19.java new file mode 100644 index 0000000..57261a1 --- /dev/null +++ b/src/main/java/net/coreprotect/bukkit/Bukkit_v1_19.java @@ -0,0 +1,70 @@ +package net.coreprotect.bukkit; + +import net.coreprotect.model.BlockGroup; +import org.bukkit.Material; +import org.bukkit.entity.*; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +public class Bukkit_v1_19 extends Bukkit_v1_18 implements BukkitInterface { + + public Bukkit_v1_19() { + BlockGroup.SCULK = new HashSet<>(Arrays.asList(Material.SCULK, Material.SCULK_VEIN, Material.SCULK_SENSOR, Material.SCULK_SHRIEKER)); + } + + @Override + public boolean getEntityMeta(LivingEntity entity, List info) { + if (entity instanceof Frog) { + Frog frog = (Frog) entity; + info.add(frog.getVariant()); + } + else if (entity instanceof Goat) { + Goat goat = (Goat) entity; + info.add(goat.isScreaming()); + info.add(goat.hasLeftHorn()); + info.add(goat.hasRightHorn()); + } + else if (super.getEntityMeta(entity, info)) { + return true; + } + else { + return false; + } + + return true; + } + + @Override + public boolean setEntityMeta(Entity entity, Object value, int count) { + if (entity instanceof Frog) { + Frog frog = (Frog) entity; + if (count == 0) { + Frog.Variant set = (Frog.Variant) value; + frog.setVariant(set); + } + } + else if (entity instanceof Goat) { + Goat goat = (Goat) entity; + boolean set = (Boolean) value; + if (count == 0) { + goat.setScreaming(set); + } + else if (count == 1) { + goat.setLeftHorn(set); + } + else if (count == 2) { + goat.setRightHorn(set); + } + } + else if (super.setEntityMeta(entity, value, count)) { + return true; + } + else { + return false; + } + + return true; + } +} diff --git a/src/main/java/net/coreprotect/config/Config.java b/src/main/java/net/coreprotect/config/Config.java index e58bd0e..898f98d 100644 --- a/src/main/java/net/coreprotect/config/Config.java +++ b/src/main/java/net/coreprotect/config/Config.java @@ -72,6 +72,7 @@ public class Config extends Language { public boolean TREE_GROWTH; public boolean MUSHROOM_GROWTH; public boolean VINE_GROWTH; + public boolean SCULK_SPREAD; public boolean PORTALS; public boolean WATER_FLOW; public boolean LAVA_FLOW; @@ -124,6 +125,7 @@ public class Config extends Language { DEFAULT_VALUES.put("tree-growth", "true"); DEFAULT_VALUES.put("mushroom-growth", "true"); DEFAULT_VALUES.put("vine-growth", "true"); + DEFAULT_VALUES.put("sculk-spread", "true"); DEFAULT_VALUES.put("portals", "true"); DEFAULT_VALUES.put("water-flow", "true"); DEFAULT_VALUES.put("lava-flow", "true"); @@ -166,6 +168,7 @@ public class Config extends Language { HEADERS.put("tree-growth", new String[] { "# Logs tree growth. Trees are linked to the player who planted the sappling." }); HEADERS.put("mushroom-growth", new String[] { "# Logs mushroom growth." }); HEADERS.put("vine-growth", new String[] { "# Logs natural vine growth." }); + HEADERS.put("sculk-spread", new String[] { "# Logs the spread of sculk blocks from sculk catalysts." }); HEADERS.put("portals", new String[] { "# Logs when portals such as Nether portals generate naturally." }); HEADERS.put("water-flow", new String[] { "# Logs water flow. If water destroys other blocks, such as torches,", "# this allows it to be properly rolled back." }); HEADERS.put("lava-flow", new String[] { "# Logs lava flow. If lava destroys other blocks, such as torches,", "# this allows it to be properly rolled back." }); @@ -224,6 +227,7 @@ public class Config extends Language { this.TREE_GROWTH = this.getBoolean("tree-growth"); this.MUSHROOM_GROWTH = this.getBoolean("mushroom-growth"); this.VINE_GROWTH = this.getBoolean("vine-growth"); + this.SCULK_SPREAD = this.getBoolean("sculk-spread"); this.PORTALS = this.getBoolean("portals"); this.WATER_FLOW = this.getBoolean("water-flow"); this.LAVA_FLOW = this.getBoolean("lava-flow"); diff --git a/src/main/java/net/coreprotect/listener/block/BlockSpreadListener.java b/src/main/java/net/coreprotect/listener/block/BlockSpreadListener.java index 54f2ad6..ec62586 100644 --- a/src/main/java/net/coreprotect/listener/block/BlockSpreadListener.java +++ b/src/main/java/net/coreprotect/listener/block/BlockSpreadListener.java @@ -27,20 +27,18 @@ public final class BlockSpreadListener extends Queue implements Listener { * block-change: true * */ + if (event.isCancelled()) { + return; + } - if (!event.isCancelled() && Config.getConfig(event.getBlock().getWorld()).VINE_GROWTH) { - BlockState blockstate = event.getNewState(); - Material type = blockstate.getType(); - if (!BlockGroup.VINES.contains(type) && !BlockGroup.AMETHYST.contains(type) && type != Material.CHORUS_FLOWER && type != Material.BAMBOO) { - return; - } + BlockState blockstate = event.getNewState(); + Material type = blockstate.getType(); + Block block = event.getBlock(); - Block block = event.getBlock(); - Location location = block.getLocation(); - int timestamp = (int) (System.currentTimeMillis() / 1000L); - Object[] cacheData = CacheHandler.spreadCache.get(location); - CacheHandler.spreadCache.put(location, new Object[] { timestamp, type }); - if (cacheData != null && ((Material) cacheData[1]) == type) { + if (Config.getConfig(event.getBlock().getWorld()).VINE_GROWTH && + (BlockGroup.VINES.contains(type) || BlockGroup.AMETHYST.contains(type) + || type == Material.CHORUS_FLOWER || type == Material.BAMBOO)) { + if(checkCacheData(block, type)) { return; } @@ -74,6 +72,25 @@ public final class BlockSpreadListener extends Queue implements Listener { Queue.queueBlockPlaceDelayed("#bamboo", block.getLocation(), type, null, block.getState(), 0); } } + + if(Config.getConfig(event.getBlock().getWorld()).SCULK_SPREAD && BlockGroup.SCULK.contains(type)) { + if(checkCacheData(block, type)) { + return; + } + + queueBlockPlace("#sculk", block.getState(), block.getType(), block.getState(), type, -1, 0, blockstate.getBlockData().getAsString()); + } } + private boolean checkCacheData(Block block, Material type) { + Location location = block.getLocation(); + int timestamp = (int) (System.currentTimeMillis() / 1000L); + Object[] cacheData = CacheHandler.spreadCache.get(location); + CacheHandler.spreadCache.put(location, new Object[] { timestamp, type }); + if (cacheData != null && ((Material) cacheData[1]) == type) { + return true; + } + + return false; + } } diff --git a/src/main/java/net/coreprotect/model/BlockGroup.java b/src/main/java/net/coreprotect/model/BlockGroup.java index 58495a3..ab0ecdd 100644 --- a/src/main/java/net/coreprotect/model/BlockGroup.java +++ b/src/main/java/net/coreprotect/model/BlockGroup.java @@ -33,6 +33,7 @@ public final class BlockGroup { public static Set SAFE_INTERACT_BLOCKS = new HashSet<>(Arrays.asList(Material.LEVER, Material.ACACIA_TRAPDOOR, Material.BIRCH_TRAPDOOR, Material.DARK_OAK_TRAPDOOR, Material.JUNGLE_TRAPDOOR, Material.SPRUCE_TRAPDOOR, Material.OAK_TRAPDOOR, Material.OAK_FENCE_GATE, Material.SPRUCE_FENCE_GATE, Material.BIRCH_FENCE_GATE, Material.JUNGLE_FENCE_GATE, Material.DARK_OAK_FENCE_GATE, Material.ACACIA_FENCE_GATE)); public static Set UPDATE_STATE = new HashSet<>(Arrays.asList(Material.TORCH, Material.WALL_TORCH, Material.REDSTONE_WIRE, Material.RAIL, Material.POWERED_RAIL, Material.DETECTOR_RAIL, Material.FURNACE, Material.BLAST_FURNACE, Material.SMOKER, Material.LEVER, Material.REDSTONE_TORCH, Material.REDSTONE_WALL_TORCH, Material.GLOWSTONE, Material.JACK_O_LANTERN, Material.REPEATER, Material.REDSTONE_LAMP, Material.BEACON, Material.COMPARATOR, Material.DAYLIGHT_DETECTOR, Material.REDSTONE_BLOCK, Material.HOPPER, Material.CHEST, Material.TRAPPED_CHEST, Material.ACTIVATOR_RAIL)); public static Set NATURAL_BLOCKS = new HashSet<>(Arrays.asList(Material.STONE, Material.GOLD_ORE, Material.IRON_ORE, Material.COAL_ORE, Material.LAPIS_ORE, Material.SANDSTONE, Material.COBWEB, Material.FERN, Material.DEAD_BUSH, Material.DANDELION, Material.POPPY, Material.BLUE_ORCHID, Material.ALLIUM, Material.AZURE_BLUET, Material.RED_TULIP, Material.ORANGE_TULIP, Material.WHITE_TULIP, Material.PINK_TULIP, Material.OXEYE_DAISY, Material.BROWN_MUSHROOM, Material.RED_MUSHROOM, Material.OBSIDIAN, Material.DIAMOND_ORE, Material.WHEAT, Material.REDSTONE_ORE, Material.SNOW, Material.ICE, Material.CACTUS, Material.CLAY, Material.SUGAR_CANE, Material.PUMPKIN, Material.NETHERRACK, Material.SOUL_SAND, Material.MELON, Material.PUMPKIN_STEM, Material.MELON_STEM, Material.MYCELIUM, Material.LILY_PAD, Material.NETHER_WART, Material.END_STONE, Material.EMERALD_ORE, Material.CARROT, Material.POTATO, Material.KELP, Material.CHORUS_FLOWER, Material.CHORUS_PLANT, Material.CORNFLOWER, Material.LILY_OF_THE_VALLEY, Material.WITHER_ROSE, Material.SWEET_BERRY_BUSH)); + public static Set SCULK = new HashSet<>(Arrays.asList()); /* blocks that support vertical scanning */ public static Set VERTICAL_TOP_BOTTOM = new HashSet<>(Arrays.asList()); diff --git a/src/main/java/net/coreprotect/paper/PaperAdapter.java b/src/main/java/net/coreprotect/paper/PaperAdapter.java index 99b0ddd..6c64ba6 100644 --- a/src/main/java/net/coreprotect/paper/PaperAdapter.java +++ b/src/main/java/net/coreprotect/paper/PaperAdapter.java @@ -17,6 +17,7 @@ public class PaperAdapter implements PaperInterface { public static final int PAPER_V1_16 = BukkitAdapter.BUKKIT_V1_16; public static final int PAPER_V1_17 = BukkitAdapter.BUKKIT_V1_17; public static final int PAPER_V1_18 = BukkitAdapter.BUKKIT_V1_18; + public static final int PAPER_V1_19 = BukkitAdapter.BUKKIT_V1_19; public static void loadAdapter() { int paperVersion = ConfigHandler.SERVER_VERSION; @@ -36,6 +37,7 @@ public class PaperAdapter implements PaperInterface { case PAPER_V1_16: case PAPER_V1_17: case PAPER_V1_18: + case PAPER_V1_19: default: PaperAdapter.ADAPTER = new Paper_v1_16(); break; diff --git a/src/main/java/net/coreprotect/spigot/SpigotAdapter.java b/src/main/java/net/coreprotect/spigot/SpigotAdapter.java index ea924c6..49f4384 100644 --- a/src/main/java/net/coreprotect/spigot/SpigotAdapter.java +++ b/src/main/java/net/coreprotect/spigot/SpigotAdapter.java @@ -19,6 +19,7 @@ public class SpigotAdapter implements SpigotInterface { public static final int SPIGOT_V1_16 = BukkitAdapter.BUKKIT_V1_16; public static final int SPIGOT_V1_17 = BukkitAdapter.BUKKIT_V1_17; public static final int SPIGOT_V1_18 = BukkitAdapter.BUKKIT_V1_18; + public static final int SPIGOT_V1_19 = BukkitAdapter.BUKKIT_V1_19; public static void loadAdapter() { int spigotVersion = ConfigHandler.SERVER_VERSION; @@ -38,6 +39,7 @@ public class SpigotAdapter implements SpigotInterface { case SPIGOT_V1_16: case SPIGOT_V1_17: case SPIGOT_V1_18: + case SPIGOT_V1_19: default: SpigotAdapter.ADAPTER = new Spigot_v1_16(); break;