diff --git a/Compatibility/pom.xml b/Compatibility/pom.xml index 60d64992..37155455 100644 --- a/Compatibility/pom.xml +++ b/Compatibility/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../pom.xml CraftaroCore-Compatibility diff --git a/Compatibility/src/main/java/com/craftaro/core/compatibility/crops/CompatibleCrop.java b/Compatibility/src/main/java/com/craftaro/core/compatibility/crops/CompatibleCrop.java new file mode 100644 index 00000000..12efa1b2 --- /dev/null +++ b/Compatibility/src/main/java/com/craftaro/core/compatibility/crops/CompatibleCrop.java @@ -0,0 +1,85 @@ +package com.craftaro.core.compatibility.crops; + +import com.craftaro.core.compatibility.CompatibleMaterial; +import com.cryptomorin.xseries.XBlock; +import com.cryptomorin.xseries.XMaterial; +import org.bukkit.block.Block; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class CompatibleCrop { + private static final boolean USE_LEGACY_IMPLEMENTATION; + + static { + boolean useLegacy = false; + try { + Class.forName("org.bukkit.block.data.Ageable"); + } catch (ClassNotFoundException ignore) { + useLegacy = true; + } + USE_LEGACY_IMPLEMENTATION = useLegacy; + } + + public static boolean isCrop(@Nullable Block block) { + if (block == null) { + return false; + } + + XMaterial material = CompatibleMaterial.getMaterial(block.getType()).get(); + return isCrop(material); + } + + public static boolean isCrop(@Nullable XMaterial material) { + return material != null && XBlock.isCrop(material); + } + + public static boolean isCropFullyGrown(@NotNull Block crop) { + return getCropAge(crop) >= getCropMaxAge(crop); + } + + public static int getCropAge(@NotNull Block crop) { + if (!USE_LEGACY_IMPLEMENTATION) { + return CompatibleCropModern.getCropAge(crop); + } + return crop.getData(); + } + + public static int getCropMaxAge(@NotNull Block crop) { + if (!USE_LEGACY_IMPLEMENTATION) { + return CompatibleCropModern.getCropMaxAge(crop); + } + + switch (CompatibleMaterial.getMaterial(crop.getType()).get()) { + case BEETROOTS: + case NETHER_WART: + return 3; + default: + return 7; + } + } + + public static void resetCropAge(@NotNull Block crop) { + setCropAge(crop, 0); + } + + public static void incrementCropAge(@NotNull Block crop) { + setCropAge(crop, getCropAge(crop) + 1); + } + + private static void setCropAge(Block block, int stage) { + if (stage > getCropMaxAge(block)) { + return; + } + + if (!USE_LEGACY_IMPLEMENTATION) { + CompatibleCropModern.setGrowthStage(block, stage); + return; + } + + try { + Block.class.getDeclaredMethod("setData", byte.class).invoke(block, (byte) stage); + } catch (ReflectiveOperationException ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/Compatibility/src/main/java/com/craftaro/core/compatibility/crops/CompatibleCropModern.java b/Compatibility/src/main/java/com/craftaro/core/compatibility/crops/CompatibleCropModern.java new file mode 100644 index 00000000..59676cb4 --- /dev/null +++ b/Compatibility/src/main/java/com/craftaro/core/compatibility/crops/CompatibleCropModern.java @@ -0,0 +1,23 @@ +package com.craftaro.core.compatibility.crops; + +import org.bukkit.block.Block; +import org.bukkit.block.data.Ageable; +import org.bukkit.block.data.BlockData; + +class CompatibleCropModern { + static int getCropAge(Block block) { + BlockData blockData = block.getBlockData(); + return ((Ageable) blockData).getAge(); + } + + static int getCropMaxAge(Block block) { + BlockData blockData = block.getBlockData(); + return ((Ageable) blockData).getMaximumAge(); + } + + static void setGrowthStage(Block block, int stage) { + Ageable blockData = (Ageable) block.getBlockData(); + blockData.setAge(stage); + block.setBlockData(blockData); + } +} diff --git a/Core/pom.xml b/Core/pom.xml index c8c27415..e437afd4 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../pom.xml CraftaroCore diff --git a/Core/src/main/java/com/craftaro/core/chat/AdventureUtils.java b/Core/src/main/java/com/craftaro/core/chat/AdventureUtils.java index 56960c30..04194ddc 100644 --- a/Core/src/main/java/com/craftaro/core/chat/AdventureUtils.java +++ b/Core/src/main/java/com/craftaro/core/chat/AdventureUtils.java @@ -11,11 +11,8 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.title.Title; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.Plugin; @@ -25,12 +22,10 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.time.Duration; import java.time.temporal.ChronoUnit; -import java.time.temporal.TemporalUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; -import java.util.concurrent.TimeUnit; public class AdventureUtils { private static Method displayNameMethod = null; diff --git a/Core/src/main/java/com/craftaro/core/commands/MainCommand.java b/Core/src/main/java/com/craftaro/core/commands/MainCommand.java index 3f95e2cc..89a03988 100644 --- a/Core/src/main/java/com/craftaro/core/commands/MainCommand.java +++ b/Core/src/main/java/com/craftaro/core/commands/MainCommand.java @@ -5,7 +5,6 @@ import com.craftaro.core.chat.AdventureUtils; import net.kyori.adventure.text.Component; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; diff --git a/Core/src/main/java/com/craftaro/core/gui/GuiUtils.java b/Core/src/main/java/com/craftaro/core/gui/GuiUtils.java index 78806b93..141ea01e 100644 --- a/Core/src/main/java/com/craftaro/core/gui/GuiUtils.java +++ b/Core/src/main/java/com/craftaro/core/gui/GuiUtils.java @@ -8,7 +8,6 @@ import net.kyori.adventure.text.Component; import org.bukkit.ChatColor; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Arrays; diff --git a/Core/src/main/java/com/craftaro/core/hooks/mcmmo/McMMOHandler.java b/Core/src/main/java/com/craftaro/core/hooks/mcmmo/McMMOHandler.java index 0568254c..97be5878 100644 --- a/Core/src/main/java/com/craftaro/core/hooks/mcmmo/McMMOHandler.java +++ b/Core/src/main/java/com/craftaro/core/hooks/mcmmo/McMMOHandler.java @@ -13,7 +13,6 @@ import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.random.ProbabilityUtil; import com.gmail.nossr50.util.skills.RankUtils; -import com.gmail.nossr50.util.skills.SkillActivationType; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.entity.LivingEntity; diff --git a/Core/src/main/java/com/craftaro/core/locale/Message.java b/Core/src/main/java/com/craftaro/core/locale/Message.java index 63f89ce3..5e4cd57d 100644 --- a/Core/src/main/java/com/craftaro/core/locale/Message.java +++ b/Core/src/main/java/com/craftaro/core/locale/Message.java @@ -4,16 +4,11 @@ import com.craftaro.core.SongodaCore; import com.craftaro.core.chat.AdventureUtils; import com.craftaro.core.chat.MiniMessagePlaceholder; import com.craftaro.core.compatibility.ServerVersion; -import com.craftaro.core.utils.TextUtils; -import net.kyori.adventure.Adventure; import net.kyori.adventure.text.Component; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Arrays; import java.util.List; -import java.util.regex.Matcher; /** * The Message object. This holds the message to be sent @@ -138,8 +133,11 @@ public class Message { * @return the message */ public List getMessageLines() { - //return Arrays.asList(ChatColor.translateAlternateColorCodes('&', this.message.toText()).split("[\n|]")); - return AdventureUtils.splitComponent(this.message, '\n'); + return getMessageLines('\n'); + } + + public List getMessageLines(char splitChar) { + return AdventureUtils.splitComponent(this.message, splitChar); } /** diff --git a/Core/src/main/java/com/craftaro/core/utils/BlockUtils.java b/Core/src/main/java/com/craftaro/core/utils/BlockUtils.java deleted file mode 100644 index 19b247b8..00000000 --- a/Core/src/main/java/com/craftaro/core/utils/BlockUtils.java +++ /dev/null @@ -1,1129 +0,0 @@ -package com.craftaro.core.utils; - -import com.craftaro.core.compatibility.ClassMapping; -import com.craftaro.core.compatibility.CompatibleMaterial; -import com.craftaro.core.compatibility.MethodMapping; -import com.craftaro.core.compatibility.ServerVersion; -import com.craftaro.core.nms.Nms; -import com.craftaro.core.nms.world.SWorld; -import com.craftaro.core.nms.world.WorldCore; -import com.cryptomorin.xseries.XBlock; -import com.cryptomorin.xseries.XMaterial; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.EnumSet; -import java.util.Optional; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * @deprecated This class will be removed in the future and replaced with a more maintainable system. - */ -@Deprecated -public class BlockUtils { - protected static final Set DOORS; - protected static final Set PRESSURE_PLATES; - protected static final Set FENCE_GATES; - protected static final Set TRAP_DOORS; - protected static final boolean useLegacy = Material.getMaterial("OAK_LOG") == null; - protected static Method legacySetBlockData = null; - protected static Method legacyUpdateBlockData = null; - - static { - DOORS = EnumSet.noneOf(Material.class); - PRESSURE_PLATES = EnumSet.noneOf(Material.class); - FENCE_GATES = EnumSet.noneOf(Material.class); - TRAP_DOORS = EnumSet.noneOf(Material.class); - - for (Material material : Material.values()) { - String name = material.name(); - if (name.contains("DOOR") && !name.contains("ITEM")) { - if (name.contains("TRAP")) { - TRAP_DOORS.add(material); - } else { - DOORS.add(material); - } - } else if (name.contains("GATE") && !name.contains("END")) { - FENCE_GATES.add(material); - } else if (name.contains("_PLATE")) { - PRESSURE_PLATES.add(material); - } - } - - if (useLegacy) { - try { - //legacyUpdateBlockData = Block.class.getDeclaredMethod("update"); - legacySetBlockData = Block.class.getDeclaredMethod("setData", byte.class); - } catch (NoSuchMethodException ignore) { - } - } - } - - /** - * Interact with this block to either update redstone or open doors - * - * @param b block to update - * - * @return if this block's state was updated - */ - public static boolean tryInteract(Block b) { - final Material bType = b.getType(); - - if (isOpenable(bType)) { - toggleDoorStates(true, b); - return true; - } else if (bType == Material.LEVER) { - toggleLever(b); - return true; - } else if (bType.name().endsWith("_BUTTON")) { - pressButton(b); - return true; - } - - return false; - } - - /** - * Change a pressure plate's redstone state - * - * @param plate plate to update - * @param power power to set to 0-15 (wood plates are active if greater than 0) - */ - public static void updatePressurePlate(Block plate, int power) { - if (useLegacy && legacySetBlockData != null) { - _updatePressurePlateLegacy(plate, power); - } else { - BlockUtilsModern._updatePressurePlateModern(plate, power); - } - } - - private static void _updatePressurePlateLegacy(Block plate, int power) { - final Material m = plate.getType(); - - try { - if (m.name().equals("GOLD_PLATE") || m.name().equals("IRON_PLATE")) { - legacySetBlockData.invoke(plate, (byte) (power & 0x15)); - } else if (m.name().endsWith("_PLATE")) { - legacySetBlockData.invoke(plate, (byte) (power == 0 ? 0 : 1)); - } - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - - public static void pressButton(Block button) { - if (useLegacy && legacySetBlockData != null) { - _pressButtonLegacy(button); - } else { - BlockUtilsModern._pressButtonModern(button); - } - } - - public static void releaseButton(Block button) { - if (useLegacy && legacySetBlockData != null) { - _releaseButtonLegacy(button); - } else { - BlockUtilsModern._releaseButtonModern(button); - } - } - - private static void _pressButtonLegacy(Block button) { - final Material m = button.getType(); - - if (!m.name().endsWith("_BUTTON")) { - return; - } - - try { - legacySetBlockData.invoke(button, (byte) (button.getData() | (31 & 0x8))); - button.getState().update(); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - - private static void _releaseButtonLegacy(Block button) { - final Material m = button.getType(); - - if (!m.name().endsWith("_BUTTON")) { - return; - } - - try { - legacySetBlockData.invoke(button, (byte) (button.getData() & ~0x8)); - button.getState().update(); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - - public static void toggleLever(Block lever) { - if (useLegacy && legacySetBlockData != null) { - _toggleLeverLegacy(lever); - } else { - BlockUtilsModern._toggleLeverModern(lever); - } - } - - private static void _toggleLeverLegacy(Block lever) { - final Material m = lever.getType(); - - if (m != Material.LEVER) { - return; - } - - try { - legacySetBlockData.invoke(lever, (byte) (lever.getData() ^ 0x8)); - lever.getState().update(); - //lever.getWorld().playEffect(lever.getLocation(), Effect.CLICK1, 0); - // now we need to update the redstone around it... -// int data = lever.getData() & ~0x8; -// Block attached; -// switch(data) { -// case 0: -// attached = lever.getRelative(BlockFace.UP); -// break; -// case 1: -// attached = lever.getRelative(BlockFace.WEST); -// break; -// case 2: -// attached = lever.getRelative(BlockFace.EAST); -// break; -// case 3: -// attached = lever.getRelative(BlockFace.NORTH); -// break; -// case 4: -// attached = lever.getRelative(BlockFace.SOUTH); -// break; -// case 5: -// attached = lever.getRelative(BlockFace.DOWN); -// break; -// default: -// return; -// } -// - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - - /** - * Change all of the given door states to be inverse; that is, if a door is - * open, it will be closed afterwards. If the door is closed, it will become - * open. - *

- * Note that the blocks given must be the bottom block of the door. - * - * @param allowDoorToOpen If FALSE, and the door is currently CLOSED, it - * will NOT be opened! - * @param doors Blocks given must be the bottom block of the door - */ - public static void toggleDoorStates(boolean allowDoorToOpen, Block... doors) { - if (useLegacy && legacySetBlockData != null) { - _toggleDoorStatesLegacy(allowDoorToOpen, doors); - } else { - BlockUtilsModern._toggleDoorStatesModern(allowDoorToOpen, doors); - } - } - - private static void _toggleDoorStatesLegacy(boolean allowDoorToOpen, Block... doors) { - try { - for (Block door : doors) { - if (door == null) { - continue; - } - - boolean isTop = (door.getData() & 0x8) != 0; - if (isTop) { - // The lower half of the door contains the direction & open/close state - door = door.getRelative(BlockFace.DOWN); - } - - // If we aren't allowing the door to open, check if it's already closed - if (!allowDoorToOpen && (door.getData() & 0x4) == 0) { - // The door is already closed and we don't want to open it - // the bit 0x4 is set when the door is open - continue; - } - - // Now xor both data values with 0x4, the flag that states if the door is open - legacySetBlockData.invoke(door, (byte) (door.getData() ^ 0x4)); - - // Play the door open/close sound - door.getWorld().playEffect(door.getLocation(), Effect.DOOR_TOGGLE, 0); - } - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - - /** - * Get the double door for the given block - */ - public static Block getDoubleDoor(Block block) { - // TODO? if legacy, just search N/S/E/W to see if there's another door nearby - if (!isOpenable(block.getType())) { - return null; - } - - return BlockUtilsModern._getDoubleDoorModern(block); - } - - public static boolean isOpenable(Material m) { - return DOORS.contains(m) || - FENCE_GATES.contains(m) || - TRAP_DOORS.contains(m); - } - - public static BlockFace getDoorClosedDirection(Block door) { - return useLegacy ? _getDoorClosedDirectionLegacy(door) : BlockUtilsModern._getDoorClosedDirectionModern(door); - } - - private static BlockFace _getDoorClosedDirectionLegacy(Block door) { - final Material type = door.getType(); - - if (DOORS.contains(type)) { - boolean isTop = (door.getData() & 0x8) != 0; - - if (isTop) { - // The lower half of the door contains the direction & open/close state - door = door.getRelative(BlockFace.DOWN); - if (door.getType() != type) { - return null; - } - } - - boolean isOpen = (door.getData() & 0x4) != 0; - - //int facing = (door.getData() & 0x3); - // [east, south, west, north] - boolean facingNS = (door.getData() & 0x1) != 0; - if (facingNS) { - return isOpen ? BlockFace.EAST : BlockFace.SOUTH; - } else { - return isOpen ? BlockFace.SOUTH : BlockFace.EAST; - } - } else if (FENCE_GATES.contains(door.getType())) { - boolean isOpen = (door.getData() & 0x4) != 0; - - //int facing = (door.getData() & 0x3); - // so fence gate orientations are [south, west, north, east] - boolean facingNS = (door.getData() & 0x1) == 0; - if (facingNS) { - return isOpen ? BlockFace.EAST : BlockFace.SOUTH; - } else { - return isOpen ? BlockFace.SOUTH : BlockFace.EAST; - } - } else if (TRAP_DOORS.contains(door.getType())) { - boolean isOpen = (door.getData() & 0x4) != 0; - - // [south, north, east, west] - boolean facingNS = (door.getData() & 0x3) <= 1; - if (facingNS) { - return isOpen ? BlockFace.EAST : BlockFace.SOUTH; - } else { - return isOpen ? BlockFace.SOUTH : BlockFace.EAST; - } - } - - return null; - } - - /* Only to be used by #updateAdjacentComparators */ - private static Method chunkToNmsChunk, nmsChunkGetWorld, craftBlockGetPosition, craftBlockBlockDataGetter, blockDataGetBlock, craftMagicNumbersGetBlockByMaterial, nmsWorldUpdateAdjacentComparators; - /* Only to be used by #updateAdjacentComparators */ - private static Constructor blockPositionConstructor; - - /** - * Manually trigger the updateAdjacentComparators method for containers - * - * @param loc The Location of the container - * - * @deprecated Use {@link WorldCore#updateAdjacentComparators(Block)} - * via {@link Nms#getImplementations()} instead. - */ - @Deprecated - public static void updateAdjacentComparators(Location loc) { - if (loc == null || loc.getWorld() == null) { - return; - } - - Block craftBlock = loc.getBlock(); - - try { - if (chunkToNmsChunk == null) { - chunkToNmsChunk = MethodMapping.CB_GENERIC__GET_HANDLE.getMethod(ClassMapping.CRAFT_CHUNK.getClazz()); - nmsChunkGetWorld = MethodMapping.MC_CHUNK__GET_WORLD.getMethod(chunkToNmsChunk.getReturnType()); - - craftBlockGetPosition = MethodMapping.CB_BLOCK__GET_POSITION.getMethod(ClassMapping.CRAFT_BLOCK.getClazz()); - if (craftBlockGetPosition == null) { - blockPositionConstructor = ClassMapping.BLOCK_POSITION.getClazz().getConstructor(double.class, double.class, double.class); - } - - nmsWorldUpdateAdjacentComparators = MethodMapping.WORLD__UPDATE_ADJACENT_COMPARATORS.getMethod(ClassMapping.WORLD.getClazz()); - - craftBlockBlockDataGetter = MethodMapping.CB_BLOCK__GET_NMS.getMethod(ClassMapping.CRAFT_BLOCK.getClazz()); - blockDataGetBlock = MethodMapping.I_BLOCK_DATA__GET_BLOCK.getMethod(ClassMapping.I_BLOCK_DATA.getClazz()); - if (craftBlockBlockDataGetter == null || blockDataGetBlock == null) { - craftMagicNumbersGetBlockByMaterial = MethodMapping.CRAFT_MAGIC_NUMBERS__GET_BLOCK__MATERIAL.getMethod(ClassMapping.CRAFT_MAGIC_NUMBERS.getClazz()); - } - } - - Object nmsChunk = chunkToNmsChunk.invoke(loc.getChunk()); - Object nmsWorld = nmsChunkGetWorld.invoke(nmsChunk); - - Object blockPosition; - if (craftBlockGetPosition != null) { - blockPosition = craftBlockGetPosition.invoke(craftBlock); - } else { - blockPosition = blockPositionConstructor.newInstance(loc.getX(), loc.getY(), loc.getZ()); - } - - Object nmsBlock; - if (craftBlockBlockDataGetter != null) { - nmsBlock = blockDataGetBlock.invoke(craftBlockBlockDataGetter.invoke(craftBlock)); - } else { - nmsBlock = craftMagicNumbersGetBlockByMaterial.invoke(null, craftBlock.getType()); - } - - nmsWorldUpdateAdjacentComparators.invoke(nmsWorld, blockPosition, nmsBlock); - } catch (NullPointerException | ReflectiveOperationException ex) { - ex.printStackTrace(); - } - } - - /* Only to be used by #setBlockFast */ - private static Class clazzIBlockData, clazzBlocks, clazzCraftWorld, clazzBlockPosition; - /* Only to be used by #setBlockFast */ - private static Method getHandle, getByCombinedId, setType, getChunkAt, getBlockData; - - /** - * Set a block to a certain type by updating the block directly in the - * NMS chunk. - *

- * The chunk must be loaded and players must relog if they have the - * chunk loaded in order to use this method. - * - * @deprecated Use {@link SWorld#setBlockFast(int, int, int, Material)} - * via {@link Nms#getImplementations()} instead. - */ - @Deprecated - public static void setBlockFast(World world, int x, int y, int z, Material material, byte data) { - try { - // Cache reflection - if (clazzIBlockData == null) { - clazzIBlockData = ClassMapping.I_BLOCK_DATA.getClazz(); - clazzBlockPosition = ClassMapping.BLOCK_POSITION.getClazz(); - clazzCraftWorld = ClassMapping.CRAFT_WORLD.getClazz(); - clazzBlocks = ClassMapping.BLOCKS.getClazz(); - Class clazzBlock = ClassMapping.BLOCK.getClazz(); - Class clazzWorld = ClassMapping.WORLD.getClazz(); - Class clazzChunk = ClassMapping.CHUNK.getClazz(); - - getHandle = clazzCraftWorld.getMethod("getHandle"); - getChunkAt = MethodMapping.WORLD__GET_CHUNK_AT.getMethod(clazzWorld); - - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { - getBlockData = MethodMapping.BLOCK__GET_BLOCK_DATA.getMethod(ClassMapping.BLOCK.getClazz()); - setType = MethodMapping.CHUNK__SET_BLOCK_STATE.getMethod(ClassMapping.CHUNK.getClazz()); - } else { - getByCombinedId = clazzBlock.getMethod("getByCombinedId", int.class); - setType = clazzChunk.getMethod("a", clazzBlockPosition, clazzIBlockData); - } - } - - // invoke and cast objects. - Object craftWorld = clazzCraftWorld.cast(world); - Object nmsWorld = getHandle.invoke(craftWorld); - Object chunk = getChunkAt.invoke(nmsWorld, x >> 4, z >> 4); - Object blockPosition = clazzBlockPosition.getConstructor(int.class, int.class, int.class).newInstance(x & 0xF, y, z & 0xF); - - // Invoke final method. - if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) { - Object block = clazzBlocks.getField(material.name()).get(null); - Object IBlockData = getBlockData.invoke(block); - setType.invoke(chunk, blockPosition, IBlockData, true); - } else { - Object IBlockData = getByCombinedId.invoke(null, material.getId() + (data << 12)); - setType.invoke(chunk, blockPosition, IBlockData); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - /** - * @deprecated Use {@link SWorld#setBlockFast(int, int, int, Material)} - * via {@link Nms#getImplementations()} instead. - */ - @Deprecated - public static void setBlockFast(World world, int x, int y, int z, XMaterial material, byte data) { - setBlockFast(world, x, y, z, material.parseMaterial(), data); - } - - /** - * Checks if a crop is at its max growth stage - * - * @param block The crop block to check - * - * @return true if the block is a crop and at its max growth stage - */ - public static boolean isCropFullyGrown(Block block) { - if (block == null) { - return false; - } - - if (!useLegacy) { - return BlockUtilsModern._isCropFullyGrown(block); - } - - Optional mat = CompatibleMaterial.getMaterial(block.getType()); - if (!mat.isPresent() || !XBlock.isCrop(mat.get())) { - return false; - } - - return block.getData() >= (mat.get() == XMaterial.BEETROOTS || mat.get() == XMaterial.NETHER_WART ? 3 : 7); - } - - /** - * Gets the max growth stage for the given block - * - * @param block The crop block to check - * - * @return The max growth stage of the given crop type, or -1 if not a crop - */ - public static int getMaxGrowthStage(Block block) { - if (block == null) { - return -1; - } - - if (!useLegacy) { - return BlockUtilsModern._getMaxGrowthStage(block); - } - - Optional mat = CompatibleMaterial.getMaterial(block.getType()); - if (!mat.isPresent() || !XBlock.isCrop(mat.get())) { - return -1; - } - - return (mat.get() == XMaterial.BEETROOTS || mat.get() == XMaterial.NETHER_WART ? 3 : 7); - } - - /** - * Gets the max growth stage for the given material - * - * @param material The material of the crop - * - * @return The max growth stage of the given crop type - */ - public static int getMaxGrowthStage(Material material) { - if (material == null) { - return -1; - } - - if (!useLegacy) { - return BlockUtilsModern._getMaxGrowthStage(material); - } - - Optional mat = CompatibleMaterial.getMaterial(material); - if (!mat.isPresent() || XBlock.isCrop(mat.get())) { - return -1; - } - - return (mat.get() == XMaterial.BEETROOTS || mat.get() == XMaterial.NETHER_WART ? 3 : 7); - } - - /** - * Sets the max growth stage for the given block - * - * @param block The crop block to change - * @param stage new growth stage to use - */ - public static void setGrowthStage(Block block, int stage) { - if (block == null) { - } else if (!useLegacy) { - BlockUtilsModern._setGrowthStage(block, stage); - } else { - Optional mat = CompatibleMaterial.getMaterial(block.getType()); - if (mat.isPresent() && XBlock.isCrop(mat.get())) { - try { - legacySetBlockData.invoke(block, (byte) Math.max(0, Math.min(stage, (mat.get() == XMaterial.BEETROOTS || mat.get() == XMaterial.NETHER_WART ? 3 : 7)))); - } catch (Exception ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - } - } - - /** - * Increments the growth stage for the given block - * - * @param block The crop block to grow - */ - public static void incrementGrowthStage(Block block) { - if (block == null) { - } else if (!useLegacy) { - BlockUtilsModern._incrementGrowthStage(block); - } else { - Optional mat = CompatibleMaterial.getMaterial(block.getType()); - - if (mat.isPresent() && XBlock.isCrop(mat.get()) && block.getData() < (mat.get() == XMaterial.BEETROOTS || mat.get() == XMaterial.NETHER_WART ? 3 : 7)) { - try { - legacySetBlockData.invoke(block, (byte) (block.getData() + 1)); - } catch (Exception ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - } - } - - /** - * Sets a crop's growth back to stage 0 - * - * @param block The crop block to set - */ - public static void resetGrowthStage(Block block) { - if (block == null) { - } else if (!useLegacy) { - BlockUtilsModern._resetGrowthStage(block); - } else { - Optional mat = CompatibleMaterial.getMaterial(block.getType()); - - if (mat.isPresent() && XBlock.isCrop(mat.get())) { - try { - legacySetBlockData.invoke(block, (byte) 0); - } catch (Exception ex) { - Logger.getLogger(BlockUtils.class.getName()).log(Level.SEVERE, "Unexpected method error", ex); - } - } - } - } - - /** - * Check to see if this material does not impede player/mob movement at all. - * - * @param m material to check - * - * @return true if this material doesn't have a solid hitbox - */ - public static boolean canPassThrough(Material m) { - switch (m.name()) { - case "ACACIA_BUTTON": - case "ACACIA_PRESSURE_PLATE": - case "ACACIA_SAPLING": - case "ACACIA_SIGN": - case "ACACIA_WALL_SIGN": - case "ACTIVATOR_RAIL": - case "AIR": - case "ATTACHED_MELON_STEM": - case "ATTACHED_PUMPKIN_STEM": - case "AZURE_BLUET": - case "BEETROOTS": - case "BIRCH_BUTTON": - case "BIRCH_PRESSURE_PLATE": - case "BIRCH_SAPLING": - case "BIRCH_SIGN": - case "BIRCH_WALL_SIGN": - case "BLACK_WALL_BANNER": - case "BLUE_BANNER": - case "BLUE_ORCHID": - case "BLUE_WALL_BANNER": - case "BRAIN_CORAL_FAN": - case "BRAIN_CORAL_WALL_FAN": - case "BROWN_BANNER": - case "BROWN_MUSHROOM": - case "BROWN_WALL_BANNER": - case "BUBBLE_CORAL_FAN": - case "BUBBLE_CORAL_WALL_FAN": - case "CARROTS": - case "CAVE_AIR": - case "COBWEB": - case "CORNFLOWER": - case "CYAN_BANNER": - case "CYAN_WALL_BANNER": - case "DANDELION": - case "DARK_OAK_BUTTON": - case "DARK_OAK_PRESSURE_PLATE": - case "DARK_OAK_SAPLING": - case "DARK_OAK_SIGN": - case "DARK_OAK_WALL_SIGN": - case "DEAD_BRAIN_CORAL_FAN": - case "DEAD_BRAIN_CORAL_WALL_FAN": - case "DEAD_BUBBLE_CORAL_FAN": - case "DEAD_BUBBLE_CORAL_WALL_FAN": - case "DEAD_BUSH": - case "DEAD_FIRE_CORAL_FAN": - case "DEAD_FIRE_CORAL_WALL_FAN": - case "DEAD_HORN_CORAL_FAN": - case "DEAD_HORN_CORAL_WALL_FAN": - case "DEAD_TUBE_CORAL_FAN": - case "DEAD_TUBE_CORAL_WALL_FAN": - case "DETECTOR_RAIL": - case "END_PORTAL": - case "FERN": - case "FIRE": - case "FIRE_CORAL_FAN": - case "FIRE_CORAL_WALL_FAN": - case "GRASS": - case "GRAY_BANNER": - case "GRAY_WALL_BANNER": - case "GREEN_BANNER": - case "GREEN_WALL_BANNER": - case "HEAVY_WEIGHTED_PRESSURE_PLATE": - case "HORN_CORAL_FAN": - case "HORN_CORAL_WALL_FAN": - case "JUNGLE_BUTTON": - case "JUNGLE_PRESSURE_PLATE": - case "JUNGLE_SAPLING": - case "JUNGLE_SIGN": - case "JUNGLE_WALL_SIGN": - case "KELP": - case "LADDER": - case "LARGE_FERN": - case "LAVA": - case "LEVER": - case "LIGHT_BLUE_BANNER": - case "LIGHT_BLUE_WALL_BANNER": - case "LIGHT_GRAY_BANNER": - case "LIGHT_GRAY_WALL_BANNER": - case "LIGHT_WEIGHTED_PRESSURE_PLATE": - case "LILAC": - case "LILY_OF_THE_VALLEY": - case "LIME_BANNER": - case "MAGENTA_BANNER": - case "MAGENTA_WALL_BANNER": - case "MELON_STEM": - case "NETHER_PORTAL": - case "NETHER_WART": - case "OAK_BUTTON": - case "OAK_PRESSURE_PLATE": - case "OAK_SAPLING": - case "OAK_SIGN": - case "OAK_WALL_SIGN": - case "ORANGE_BANNER": - case "ORANGE_TULIP": - case "ORANGE_WALL_BANNER": - case "OXEYE_DAISY": - case "PEONY": - case "PINK_BANNER": - case "PINK_TULIP": - case "PINK_WALL_BANNER": - case "POTATOES": - case "POWERED_RAIL": - case "PUMPKIN_STEM": - case "PURPLE_BANNER": - case "PURPLE_WALL_BANNER": - case "RAIL": - case "REDSTONE_TORCH": - case "REDSTONE_WALL_TORCH": - case "REDSTONE_WIRE": - case "RED_BANNER": - case "RED_MUSHROOM": - case "RED_TULIP": - case "RED_WALL_BANNER": - case "ROSE_BUSH": - case "SCAFFOLDING": - case "SEAGRASS": - case "SPRUCE_BUTTON": - case "SPRUCE_PRESSURE_PLATE": - case "SPRUCE_SAPLING": - case "SPRUCE_SIGN": - case "SPRUCE_WALL_SIGN": - case "STONE_BUTTON": - case "STONE_PRESSURE_PLATE": - case "STRUCTURE_VOID": - case "SUGAR_CANE": - case "SUNFLOWER": - case "SWEET_BERRY_BUSH": - case "TALL_GRASS": - case "TALL_SEAGRASS": - case "TORCH": - case "TRIPWIRE": - case "TRIPWIRE_HOOK": - case "TUBE_CORAL_FAN": - case "TUBE_CORAL_WALL_FAN": - case "VINE": - case "VOID_AIR": - case "WALL_TORCH": - case "WATER": - case "WHEAT": - case "WHITE_BANNER": - case "WHITE_TULIP": - case "WHITE_WALL_BANNER": - case "WITHER_ROSE": - case "YELLOW_BANNER": - case "YELLOW_WALL_BANNER": - // Legacy values: - case "WEB": - case "LONG_GRASS": - case "YELLOW_FLOWER": - case "RED_ROSE": - case "CROPS": - case "SIGN_POST": - case "RAILS": - case "WALL_SIGN": - case "STONE_PLATE": - case "WOOD_PLATE": - case "REDSTONE_TORCH_OFF": - case "REDSTONE_TORCH_ON": - case "SUGAR_CANE_BLOCK": - case "PORTAL": - case "ENDER_PORTAL": - case "CARROT": - case "POTATO": - case "WOOD_BUTTON": - case "GOLD_PLATE": - case "IRON_PLATE": - case "DOUBLE_PLANT": - case "STANDING_BANNER": - case "WALL_BANNER": - case "BEETROOT_BLOCK": - return true; - default: - return false; - } - } - - /** - * Check to see if a player can walk into this material
- * This includes blocks like slabs and stairs - * - * @param m material to check - * - * @return true if this is a block that can be walked through or up - */ - public static boolean canWalkTo(Material m) { - switch (m.name()) { - case "ACACIA_BUTTON": - case "ACACIA_PRESSURE_PLATE": - case "ACACIA_SAPLING": - case "ACACIA_SIGN": - case "ACACIA_SLAB": - case "ACACIA_STAIRS": - case "ACACIA_TRAPDOOR": - case "ACACIA_WALL_SIGN": - case "ACTIVATOR_RAIL": - case "AIR": - case "ANDESITE_SLAB": - case "ANDESITE_STAIRS": - case "ATTACHED_MELON_STEM": - case "ATTACHED_PUMPKIN_STEM": - case "AZURE_BLUET": - case "BEETROOTS": - case "BIRCH_BUTTON": - case "BIRCH_DOOR": - case "BIRCH_FENCE_GATE": - case "BIRCH_PRESSURE_PLATE": - case "BIRCH_SAPLING": - case "BIRCH_SIGN": - case "BIRCH_SLAB": - case "BIRCH_STAIRS": - case "BIRCH_TRAPDOOR": - case "BIRCH_WALL_SIGN": - case "BLACK_CARPET": - case "BLACK_WALL_BANNER": - case "BLUE_BANNER": - case "BLUE_CARPET": - case "BLUE_ORCHID": - case "BLUE_WALL_BANNER": - case "BRAIN_CORAL_FAN": - case "BRAIN_CORAL_WALL_FAN": - case "BRICK_SLAB": - case "BRICK_STAIRS": - case "BROWN_BANNER": - case "BROWN_CARPET": - case "BROWN_MUSHROOM": - case "BROWN_WALL_BANNER": - case "BUBBLE_CORAL_FAN": - case "BUBBLE_CORAL_WALL_FAN": - case "CAKE": - case "CAMPFIRE": - case "CARROTS": - case "CAVE_AIR": - case "COBBLESTONE_SLAB": - case "COBBLESTONE_STAIRS": - case "COBWEB": - case "COMPARATOR": - case "CORNFLOWER": - case "CUT_RED_SANDSTONE_SLAB": - case "CUT_SANDSTONE_SLAB": - case "CYAN_BANNER": - case "CYAN_CARPET": - case "CYAN_WALL_BANNER": - case "DANDELION": - case "DARK_OAK_BUTTON": - case "DARK_OAK_DOOR": - case "DARK_OAK_FENCE_GATE": - case "DARK_OAK_PRESSURE_PLATE": - case "DARK_OAK_SAPLING": - case "DARK_OAK_SIGN": - case "DARK_OAK_SLAB": - case "DARK_OAK_STAIRS": - case "DARK_OAK_TRAPDOOR": - case "DARK_OAK_WALL_SIGN": - case "DARK_PRISMARINE_SLAB": - case "DARK_PRISMARINE_STAIRS": - case "DAYLIGHT_DETECTOR": - case "DEAD_BRAIN_CORAL_FAN": - case "DEAD_BRAIN_CORAL_WALL_FAN": - case "DEAD_BUBBLE_CORAL_FAN": - case "DEAD_BUBBLE_CORAL_WALL_FAN": - case "DEAD_BUSH": - case "DEAD_FIRE_CORAL_FAN": - case "DEAD_FIRE_CORAL_WALL_FAN": - case "DEAD_HORN_CORAL_FAN": - case "DEAD_HORN_CORAL_WALL_FAN": - case "DEAD_TUBE_CORAL_FAN": - case "DEAD_TUBE_CORAL_WALL_FAN": - case "DETECTOR_RAIL": - case "DIORITE_SLAB": - case "DIORITE_STAIRS": - case "END_PORTAL": - case "END_STONE_BRICK_SLAB": - case "END_STONE_BRICK_STAIRS": - case "FERN": - case "FIRE": - case "FIRE_CORAL_FAN": - case "FIRE_CORAL_WALL_FAN": - case "FLOWER_POT": - case "GRANITE_SLAB": - case "GRANITE_STAIRS": - case "GRASS": - case "GRAY_BANNER": - case "GRAY_CARPET": - case "GRAY_WALL_BANNER": - case "GREEN_BANNER": - case "GREEN_WALL_BANNER": - case "HEAVY_WEIGHTED_PRESSURE_PLATE": - case "HORN_CORAL_FAN": - case "HORN_CORAL_WALL_FAN": - case "IRON_DOOR": - case "JUNGLE_BUTTON": - case "JUNGLE_DOOR": - case "JUNGLE_FENCE_GATE": - case "JUNGLE_PRESSURE_PLATE": - case "JUNGLE_SAPLING": - case "JUNGLE_SIGN": - case "JUNGLE_SLAB": - case "JUNGLE_STAIRS": - case "JUNGLE_TRAPDOOR": - case "JUNGLE_WALL_SIGN": - case "KELP": - case "LADDER": - case "LARGE_FERN": - case "LAVA": - case "LEVER": - case "LIGHT_BLUE_BANNER": - case "LIGHT_BLUE_CARPET": - case "LIGHT_BLUE_WALL_BANNER": - case "LIGHT_GRAY_BANNER": - case "LIGHT_GRAY_CARPET": - case "LIGHT_GRAY_WALL_BANNER": - case "LIGHT_WEIGHTED_PRESSURE_PLATE": - case "LILAC": - case "LILY_OF_THE_VALLEY": - case "LILY_PAD": - case "LIME_BANNER": - case "LIME_CARPET": - case "MAGENTA_BANNER": - case "MAGENTA_CARPET": - case "MAGENTA_WALL_BANNER": - case "MELON_STEM": - case "MOSSY_COBBLESTONE_SLAB": - case "MOSSY_COBBLESTONE_STAIRS": - case "MOSSY_STONE_BRICK_SLAB": - case "MOSSY_STONE_BRICK_STAIRS": - case "NETHER_BRICK_SLAB": - case "NETHER_BRICK_STAIRS": - case "NETHER_PORTAL": - case "NETHER_WART": - case "OAK_BUTTON": - case "OAK_DOOR": - case "OAK_FENCE_GATE": - case "OAK_PRESSURE_PLATE": - case "OAK_SAPLING": - case "OAK_SIGN": - case "OAK_SLAB": - case "OAK_STAIRS": - case "OAK_TRAPDOOR": - case "OAK_WALL_SIGN": - case "ORANGE_BANNER": - case "ORANGE_CARPET": - case "ORANGE_TULIP": - case "ORANGE_WALL_BANNER": - case "OXEYE_DAISY": - case "PEONY": - case "PETRIFIED_OAK_SLAB": - case "PINK_BANNER": - case "PINK_CARPET": - case "PINK_TULIP": - case "PINK_WALL_BANNER": - case "POLISHED_ANDESITE_SLAB": - case "POLISHED_ANDESITE_STAIRS": - case "POLISHED_DIORITE_SLAB": - case "POLISHED_DIORITE_STAIRS": - case "POLISHED_GRANITE_SLAB": - case "POLISHED_GRANITE_STAIRS": - case "POTATOES": - case "POTTED_ACACIA_SAPLING": - case "POTTED_ALLIUM": - case "POTTED_AZURE_BLUET": - case "POTTED_BAMBOO": - case "POTTED_BIRCH_SAPLING": - case "POTTED_BLUE_ORCHID": - case "POTTED_BROWN_MUSHROOM": - case "POTTED_CACTUS": - case "POTTED_CORNFLOWER": - case "POTTED_DANDELION": - case "POTTED_DARK_OAK_SAPLING": - case "POTTED_DEAD_BUSH": - case "POTTED_FERN": - case "POTTED_JUNGLE_SAPLING": - case "POTTED_LILY_OF_THE_VALLEY": - case "POTTED_OAK_SAPLING": - case "POTTED_ORANGE_TULIP": - case "POTTED_OXEYE_DAISY": - case "POTTED_PINK_TULIP": - case "POTTED_POPPY": - case "POTTED_RED_MUSHROOM": - case "POTTED_RED_TULIP": - case "POTTED_SPRUCE_SAPLING": - case "POTTED_WHITE_TULIP": - case "POTTED_WITHER_ROSE": - case "POWERED_RAIL": - case "PRISMARINE_BRICK_SLAB": - case "PRISMARINE_BRICK_STAIRS": - case "PRISMARINE_SLAB": - case "PRISMARINE_STAIRS": - case "PUMPKIN_STEM": - case "PURPLE_BANNER": - case "PURPLE_CARPET": - case "PURPLE_WALL_BANNER": - case "PURPUR_SLAB": - case "PURPUR_STAIRS": - case "RAIL": - case "REDSTONE_TORCH": - case "REDSTONE_WALL_TORCH": - case "REDSTONE_WIRE": - case "RED_BANNER": - case "RED_CARPET": - case "RED_MUSHROOM": - case "RED_SANDSTONE_SLAB": - case "RED_SANDSTONE_STAIRS": - case "RED_TULIP": - case "RED_WALL_BANNER": - case "REPEATER": - case "ROSE_BUSH": - case "SANDSTONE_SLAB": - case "SANDSTONE_STAIRS": - case "SCAFFOLDING": - case "SEAGRASS": - case "SMOOTH_QUARTZ_SLAB": - case "SMOOTH_QUARTZ_STAIRS": - case "SMOOTH_RED_SANDSTONE_SLAB": - case "SMOOTH_RED_SANDSTONE_STAIRS": - case "SMOOTH_SANDSTONE_SLAB": - case "SMOOTH_SANDSTONE_STAIRS": - case "SMOOTH_STONE_SLAB": - case "SPRUCE_BUTTON": - case "SPRUCE_DOOR": - case "SPRUCE_FENCE_GATE": - case "SPRUCE_PRESSURE_PLATE": - case "SPRUCE_SAPLING": - case "SPRUCE_SIGN": - case "SPRUCE_SLAB": - case "SPRUCE_STAIRS": - case "SPRUCE_TRAPDOOR": - case "SPRUCE_WALL_SIGN": - case "STONECUTTER": - case "STONE_BRICK_SLAB": - case "STONE_BRICK_STAIRS": - case "STONE_BUTTON": - case "STONE_PRESSURE_PLATE": - case "STONE_SLAB": - case "STONE_STAIRS": - case "STRUCTURE_VOID": - case "SUGAR_CANE": - case "SUNFLOWER": - case "SWEET_BERRY_BUSH": - case "TALL_GRASS": - case "TALL_SEAGRASS": - case "TORCH": - case "TRIPWIRE": - case "TRIPWIRE_HOOK": - case "TUBE_CORAL_FAN": - case "TUBE_CORAL_WALL_FAN": - case "VINE": - case "VOID_AIR": - case "WALL_TORCH": - case "WATER": - case "WHEAT": - case "WHITE_BANNER": - case "WHITE_CARPET": - case "WHITE_TULIP": - case "WHITE_WALL_BANNER": - case "WITHER_ROSE": - case "YELLOW_BANNER": - case "YELLOW_CARPET": - case "YELLOW_WALL_BANNER": - // Legacy values: - case "WEB": - case "LONG_GRASS": - case "YELLOW_FLOWER": - case "RED_ROSE": - case "STEP": - case "WOOD_STAIRS": - case "CROPS": - case "SIGN_POST": - case "RAILS": - case "WOODEN_DOOR": - case "WALL_SIGN": - case "STONE_PLATE": - case "IRON_DOOR_BLOCK": - case "WOOD_PLATE": - case "REDSTONE_TORCH_OFF": - case "REDSTONE_TORCH_ON": - case "SNOW": - case "SUGAR_CANE_BLOCK": - case "PORTAL": - case "CAKE_BLOCK": - case "DIODE_BLOCK_OFF": - case "DIODE_BLOCK_ON": - case "TRAP_DOOR": - case "FENCE_GATE": - case "SMOOTH_STAIRS": - case "ENDER_PORTAL": - case "WOOD_STEP": - case "SPRUCE_WOOD_STAIRS": - case "BIRCH_WOOD_STAIRS": - case "JUNGLE_WOOD_STAIRS": - case "CARROT": - case "POTATO": - case "WOOD_BUTTON": - case "GOLD_PLATE": - case "IRON_PLATE": - case "REDSTONE_COMPARATOR_OFF": - case "REDSTONE_COMPARATOR_ON": - case "QUARTZ_STAIRS": - case "DOUBLE_PLANT": - case "STANDING_BANNER": - case "WALL_BANNER": - case "DAYLIGHT_DETECTOR_INVERTED": - case "DOUBLE_STONE_SLAB2": - case "STONE_SLAB2": - case "BEETROOT_BLOCK": - return true; - default: - return false; - } - } -} diff --git a/Core/src/main/java/com/craftaro/core/utils/BlockUtilsModern.java b/Core/src/main/java/com/craftaro/core/utils/BlockUtilsModern.java deleted file mode 100644 index b0ac4c24..00000000 --- a/Core/src/main/java/com/craftaro/core/utils/BlockUtilsModern.java +++ /dev/null @@ -1,371 +0,0 @@ -package com.craftaro.core.utils; - -import com.craftaro.core.SongodaCore; -import com.craftaro.core.compatibility.ClassMapping; -import com.craftaro.core.compatibility.MethodMapping; -import com.craftaro.core.compatibility.ServerVersion; -import org.bukkit.Effect; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.Ageable; -import org.bukkit.block.data.AnaloguePowerable; -import org.bukkit.block.data.Bisected; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Powerable; -import org.bukkit.block.data.type.Door; -import org.bukkit.block.data.type.Gate; -import org.bukkit.block.data.type.Switch; -import org.bukkit.block.data.type.TrapDoor; - -import java.lang.reflect.Method; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * @deprecated This class will be removed in the future and replaced with a more maintainable system. - */ -@Deprecated -public class BlockUtilsModern { - protected static void _updatePressurePlateModern(Block plate, int power) { - BlockData blockData = plate.getBlockData(); - boolean update = false; - - if (blockData instanceof AnaloguePowerable) { - AnaloguePowerable a = (AnaloguePowerable) blockData; - int toPower = Math.min(a.getMaximumPower(), power); - - if ((update = toPower != a.getPower())) { - a.setPower(toPower); - plate.setBlockData(a); - } - } else if (blockData instanceof Powerable) { - Powerable p = (Powerable) blockData; - - if ((update = p.isPowered() != (power != 0))) { - p.setPowered(power != 0); - plate.setBlockData(p); - } - } - - if (update) { - _updateRedstoneNeighbours(plate); - } - } - - protected static void _toggleLeverModern(Block lever) { - BlockData blockData = lever.getBlockData(); - - if (blockData instanceof Switch) { - Switch s = (Switch) blockData; - s.setPowered(!s.isPowered()); - lever.setBlockData(s); - _updateRedstoneNeighbours(lever); - } - } - - protected static void _pressButtonModern(Block button) { - BlockData blockData = button.getBlockData(); - - if (blockData instanceof Switch) { - Switch s = (Switch) blockData; - s.setPowered(true); - button.setBlockData(s); - _updateRedstoneNeighbours(button); - } - } - - static void _releaseButtonModern(Block button) { - BlockData blockData = button.getBlockData(); - - if (blockData instanceof Switch) { - Switch s = (Switch) blockData; - s.setPowered(false); - button.setBlockData(s); - _updateRedstoneNeighbours(button); - } - } - - private static Class clazzCraftWorld; - private static Class clazzCraftBlock; - private static Class clazzLeverBlock; - private static Class clazzButtonBlock; - private static Class clazzPressurePlateBlock; - private static Method craftWorld_getHandle, craftBlock_getNMS, craftBlock_getPostition, craftBlockData_getState, - nmsLever_updateNeighbours, nmsButton_updateNeighbours, nmsPlate_updateNeighbours, nmsBlockData_getBlock; - - static { - try { - // Cache reflection. - clazzCraftWorld = ClassMapping.CRAFT_WORLD.getClazz(); - clazzCraftBlock = ClassMapping.CRAFT_BLOCK.getClazz(); - - craftWorld_getHandle = MethodMapping.CB_GENERIC__GET_HANDLE.getMethod(clazzCraftWorld); - craftBlock_getPostition = MethodMapping.CB_BLOCK__GET_POSITION.getMethod(clazzCraftBlock); - - craftBlock_getNMS = MethodMapping.CB_BLOCK__GET_NMS.getMethod(clazzCraftBlock); - Class clazzBlockData = ClassMapping.BLOCK_BASE.getClazz("BlockData"); - nmsBlockData_getBlock = MethodMapping.I_BLOCK_DATA__GET_BLOCK.getMethod(clazzBlockData); - - Class clazzCraftBlockData = ClassMapping.CRAFT_BLOCK_DATA.getClazz(); - craftBlockData_getState = MethodMapping.CB_BLOCK_DATA__GET_STATE.getMethod(clazzCraftBlockData); - - Class clazzWorld = ClassMapping.WORLD.getClazz(); - Class clazzBlockState = ClassMapping.I_BLOCK_DATA.getClazz(); - Class clazzBlockPos = ClassMapping.BLOCK_POSITION.getClazz(); - clazzLeverBlock = ClassMapping.BLOCK_LEVER.getClazz(); - clazzButtonBlock = ClassMapping.BLOCK_BUTTON_ABSTRACT.getClazz(); - clazzPressurePlateBlock = ClassMapping.BLOCK_PRESSURE_PLATE_ABSTRACT.getClazz(); - - nmsLever_updateNeighbours = clazzLeverBlock.getDeclaredMethod(ServerVersion.isServerVersionAbove(ServerVersion.V1_13) - ? "e" : "b", clazzBlockState, clazzWorld, clazzBlockPos); - nmsLever_updateNeighbours.setAccessible(true); - - nmsButton_updateNeighbours = clazzButtonBlock.getDeclaredMethod(ServerVersion.isServerVersionAbove(ServerVersion.V1_13) - ? "f" : "c", clazzBlockState, clazzWorld, clazzBlockPos); - nmsButton_updateNeighbours.setAccessible(true); - - nmsPlate_updateNeighbours = clazzPressurePlateBlock.getDeclaredMethod("a", clazzWorld, clazzBlockPos); - nmsPlate_updateNeighbours.setAccessible(true); - } catch (Throwable ex) { - Logger.getLogger(BlockUtilsModern.class.getName()).log(Level.SEVERE, null, ex); - } - } - - static void _updateRedstoneNeighbours(Block block) { - try { - // spigot made some changes to how data updates work in 1.13+ - // updating the data value of a redstone power source - // does NOT update attatched block power, - // even if you update the block state. (Still broken last I checked in 1.15.2) - // so now we're going to manually call the updateNeighbours block method - - // invoke and cast objects. - Object cworld = clazzCraftWorld.cast(block.getWorld()); - Object mworld = craftWorld_getHandle.invoke(cworld); - Object cblock = clazzCraftBlock.cast(block); - Object mblock = nmsBlockData_getBlock.invoke(craftBlock_getNMS.invoke(cblock)); - Object mpos = craftBlock_getPostition.invoke(cblock); - - // now for testing stuff - if (clazzLeverBlock.isAssignableFrom(mblock.getClass())) { - final Object mstate = craftBlockData_getState.invoke(block.getBlockData()); - nmsLever_updateNeighbours.invoke(mblock, mstate, mworld, mpos); - } else if (clazzButtonBlock.isAssignableFrom(mblock.getClass())) { - final Object mstate = craftBlockData_getState.invoke(block.getBlockData()); - nmsButton_updateNeighbours.invoke(mblock, mstate, mworld, mpos); - } else if (clazzPressurePlateBlock.isAssignableFrom(mblock.getClass())) { - nmsPlate_updateNeighbours.invoke(mblock, mworld, mpos); - } else { - SongodaCore.getLogger().warning("Unknown redstone: " + mblock.getClass().getName()); - } -// -// if(mblock instanceof net.minecraft.server.v1_15_R1.BlockLever) { -// Method updateNeighbours = net.minecraft.server.v1_15_R1.BlockLever.class.getDeclaredMethod("e", net.minecraft.server.v1_15_R1.IBlockData.class, net.minecraft.server.v1_15_R1.World.class, net.minecraft.server.v1_15_R1.BlockPosition.class); -// updateNeighbours.setAccessible(true); -// // IBlockData = block state after being powered -// -// updateNeighbours.invoke(mblock, -// ((org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData) block.getBlockData()).getState(), -// mworld, -// mpos); -// } else if(mblock instanceof net.minecraft.server.v1_15_R1.BlockButtonAbstract) { -// Method updateNeighbours = net.minecraft.server.v1_15_R1.BlockButtonAbstract.class.getDeclaredMethod("f", net.minecraft.server.v1_15_R1.IBlockData.class, net.minecraft.server.v1_15_R1.World.class, net.minecraft.server.v1_15_R1.BlockPosition.class); -// updateNeighbours.setAccessible(true); -// // IBlockData = block state after being powered -// -// updateNeighbours.invoke(mblock, -// ((org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData) block.getBlockData()).getState(), -// mworld, -// mpos); -// } else if(mblock instanceof net.minecraft.server.v1_15_R1.BlockPressurePlateAbstract) { -// Method updateNeighbours = net.minecraft.server.v1_15_R1.BlockPressurePlateAbstract.class.getDeclaredMethod("a", net.minecraft.server.v1_15_R1.World.class, net.minecraft.server.v1_15_R1.BlockPosition.class); -// updateNeighbours.setAccessible(true); -// // IBlockData = block state after being powered -// -// updateNeighbours.invoke(mblock, -// mworld, -// mpos); -// } - } catch (Throwable ex) { - Logger.getLogger(BlockUtilsModern.class.getName()).log(Level.SEVERE, null, ex); - } - } - - protected static void _toggleDoorStatesModern(boolean allowDoorToOpen, Block... doors) { - for (Block door : doors) { - BlockData blockData; - if (door == null || !((blockData = door.getBlockData()) instanceof Door)) { - continue; - } - - Door data = (Door) blockData; - if (!allowDoorToOpen && !data.isOpen()) { - continue; - } - - // The lower half of the door contains the open/close state - if (data.getHalf() == Bisected.Half.TOP) { - Block lowerHalf = door.getRelative(BlockFace.DOWN); - - if (lowerHalf.getBlockData() instanceof Door) { - Door lowerData = (Door) lowerHalf.getBlockData(); - lowerData.setOpen(!data.isOpen()); - lowerHalf.setBlockData(lowerData); - } - } else { - data.setOpen(!data.isOpen()); - door.setBlockData(data); - } - - // Play the door open/close sound - door.getWorld().playEffect(door.getLocation(), Effect.DOOR_TOGGLE, 0); - } - } - - protected static Block _getDoubleDoorModern(Block block) { - BlockData bd = block.getBlockData(); - Block door = null; - - if (bd instanceof Door) { - final Door d = (Door) bd; - final BlockFace face = d.getFacing(); - - if (face.getModX() == 0) { - if (d.getHinge() == Door.Hinge.RIGHT) { - door = block.getRelative(face.getModZ(), 0, 0); - } else { - door = block.getRelative(-face.getModZ(), 0, 0); - } - } else { - if (d.getHinge() == Door.Hinge.RIGHT) { - door = block.getRelative(0, 0, -face.getModX()); - } else { - door = block.getRelative(0, 0, face.getModX()); - } - } - } - - return door != null && door.getBlockData() instanceof Door - && ((Door) door.getBlockData()).getHinge() != ((Door) bd).getHinge() ? door : null; - } - - protected static BlockFace _getDoorClosedDirectionModern(Block door) { - if (BlockUtils.DOORS.contains(door.getType())) { - BlockData bd = door.getBlockData(); - - if (bd instanceof Door) { - Door d = (Door) bd; - - // The lower half of the door contains the open/close state - if (d.getHalf() == Bisected.Half.TOP) { - door = door.getRelative(BlockFace.DOWN); - - if (door.getBlockData() instanceof Door) { - d = (Door) door.getBlockData(); - } else { - return null; - } - } - - final BlockFace face = d.getFacing(); - - // now we /could/ also correct for the hinge (top block), it's not needed information - if (face.getModX() == 0) { - return d.isOpen() ? BlockFace.EAST : BlockFace.SOUTH; - } else { - return d.isOpen() ? BlockFace.SOUTH : BlockFace.EAST; - } - } - } else if (BlockUtils.FENCE_GATES.contains(door.getType())) { - BlockData bd = door.getBlockData(); - - if (bd instanceof Gate) { - Gate g = (Gate) bd; - final BlockFace face = g.getFacing(); - - if (face.getModX() == 0) { - return g.isOpen() ? BlockFace.EAST : BlockFace.SOUTH; - } else { - return g.isOpen() ? BlockFace.SOUTH : BlockFace.EAST; - } - } - } else if (BlockUtils.TRAP_DOORS.contains(door.getType())) { - BlockData bd = door.getBlockData(); - - if (bd instanceof TrapDoor) { - TrapDoor t = (TrapDoor) bd; - - if (!t.isOpen()) { - return BlockFace.UP; - } else { - return t.getFacing(); - } - } - } - - return null; - } - - protected static boolean _isCropFullyGrown(Block block) { - BlockData data = block.getBlockData(); - - if (data instanceof Ageable) { - return ((Ageable) data).getAge() == ((Ageable) data).getMaximumAge(); - } - - return false; - } - - protected static int _getMaxGrowthStage(Block block) { - BlockData data = block.getBlockData(); - - if (data instanceof Ageable) { - return ((Ageable) data).getMaximumAge(); - } - - return -1; - } - - protected static int _getMaxGrowthStage(Material material) { - BlockData data = material.createBlockData(); - - if (data instanceof Ageable) { - return ((Ageable) data).getMaximumAge(); - } - - return -1; - } - - public static void _setGrowthStage(Block block, int stage) { - BlockData data = block.getBlockData(); - - if (data instanceof Ageable) { - ((Ageable) data).setAge(Math.max(0, Math.min(stage, ((Ageable) data).getMaximumAge()))); - block.setBlockData(data); - } - } - - public static void _incrementGrowthStage(Block block) { - BlockData data = block.getBlockData(); - - if (data instanceof Ageable) { - final int max = ((Ageable) data).getMaximumAge(); - final int age = ((Ageable) data).getAge(); - - if (age < max) { - ((Ageable) data).setAge(age + 1); - block.setBlockData(data); - } - } - } - - public static void _resetGrowthStage(Block block) { - BlockData data = block.getBlockData(); - - if (data instanceof Ageable) { - ((Ageable) data).setAge(0); - block.setBlockData(data); - } - } -} diff --git a/NMS/NMS-API/pom.xml b/NMS/NMS-API/pom.xml index bd665f8c..42275b6c 100644 --- a/NMS/NMS-API/pom.xml +++ b/NMS/NMS-API/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-API diff --git a/NMS/NMS-API/src/main/java/com/craftaro/core/nms/world/WorldCore.java b/NMS/NMS-API/src/main/java/com/craftaro/core/nms/world/WorldCore.java index 4c967efe..9e02a351 100644 --- a/NMS/NMS-API/src/main/java/com/craftaro/core/nms/world/WorldCore.java +++ b/NMS/NMS-API/src/main/java/com/craftaro/core/nms/world/WorldCore.java @@ -36,6 +36,10 @@ public interface WorldCore { void updateAdjacentComparators(@NotNull Block bukkitBlock); + void toggleLever(@NotNull Block bukkitBlock); + + void pressButton(@NotNull Block bukkitBlock); + /** * Ticks all inactive spawners in a specific chunk ignoring the minimum required players within a specific range.
* A spawner is deemed inactive if no player is within its activation range. diff --git a/NMS/NMS-v1_10_R1/pom.xml b/NMS/NMS-v1_10_R1/pom.xml index 51c8d35c..3ff002ba 100644 --- a/NMS/NMS-v1_10_R1/pom.xml +++ b/NMS/NMS-v1_10_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_10_R1 diff --git a/NMS/NMS-v1_10_R1/src/main/java/com/craftaro/core/nms/v1_10_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_10_R1/src/main/java/com/craftaro/core/nms/v1_10_R1/world/WorldCoreImpl.java index f84d50d5..1c819f30 100644 --- a/NMS/NMS-v1_10_R1/src/main/java/com/craftaro/core/nms/v1_10_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_10_R1/src/main/java/com/craftaro/core/nms/v1_10_R1/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_10_R1.Block; +import net.minecraft.server.v1_10_R1.BlockButtonAbstract; +import net.minecraft.server.v1_10_R1.BlockLever; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.Chunk; import net.minecraft.server.v1_10_R1.ChunkSection; @@ -99,4 +101,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_11_R1/pom.xml b/NMS/NMS-v1_11_R1/pom.xml index e43a1bb7..c4558ffb 100644 --- a/NMS/NMS-v1_11_R1/pom.xml +++ b/NMS/NMS-v1_11_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_11_R1 diff --git a/NMS/NMS-v1_11_R1/src/main/java/com/craftaro/core/nms/v1_11_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_11_R1/src/main/java/com/craftaro/core/nms/v1_11_R1/world/WorldCoreImpl.java index dd374f19..c330557e 100644 --- a/NMS/NMS-v1_11_R1/src/main/java/com/craftaro/core/nms/v1_11_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_11_R1/src/main/java/com/craftaro/core/nms/v1_11_R1/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_11_R1.Block; +import net.minecraft.server.v1_11_R1.BlockButtonAbstract; +import net.minecraft.server.v1_11_R1.BlockLever; import net.minecraft.server.v1_11_R1.BlockPosition; import net.minecraft.server.v1_11_R1.Chunk; import net.minecraft.server.v1_11_R1.ChunkSection; @@ -99,4 +101,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_12_R1/pom.xml b/NMS/NMS-v1_12_R1/pom.xml index 252067bc..d8279acf 100644 --- a/NMS/NMS-v1_12_R1/pom.xml +++ b/NMS/NMS-v1_12_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_12_R1 diff --git a/NMS/NMS-v1_12_R1/src/main/java/com/craftaro/core/nms/v1_12_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_12_R1/src/main/java/com/craftaro/core/nms/v1_12_R1/world/WorldCoreImpl.java index e3157110..b322d75b 100644 --- a/NMS/NMS-v1_12_R1/src/main/java/com/craftaro/core/nms/v1_12_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_12_R1/src/main/java/com/craftaro/core/nms/v1_12_R1/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_12_R1.Block; +import net.minecraft.server.v1_12_R1.BlockButtonAbstract; +import net.minecraft.server.v1_12_R1.BlockLever; import net.minecraft.server.v1_12_R1.BlockPosition; import net.minecraft.server.v1_12_R1.Chunk; import net.minecraft.server.v1_12_R1.ChunkSection; @@ -99,4 +101,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_13_R1/pom.xml b/NMS/NMS-v1_13_R1/pom.xml index 064cbd30..58735792 100644 --- a/NMS/NMS-v1_13_R1/pom.xml +++ b/NMS/NMS-v1_13_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_13_R1 diff --git a/NMS/NMS-v1_13_R1/src/main/java/com/craftaro/core/nms/v1_13_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R1/src/main/java/com/craftaro/core/nms/v1_13_R1/world/WorldCoreImpl.java index dbdb8839..f5eb09f0 100644 --- a/NMS/NMS-v1_13_R1/src/main/java/com/craftaro/core/nms/v1_13_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_13_R1/src/main/java/com/craftaro/core/nms/v1_13_R1/world/WorldCoreImpl.java @@ -7,6 +7,8 @@ import com.craftaro.core.nms.world.SItemStack; import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; +import net.minecraft.server.v1_13_R1.BlockButtonAbstract; +import net.minecraft.server.v1_13_R1.BlockLever; import net.minecraft.server.v1_13_R1.BlockPosition; import net.minecraft.server.v1_13_R1.Chunk; import net.minecraft.server.v1_13_R1.ChunkSection; @@ -20,6 +22,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_13_R1.CraftChunk; import org.bukkit.craftbukkit.v1_13_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_13_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -100,4 +103,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).interact(iBlockData, world, blockposition, null, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).interact(iBlockData, world, blockposition, null, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_13_R2/pom.xml b/NMS/NMS-v1_13_R2/pom.xml index 4109262a..acc4a284 100644 --- a/NMS/NMS-v1_13_R2/pom.xml +++ b/NMS/NMS-v1_13_R2/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_13_R2 diff --git a/NMS/NMS-v1_13_R2/src/main/java/com/craftaro/core/nms/v1_13_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R2/src/main/java/com/craftaro/core/nms/v1_13_R2/world/WorldCoreImpl.java index 7bf60ae0..3f6bfde2 100644 --- a/NMS/NMS-v1_13_R2/src/main/java/com/craftaro/core/nms/v1_13_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_13_R2/src/main/java/com/craftaro/core/nms/v1_13_R2/world/WorldCoreImpl.java @@ -7,6 +7,8 @@ import com.craftaro.core.nms.world.SItemStack; import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; +import net.minecraft.server.v1_13_R2.BlockButtonAbstract; +import net.minecraft.server.v1_13_R2.BlockLever; import net.minecraft.server.v1_13_R2.BlockPosition; import net.minecraft.server.v1_13_R2.Chunk; import net.minecraft.server.v1_13_R2.ChunkSection; @@ -20,6 +22,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_13_R2.CraftChunk; import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock; +import org.bukkit.craftbukkit.v1_13_R2.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).interact(iBlockData, world, blockposition, null, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).interact(iBlockData, world, blockposition, null, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_14_R1/pom.xml b/NMS/NMS-v1_14_R1/pom.xml index 0960ae28..f38bf1cc 100644 --- a/NMS/NMS-v1_14_R1/pom.xml +++ b/NMS/NMS-v1_14_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_14_R1 diff --git a/NMS/NMS-v1_14_R1/src/main/java/com/craftaro/core/nms/v1_14_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_14_R1/src/main/java/com/craftaro/core/nms/v1_14_R1/world/WorldCoreImpl.java index 790e1078..c555bebf 100644 --- a/NMS/NMS-v1_14_R1/src/main/java/com/craftaro/core/nms/v1_14_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_14_R1/src/main/java/com/craftaro/core/nms/v1_14_R1/world/WorldCoreImpl.java @@ -7,6 +7,8 @@ import com.craftaro.core.nms.world.SItemStack; import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; +import net.minecraft.server.v1_14_R1.BlockButtonAbstract; +import net.minecraft.server.v1_14_R1.BlockLever; import net.minecraft.server.v1_14_R1.BlockPosition; import net.minecraft.server.v1_14_R1.Chunk; import net.minecraft.server.v1_14_R1.ChunkCoordIntPair; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_14_R1.CraftChunk; import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -104,4 +107,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).interact(iBlockData, world, blockposition, null, null, null); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).interact(iBlockData, world, blockposition, null, null, null); + } } diff --git a/NMS/NMS-v1_15_R1/pom.xml b/NMS/NMS-v1_15_R1/pom.xml index 4b203c53..cab315d6 100644 --- a/NMS/NMS-v1_15_R1/pom.xml +++ b/NMS/NMS-v1_15_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_15_R1 diff --git a/NMS/NMS-v1_15_R1/src/main/java/com/craftaro/core/nms/v1_15_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_15_R1/src/main/java/com/craftaro/core/nms/v1_15_R1/world/WorldCoreImpl.java index 24b98529..6758dcdb 100644 --- a/NMS/NMS-v1_15_R1/src/main/java/com/craftaro/core/nms/v1_15_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_15_R1/src/main/java/com/craftaro/core/nms/v1_15_R1/world/WorldCoreImpl.java @@ -7,6 +7,8 @@ import com.craftaro.core.nms.world.SItemStack; import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; +import net.minecraft.server.v1_15_R1.BlockButtonAbstract; +import net.minecraft.server.v1_15_R1.BlockLever; import net.minecraft.server.v1_15_R1.BlockPosition; import net.minecraft.server.v1_15_R1.Chunk; import net.minecraft.server.v1_15_R1.ChunkCoordIntPair; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_15_R1.CraftChunk; import org.bukkit.craftbukkit.v1_15_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_16_R1/pom.xml b/NMS/NMS-v1_16_R1/pom.xml index 0b285685..a81b4610 100644 --- a/NMS/NMS-v1_16_R1/pom.xml +++ b/NMS/NMS-v1_16_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_16_R1 diff --git a/NMS/NMS-v1_16_R1/src/main/java/com/craftaro/core/nms/v1_16_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R1/src/main/java/com/craftaro/core/nms/v1_16_R1/world/WorldCoreImpl.java index 29564f48..b24f66fd 100644 --- a/NMS/NMS-v1_16_R1/src/main/java/com/craftaro/core/nms/v1_16_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_16_R1/src/main/java/com/craftaro/core/nms/v1_16_R1/world/WorldCoreImpl.java @@ -7,6 +7,8 @@ import com.craftaro.core.nms.world.SItemStack; import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; +import net.minecraft.server.v1_16_R1.BlockButtonAbstract; +import net.minecraft.server.v1_16_R1.BlockLever; import net.minecraft.server.v1_16_R1.BlockPosition; import net.minecraft.server.v1_16_R1.Chunk; import net.minecraft.server.v1_16_R1.ChunkCoordIntPair; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_16_R1.CraftChunk; import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_16_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -108,4 +111,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_16_R2/pom.xml b/NMS/NMS-v1_16_R2/pom.xml index c6c15481..061dc729 100644 --- a/NMS/NMS-v1_16_R2/pom.xml +++ b/NMS/NMS-v1_16_R2/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_16_R2 diff --git a/NMS/NMS-v1_16_R2/src/main/java/com/craftaro/core/nms/v1_16_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R2/src/main/java/com/craftaro/core/nms/v1_16_R2/world/WorldCoreImpl.java index c642ced4..11498771 100644 --- a/NMS/NMS-v1_16_R2/src/main/java/com/craftaro/core/nms/v1_16_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_16_R2/src/main/java/com/craftaro/core/nms/v1_16_R2/world/WorldCoreImpl.java @@ -7,6 +7,8 @@ import com.craftaro.core.nms.world.SItemStack; import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; +import net.minecraft.server.v1_16_R2.BlockButtonAbstract; +import net.minecraft.server.v1_16_R2.BlockLever; import net.minecraft.server.v1_16_R2.BlockPosition; import net.minecraft.server.v1_16_R2.Chunk; import net.minecraft.server.v1_16_R2.ChunkCoordIntPair; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_16_R2.CraftChunk; import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock; +import org.bukkit.craftbukkit.v1_16_R2.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -108,4 +111,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_16_R3/pom.xml b/NMS/NMS-v1_16_R3/pom.xml index 2f7d71b6..fe006acb 100644 --- a/NMS/NMS-v1_16_R3/pom.xml +++ b/NMS/NMS-v1_16_R3/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_16_R3 diff --git a/NMS/NMS-v1_16_R3/src/main/java/com/craftaro/core/nms/v1_16_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R3/src/main/java/com/craftaro/core/nms/v1_16_R3/world/WorldCoreImpl.java index a0fac77c..071b1483 100644 --- a/NMS/NMS-v1_16_R3/src/main/java/com/craftaro/core/nms/v1_16_R3/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_16_R3/src/main/java/com/craftaro/core/nms/v1_16_R3/world/WorldCoreImpl.java @@ -7,6 +7,8 @@ import com.craftaro.core.nms.world.SItemStack; import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; +import net.minecraft.server.v1_16_R3.BlockButtonAbstract; +import net.minecraft.server.v1_16_R3.BlockLever; import net.minecraft.server.v1_16_R3.BlockPosition; import net.minecraft.server.v1_16_R3.Chunk; import net.minecraft.server.v1_16_R3.ChunkCoordIntPair; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_16_R3.CraftChunk; import org.bukkit.craftbukkit.v1_16_R3.block.CraftBlock; +import org.bukkit.craftbukkit.v1_16_R3.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -109,4 +112,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_17_R1/pom.xml b/NMS/NMS-v1_17_R1/pom.xml index 301064af..7e89be55 100644 --- a/NMS/NMS-v1_17_R1/pom.xml +++ b/NMS/NMS-v1_17_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_17_R1 diff --git a/NMS/NMS-v1_17_R1/src/main/java/com/craftaro/core/nms/v1_17_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_17_R1/src/main/java/com/craftaro/core/nms/v1_17_R1/world/WorldCoreImpl.java index 53f28bb6..bebe40fe 100644 --- a/NMS/NMS-v1_17_R1/src/main/java/com/craftaro/core/nms/v1_17_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_17_R1/src/main/java/com/craftaro/core/nms/v1_17_R1/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.server.level.WorldServer; import net.minecraft.util.profiling.GameProfilerFiller; import net.minecraft.world.level.ChunkCoordIntPair; import net.minecraft.world.level.MobSpawnerAbstract; +import net.minecraft.world.level.block.BlockButtonAbstract; +import net.minecraft.world.level.block.BlockLever; import net.minecraft.world.level.block.state.IBlockData; import net.minecraft.world.level.chunk.Chunk; import net.minecraft.world.level.chunk.ChunkSection; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_17_R1.CraftChunk; import org.bukkit.craftbukkit.v1_17_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_17_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockLever) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + IBlockData iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPosition blockposition = craftBlock.getPosition(); + WorldServer world = craftBlock.getCraftWorld().getHandle(); + + ((BlockButtonAbstract) craftBlock.getNMS().getBlock()).d(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_18_R1/pom.xml b/NMS/NMS-v1_18_R1/pom.xml index a2b28a91..8d742292 100644 --- a/NMS/NMS-v1_18_R1/pom.xml +++ b/NMS/NMS-v1_18_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_18_R1 diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/craftaro/core/nms/v1_18_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/craftaro/core/nms/v1_18_R1/world/WorldCoreImpl.java index 296787b1..85cd691a 100644 --- a/NMS/NMS-v1_18_R1/src/main/java/com/craftaro/core/nms/v1_18_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_18_R1/src/main/java/com/craftaro/core/nms/v1_18_R1/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_18_R1.CraftChunk; import org.bukkit.craftbukkit.v1_18_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_18_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -104,4 +107,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_18_R2/pom.xml b/NMS/NMS-v1_18_R2/pom.xml index e5f3c7bd..496d1bd9 100644 --- a/NMS/NMS-v1_18_R2/pom.xml +++ b/NMS/NMS-v1_18_R2/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_18_R2 diff --git a/NMS/NMS-v1_18_R2/src/main/java/com/craftaro/core/nms/v1_18_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_18_R2/src/main/java/com/craftaro/core/nms/v1_18_R2/world/WorldCoreImpl.java index 6294b1d5..85e9e84a 100644 --- a/NMS/NMS-v1_18_R2/src/main/java/com/craftaro/core/nms/v1_18_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_18_R2/src/main/java/com/craftaro/core/nms/v1_18_R2/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_18_R2.CraftChunk; import org.bukkit.craftbukkit.v1_18_R2.block.CraftBlock; +import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -103,4 +106,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_19_0/pom.xml b/NMS/NMS-v1_19_0/pom.xml index e0e1f9bd..ddf652a3 100644 --- a/NMS/NMS-v1_19_0/pom.xml +++ b/NMS/NMS-v1_19_0/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_19_0 diff --git a/NMS/NMS-v1_19_0/src/main/java/com/craftaro/core/nms/v1_19_0/world/WorldCoreImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/craftaro/core/nms/v1_19_0/world/WorldCoreImpl.java index d7483b8b..616e7751 100644 --- a/NMS/NMS-v1_19_0/src/main/java/com/craftaro/core/nms/v1_19_0/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_19_0/src/main/java/com/craftaro/core/nms/v1_19_0/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_19_R1.CraftChunk; import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -101,4 +104,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_19_R1/pom.xml b/NMS/NMS-v1_19_R1/pom.xml index f2615aa3..29dd955f 100644 --- a/NMS/NMS-v1_19_R1/pom.xml +++ b/NMS/NMS-v1_19_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_19_R1 diff --git a/NMS/NMS-v1_19_R1/src/main/java/com/craftaro/core/nms/v1_19_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_19_R1/src/main/java/com/craftaro/core/nms/v1_19_R1/world/WorldCoreImpl.java index 0ec36fba..89d0ab52 100644 --- a/NMS/NMS-v1_19_R1/src/main/java/com/craftaro/core/nms/v1_19_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_19_R1/src/main/java/com/craftaro/core/nms/v1_19_R1/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_19_R1.CraftChunk; import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -101,4 +104,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_19_R2/pom.xml b/NMS/NMS-v1_19_R2/pom.xml index baa0d25f..c6e59ff9 100644 --- a/NMS/NMS-v1_19_R2/pom.xml +++ b/NMS/NMS-v1_19_R2/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_19_R2 diff --git a/NMS/NMS-v1_19_R2/src/main/java/com/craftaro/core/nms/v1_19_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_19_R2/src/main/java/com/craftaro/core/nms/v1_19_R2/world/WorldCoreImpl.java index 3114ae5d..e5aa3e7d 100644 --- a/NMS/NMS-v1_19_R2/src/main/java/com/craftaro/core/nms/v1_19_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_19_R2/src/main/java/com/craftaro/core/nms/v1_19_R2/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -22,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_19_R2.CraftChunk; import org.bukkit.craftbukkit.v1_19_R2.block.CraftBlock; +import org.bukkit.craftbukkit.v1_19_R2.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -101,4 +104,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_19_R3/pom.xml b/NMS/NMS-v1_19_R3/pom.xml index d51de039..890f7382 100644 --- a/NMS/NMS-v1_19_R3/pom.xml +++ b/NMS/NMS-v1_19_R3/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_19_R3 diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/craftaro/core/nms/v1_19_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/craftaro/core/nms/v1_19_R3/world/WorldCoreImpl.java index c1e885c1..9d4d82de 100644 --- a/NMS/NMS-v1_19_R3/src/main/java/com/craftaro/core/nms/v1_19_R3/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_19_R3/src/main/java/com/craftaro/core/nms/v1_19_R3/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunk; @@ -23,6 +25,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_19_R3.CraftChunk; import org.bukkit.craftbukkit.v1_19_R3.block.CraftBlock; +import org.bukkit.craftbukkit.v1_19_R3.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -102,4 +105,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_20_R1/pom.xml b/NMS/NMS-v1_20_R1/pom.xml index c826d635..658b113a 100644 --- a/NMS/NMS-v1_20_R1/pom.xml +++ b/NMS/NMS-v1_20_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_20_R1 diff --git a/NMS/NMS-v1_20_R1/src/main/java/com/craftaro/core/nms/v1_20_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_20_R1/src/main/java/com/craftaro/core/nms/v1_20_R1/world/WorldCoreImpl.java index f4b5e743..421c732b 100644 --- a/NMS/NMS-v1_20_R1/src/main/java/com/craftaro/core/nms/v1_20_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_20_R1/src/main/java/com/craftaro/core/nms/v1_20_R1/world/WorldCoreImpl.java @@ -13,6 +13,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunk; @@ -24,6 +26,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_20_R1.CraftChunk; import org.bukkit.craftbukkit.v1_20_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_20_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_20_R2/pom.xml b/NMS/NMS-v1_20_R2/pom.xml index b407ed84..b6398388 100644 --- a/NMS/NMS-v1_20_R2/pom.xml +++ b/NMS/NMS-v1_20_R2/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_20_R2 diff --git a/NMS/NMS-v1_20_R2/src/main/java/com/craftaro/core/nms/v1_20_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_20_R2/src/main/java/com/craftaro/core/nms/v1_20_R2/world/WorldCoreImpl.java index 586816ea..7457330b 100644 --- a/NMS/NMS-v1_20_R2/src/main/java/com/craftaro/core/nms/v1_20_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_20_R2/src/main/java/com/craftaro/core/nms/v1_20_R2/world/WorldCoreImpl.java @@ -13,6 +13,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunk; @@ -24,6 +26,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_20_R2.CraftChunk; import org.bukkit.craftbukkit.v1_20_R2.block.CraftBlock; +import org.bukkit.craftbukkit.v1_20_R2.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_20_R3/pom.xml b/NMS/NMS-v1_20_R3/pom.xml index 30e585f7..f4567c7f 100644 --- a/NMS/NMS-v1_20_R3/pom.xml +++ b/NMS/NMS-v1_20_R3/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_20_R3 diff --git a/NMS/NMS-v1_20_R3/src/main/java/com/craftaro/core/nms/v1_20_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_20_R3/src/main/java/com/craftaro/core/nms/v1_20_R3/world/WorldCoreImpl.java index 57ab67a0..b52320c7 100644 --- a/NMS/NMS-v1_20_R3/src/main/java/com/craftaro/core/nms/v1_20_R3/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_20_R3/src/main/java/com/craftaro/core/nms/v1_20_R3/world/WorldCoreImpl.java @@ -13,6 +13,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunk; @@ -24,6 +26,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_20_R3.CraftChunk; import org.bukkit.craftbukkit.v1_20_R3.block.CraftBlock; +import org.bukkit.craftbukkit.v1_20_R3.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_20_R4/pom.xml b/NMS/NMS-v1_20_R4/pom.xml index 37b18887..f6bfd76e 100644 --- a/NMS/NMS-v1_20_R4/pom.xml +++ b/NMS/NMS-v1_20_R4/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_20_R4 diff --git a/NMS/NMS-v1_20_R4/src/main/java/com/craftaro/core/nms/v1_20_R4/world/WorldCoreImpl.java b/NMS/NMS-v1_20_R4/src/main/java/com/craftaro/core/nms/v1_20_R4/world/WorldCoreImpl.java index d62f66de..e362fc38 100644 --- a/NMS/NMS-v1_20_R4/src/main/java/com/craftaro/core/nms/v1_20_R4/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_20_R4/src/main/java/com/craftaro/core/nms/v1_20_R4/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.core.SectionPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.entity.SpawnerBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; @@ -24,6 +26,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_20_R4.CraftChunk; import org.bukkit.craftbukkit.v1_20_R4.block.CraftBlock; +import org.bukkit.craftbukkit.v1_20_R4.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition); + } } diff --git a/NMS/NMS-v1_21_R1/pom.xml b/NMS/NMS-v1_21_R1/pom.xml index c1e439df..59e634a7 100644 --- a/NMS/NMS-v1_21_R1/pom.xml +++ b/NMS/NMS-v1_21_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_21_R1 diff --git a/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/anvil/AnvilView.java b/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/anvil/AnvilView.java index 484792a0..75fe3ab3 100644 --- a/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/anvil/AnvilView.java +++ b/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/anvil/AnvilView.java @@ -14,9 +14,7 @@ import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_21_R1.inventory.CraftAbstractInventoryView; -import org.bukkit.craftbukkit.v1_21_R1.inventory.CraftInventoryView; import org.bukkit.craftbukkit.v1_21_R1.inventory.view.CraftAnvilView; -import org.bukkit.entity.HumanEntity; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; diff --git a/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/world/WorldCoreImpl.java index 6e86e3f2..408bdd9c 100644 --- a/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_21_R1/src/main/java/com/craftaro/core/nms/v1_21_R1/world/WorldCoreImpl.java @@ -12,6 +12,8 @@ import net.minecraft.core.SectionPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.entity.SpawnerBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.LevelChunk; @@ -24,6 +26,7 @@ import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.craftbukkit.v1_21_R1.CraftChunk; import org.bukkit.craftbukkit.v1_21_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_21_R1.block.data.CraftBlockData; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -107,4 +110,26 @@ public class WorldCoreImpl implements WorldCore { serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock()); } + + @Override + public void toggleLever(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((LeverBlock) craftBlock.getNMS().getBlock()).pull(iBlockData, world, blockposition, null); + } + + @Override + public void pressButton(@NotNull Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockState iBlockData = ((CraftBlockData) craftBlock.getBlockData()).getState(); + BlockPos blockposition = craftBlock.getPosition(); + ServerLevel world = craftBlock.getCraftWorld().getHandle(); + + ((ButtonBlock) craftBlock.getNMS().getBlock()).press(iBlockData, world, blockposition, null); + } } diff --git a/NMS/NMS-v1_8_R1/pom.xml b/NMS/NMS-v1_8_R1/pom.xml index 30d07696..eb035177 100644 --- a/NMS/NMS-v1_8_R1/pom.xml +++ b/NMS/NMS-v1_8_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_8_R1 diff --git a/NMS/NMS-v1_8_R1/src/main/java/com/craftaro/core/nms/v1_8_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R1/src/main/java/com/craftaro/core/nms/v1_8_R1/world/WorldCoreImpl.java index 30ad9878..69b462bc 100644 --- a/NMS/NMS-v1_8_R1/src/main/java/com/craftaro/core/nms/v1_8_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_8_R1/src/main/java/com/craftaro/core/nms/v1_8_R1/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_8_R1.Block; +import net.minecraft.server.v1_8_R1.BlockButtonAbstract; +import net.minecraft.server.v1_8_R1.BlockLever; import net.minecraft.server.v1_8_R1.BlockPosition; import net.minecraft.server.v1_8_R1.Chunk; import net.minecraft.server.v1_8_R1.ChunkSection; @@ -101,4 +103,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_8_R2/pom.xml b/NMS/NMS-v1_8_R2/pom.xml index 686b5b7e..cf494c15 100644 --- a/NMS/NMS-v1_8_R2/pom.xml +++ b/NMS/NMS-v1_8_R2/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_8_R2 diff --git a/NMS/NMS-v1_8_R2/src/main/java/com/craftaro/core/nms/v1_8_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R2/src/main/java/com/craftaro/core/nms/v1_8_R2/world/WorldCoreImpl.java index 8aa31b3b..0bb1c73d 100644 --- a/NMS/NMS-v1_8_R2/src/main/java/com/craftaro/core/nms/v1_8_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_8_R2/src/main/java/com/craftaro/core/nms/v1_8_R2/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_8_R2.Block; +import net.minecraft.server.v1_8_R2.BlockButtonAbstract; +import net.minecraft.server.v1_8_R2.BlockLever; import net.minecraft.server.v1_8_R2.BlockPosition; import net.minecraft.server.v1_8_R2.Chunk; import net.minecraft.server.v1_8_R2.ChunkSection; @@ -101,4 +103,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_8_R3/pom.xml b/NMS/NMS-v1_8_R3/pom.xml index 55da7f2c..29f89b20 100644 --- a/NMS/NMS-v1_8_R3/pom.xml +++ b/NMS/NMS-v1_8_R3/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_8_R3 diff --git a/NMS/NMS-v1_8_R3/src/main/java/com/craftaro/core/nms/v1_8_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R3/src/main/java/com/craftaro/core/nms/v1_8_R3/world/WorldCoreImpl.java index fe3c52a9..aa4e34f5 100644 --- a/NMS/NMS-v1_8_R3/src/main/java/com/craftaro/core/nms/v1_8_R3/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_8_R3/src/main/java/com/craftaro/core/nms/v1_8_R3/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_8_R3.Block; +import net.minecraft.server.v1_8_R3.BlockButtonAbstract; +import net.minecraft.server.v1_8_R3.BlockLever; import net.minecraft.server.v1_8_R3.BlockPosition; import net.minecraft.server.v1_8_R3.Chunk; import net.minecraft.server.v1_8_R3.ChunkSection; @@ -100,4 +102,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_9_R1/pom.xml b/NMS/NMS-v1_9_R1/pom.xml index fb402a86..1d5d09f3 100644 --- a/NMS/NMS-v1_9_R1/pom.xml +++ b/NMS/NMS-v1_9_R1/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_9_R1 diff --git a/NMS/NMS-v1_9_R1/src/main/java/com/craftaro/core/nms/v1_9_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R1/src/main/java/com/craftaro/core/nms/v1_9_R1/world/WorldCoreImpl.java index 16b72edb..87bd56c1 100644 --- a/NMS/NMS-v1_9_R1/src/main/java/com/craftaro/core/nms/v1_9_R1/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_9_R1/src/main/java/com/craftaro/core/nms/v1_9_R1/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_9_R1.Block; +import net.minecraft.server.v1_9_R1.BlockButtonAbstract; +import net.minecraft.server.v1_9_R1.BlockLever; import net.minecraft.server.v1_9_R1.BlockPosition; import net.minecraft.server.v1_9_R1.Chunk; import net.minecraft.server.v1_9_R1.ChunkSection; @@ -100,4 +102,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS-v1_9_R2/pom.xml b/NMS/NMS-v1_9_R2/pom.xml index 38693c45..0ed7b093 100644 --- a/NMS/NMS-v1_9_R2/pom.xml +++ b/NMS/NMS-v1_9_R2/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS-v1_9_R2 diff --git a/NMS/NMS-v1_9_R2/src/main/java/com/craftaro/core/nms/v1_9_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R2/src/main/java/com/craftaro/core/nms/v1_9_R2/world/WorldCoreImpl.java index 4e68752b..e9443000 100644 --- a/NMS/NMS-v1_9_R2/src/main/java/com/craftaro/core/nms/v1_9_R2/world/WorldCoreImpl.java +++ b/NMS/NMS-v1_9_R2/src/main/java/com/craftaro/core/nms/v1_9_R2/world/WorldCoreImpl.java @@ -8,6 +8,8 @@ import com.craftaro.core.nms.world.SSpawner; import com.craftaro.core.nms.world.SWorld; import com.craftaro.core.nms.world.WorldCore; import net.minecraft.server.v1_9_R2.Block; +import net.minecraft.server.v1_9_R2.BlockButtonAbstract; +import net.minecraft.server.v1_9_R2.BlockLever; import net.minecraft.server.v1_9_R2.BlockPosition; import net.minecraft.server.v1_9_R2.Chunk; import net.minecraft.server.v1_9_R2.ChunkSection; @@ -99,4 +101,28 @@ public class WorldCoreImpl implements WorldCore { Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType()); serverLevel.updateAdjacentComparators(blockPos, nmsBlock); } + + @Override + public void toggleLever(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockLever leverBlock = (BlockLever) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = leverBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + leverBlock.interact(world, blockposition, iBlockData, null, null, null, null, 0, 0, 0); + } + + @Override + public void pressButton(@NotNull org.bukkit.block.Block bukkitBlock) { + CraftBlock craftBlock = (CraftBlock) bukkitBlock; + + BlockButtonAbstract buttonBlock = (BlockButtonAbstract) CraftMagicNumbers.getBlock(craftBlock); + IBlockData iBlockData = buttonBlock.getBlockData(); + BlockPosition blockposition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ()); + WorldServer world = ((CraftWorld) craftBlock.getWorld()).getHandle(); + + buttonBlock.interact(world, blockposition, iBlockData, null, null, null, null, 0, 0, 0); + } } diff --git a/NMS/NMS/pom.xml b/NMS/NMS/pom.xml index ea911064..82d4a78f 100644 --- a/NMS/NMS/pom.xml +++ b/NMS/NMS/pom.xml @@ -7,7 +7,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT ../../pom.xml CraftaroCore-NMS diff --git a/pom.xml b/pom.xml index ce3d11a1..1771d940 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.craftaro CraftaroCore-Modules - 3.5.0-SNAPSHOT + 3.6.0-SNAPSHOT pom