From ee3e4c3e7d7317302d5db8bdaa5356f64944bfdc Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Sun, 3 Mar 2024 09:17:38 -0800 Subject: [PATCH 1/5] ItemData/BlockCompat - strip out BlockState middleman --- .../java/ch/njol/skript/aliases/ItemData.java | 12 ++++---- .../java/ch/njol/skript/aliases/ItemType.java | 18 ++++++------ .../ch/njol/skript/bukkitutil/ItemUtils.java | 11 -------- .../skript/bukkitutil/block/BlockCompat.java | 28 +++++-------------- .../bukkitutil/block/NewBlockCompat.java | 20 +++---------- .../njol/skript/entity/FallingBlockData.java | 4 +-- .../java/ch/njol/skript/events/EvtBlock.java | 2 +- .../java/ch/njol/skript/events/EvtGrow.java | 4 +-- 8 files changed, 30 insertions(+), 69 deletions(-) diff --git a/src/main/java/ch/njol/skript/aliases/ItemData.java b/src/main/java/ch/njol/skript/aliases/ItemData.java index b6f90b30f42..16edfdb0370 100644 --- a/src/main/java/ch/njol/skript/aliases/ItemData.java +++ b/src/main/java/ch/njol/skript/aliases/ItemData.java @@ -30,7 +30,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.block.BlockState; +import org.bukkit.block.data.BlockData; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFactory; import org.bukkit.inventory.ItemFlag; @@ -188,15 +188,15 @@ public ItemData(ItemStack stack) { this(stack, BlockCompat.INSTANCE.getBlockValues(stack)); this.itemForm = true; } - - public ItemData(BlockState block) { - this.type = ItemUtils.asItem(block.getType()); + + public ItemData(BlockData blockData) { + this.type = blockData.getMaterial(); this.stack = new ItemStack(type); - this.blockValues = BlockCompat.INSTANCE.getBlockValues(block); + this.blockValues = BlockCompat.INSTANCE.getBlockValues(blockData); } public ItemData(Block block) { - this(block.getState()); + this(block.getBlockData()); } /** diff --git a/src/main/java/ch/njol/skript/aliases/ItemType.java b/src/main/java/ch/njol/skript/aliases/ItemType.java index 6b56e9cee17..ddecc0d7e20 100644 --- a/src/main/java/ch/njol/skript/aliases/ItemType.java +++ b/src/main/java/ch/njol/skript/aliases/ItemType.java @@ -41,8 +41,8 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.block.Block; -import org.bukkit.block.BlockState; import org.bukkit.block.Skull; +import org.bukkit.block.data.BlockData; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; @@ -184,10 +184,8 @@ public ItemType(ItemStack i) { add_(new ItemData(i)); } - public ItemType(BlockState b) { -// amount = 1; - add_(new ItemData(b)); - // TODO metadata - spawners, skulls, etc. + public ItemType(BlockData blockData) { + add_(new ItemData(blockData)); } /** @@ -211,7 +209,7 @@ public void setTo(ItemType i) { } public ItemType(Block block) { - this(block.getState()); + this(block.getBlockData()); } /** @@ -272,17 +270,17 @@ public boolean isOfType(@Nullable ItemStack item) { return isOfType(new ItemData(item)); } - public boolean isOfType(@Nullable BlockState block) { - if (block == null) + public boolean isOfType(@Nullable BlockData blockData) { + if (blockData == null) return isOfType(Material.AIR, null); - return isOfType(new ItemData(block)); + return isOfType(new ItemData(blockData)); } public boolean isOfType(@Nullable Block block) { if (block == null) return isOfType(Material.AIR, null); - return isOfType(block.getState()); + return isOfType(block.getBlockData()); } public boolean isOfType(ItemData type) { diff --git a/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java b/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java index ca373598eff..33c5d0d3463 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java +++ b/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java @@ -75,17 +75,6 @@ public static Material asBlock(Material type) { } } - /** - * Gets an item material corresponding to given block material, which might - * be the given material. - * @param type Material. - * @return Item version of material or null. - */ - public static Material asItem(Material type) { - // Assume (naively) that all types are valid items - return type; - } - /** * Tests whether two item stacks are of the same type, i.e. it ignores the amounts. * diff --git a/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java b/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java index 5ffb1063284..b6979ebd4b4 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java +++ b/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java @@ -22,12 +22,11 @@ import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.block.BlockState; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.FallingBlock; import org.bukkit.inventory.ItemStack; import org.eclipse.jdt.annotation.Nullable; -import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemFlags; /** @@ -43,15 +42,6 @@ public interface BlockCompat { static final BlockSetter SETTER = INSTANCE.getSetter(); - /** - * Gets block values from a block state. They can be compared to other - * values if needed, but cannot be used to retrieve any other data. - * @param block Block state to retrieve value from. - * @return Block values. - */ - @Nullable - BlockValues getBlockValues(BlockState block); - /** * Gets block values from a block. They can be compared to other values * if needed, but cannot be used to retrieve any other data. @@ -60,8 +50,11 @@ public interface BlockCompat { */ @Nullable default BlockValues getBlockValues(Block block) { - return getBlockValues(block.getState()); + return getBlockValues(block.getBlockData()); } + + @Nullable + BlockValues getBlockValues(BlockData blockData); /** * Gets block values from a item stack. They can be compared to other values @@ -71,17 +64,10 @@ default BlockValues getBlockValues(Block block) { */ @Nullable BlockValues getBlockValues(ItemStack stack); - - /** - * Creates a block state from a falling block. - * @param entity Falling block entity - * @return Block state. - */ - BlockState fallingBlockToState(FallingBlock entity); - + @Nullable default BlockValues getBlockValues(FallingBlock entity) { - return getBlockValues(fallingBlockToState(entity)); + return getBlockValues(entity.getBlockData()); } /** diff --git a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java index 0610022d1c9..97caa6e5179 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java +++ b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java @@ -30,12 +30,10 @@ import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; import org.bukkit.block.data.Bisected; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Directional; import org.bukkit.block.data.type.Bed; -import org.bukkit.entity.FallingBlock; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.eclipse.jdt.annotation.NonNull; @@ -325,16 +323,13 @@ public void sendBlockChange(Player player, Location location, Material type, @Nu } private NewBlockSetter setter = new NewBlockSetter(); - + @Nullable @Override - public BlockValues getBlockValues(BlockState block) { - // If block doesn't have useful data, data field of type is MaterialData - if (block.getType().isBlock()) - return new NewBlockValues(block.getType(), block.getBlockData(), false); - return null; + public BlockValues getBlockValues(BlockData blockData) { + return new NewBlockValues(blockData.getMaterial(), blockData, false); } - + @Override @Nullable public BlockValues getBlockValues(ItemStack stack) { @@ -351,13 +346,6 @@ public BlockSetter getSetter() { return setter; } - @Override - public BlockState fallingBlockToState(FallingBlock entity) { - BlockState state = entity.getWorld().getBlockAt(0, 0, 0).getState(); - state.setBlockData(entity.getBlockData()); - return state; - } - @Override @Nullable public BlockValues createBlockValues(Material type, Map states, @Nullable ItemStack item, int itemFlags) { diff --git a/src/main/java/ch/njol/skript/entity/FallingBlockData.java b/src/main/java/ch/njol/skript/entity/FallingBlockData.java index 2f937148fe9..262b2b564d8 100644 --- a/src/main/java/ch/njol/skript/entity/FallingBlockData.java +++ b/src/main/java/ch/njol/skript/entity/FallingBlockData.java @@ -93,7 +93,7 @@ public ItemType convert(ItemType t) { @Override protected boolean init(final @Nullable Class c, final @Nullable FallingBlock e) { if (e != null) // TODO material data support - types = new ItemType[] {new ItemType(BlockCompat.INSTANCE.fallingBlockToState(e))}; + types = new ItemType[] {new ItemType(e.getBlockData())}; return true; } @@ -101,7 +101,7 @@ protected boolean init(final @Nullable Class c, final @N protected boolean match(final FallingBlock entity) { if (types != null) { for (final ItemType t : types) { - if (t.isOfType(BlockCompat.INSTANCE.fallingBlockToState(entity))) + if (t.isOfType(entity.getBlockData())) return true; } return false; diff --git a/src/main/java/ch/njol/skript/events/EvtBlock.java b/src/main/java/ch/njol/skript/events/EvtBlock.java index 4a393146600..78d5fc1dc59 100644 --- a/src/main/java/ch/njol/skript/events/EvtBlock.java +++ b/src/main/java/ch/njol/skript/events/EvtBlock.java @@ -104,7 +104,7 @@ public boolean check(final Event event) { if (event instanceof BlockFormEvent) { BlockFormEvent blockFormEvent = (BlockFormEvent) event; BlockState newState = blockFormEvent.getNewState(); - item = new ItemType(newState); + item = new ItemType(newState.getBlockData()); blockData = newState.getBlockData(); } else if (event instanceof BlockEvent) { BlockEvent blockEvent = (BlockEvent) event; diff --git a/src/main/java/ch/njol/skript/events/EvtGrow.java b/src/main/java/ch/njol/skript/events/EvtGrow.java index 98f5f281728..ff2deb11a8d 100644 --- a/src/main/java/ch/njol/skript/events/EvtGrow.java +++ b/src/main/java/ch/njol/skript/events/EvtGrow.java @@ -174,7 +174,7 @@ private static boolean checkFrom(Event event, Literal types) { BlockState oldState = ((BlockGrowEvent) event).getBlock().getState(); return types.check(event, type -> { if (type instanceof ItemType) { - return ((ItemType) type).isOfType(oldState); + return ((ItemType) type).isOfType(oldState.getBlockData()); } else if (type instanceof BlockData) { return ((BlockData) type).matches(oldState.getBlockData()); } @@ -201,7 +201,7 @@ private static boolean checkTo(Event event, Literal types) { BlockState newState = ((BlockGrowEvent) event).getNewState(); return types.check(event, type -> { if (type instanceof ItemType) { - return ((ItemType) type).isOfType(newState); + return ((ItemType) type).isOfType(newState.getBlockData()); } else if (type instanceof BlockData) { return ((BlockData) type).matches(newState.getBlockData()); } From 2366605cb265793fa2e0ef4e9aff12dfab0124d2 Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Sun, 3 Mar 2024 11:08:51 -0800 Subject: [PATCH 2/5] ItemData/BlockCompat - add stuff back, but deprecate --- .../java/ch/njol/skript/aliases/ItemData.java | 9 ++++++++ .../java/ch/njol/skript/aliases/ItemType.java | 18 ++++++++++++++++ .../ch/njol/skript/bukkitutil/ItemUtils.java | 13 ++++++++++++ .../skript/bukkitutil/block/BlockCompat.java | 21 +++++++++++++++++++ .../bukkitutil/block/NewBlockCompat.java | 21 +++++++++++++++++++ 5 files changed, 82 insertions(+) diff --git a/src/main/java/ch/njol/skript/aliases/ItemData.java b/src/main/java/ch/njol/skript/aliases/ItemData.java index 16edfdb0370..594480c1f29 100644 --- a/src/main/java/ch/njol/skript/aliases/ItemData.java +++ b/src/main/java/ch/njol/skript/aliases/ItemData.java @@ -30,6 +30,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFactory; @@ -189,6 +190,14 @@ public ItemData(ItemStack stack) { this.itemForm = true; } + /** + * @deprecated use {@link ItemData#ItemData(BlockData)} instead + */ + @Deprecated + public ItemData(BlockState blockState) { + this(blockState.getBlockData()); + } + public ItemData(BlockData blockData) { this.type = blockData.getMaterial(); this.stack = new ItemStack(type); diff --git a/src/main/java/ch/njol/skript/aliases/ItemType.java b/src/main/java/ch/njol/skript/aliases/ItemType.java index ddecc0d7e20..db447ceafa1 100644 --- a/src/main/java/ch/njol/skript/aliases/ItemType.java +++ b/src/main/java/ch/njol/skript/aliases/ItemType.java @@ -41,6 +41,7 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.block.Skull; import org.bukkit.block.data.BlockData; import org.bukkit.enchantments.Enchantment; @@ -184,6 +185,14 @@ public ItemType(ItemStack i) { add_(new ItemData(i)); } + /** + * @deprecated Use {@link #ItemType(BlockData)} instead + */ + @Deprecated + public ItemType(BlockState blockState) { + this(blockState.getBlockData()); + } + public ItemType(BlockData blockData) { add_(new ItemData(blockData)); } @@ -270,6 +279,15 @@ public boolean isOfType(@Nullable ItemStack item) { return isOfType(new ItemData(item)); } + /** + * @deprecated use {@link #isOfType(BlockData)} instead + */ + @Deprecated + public boolean isOfType(@Nullable BlockState blockState) { + if (blockState == null) return false; + return isOfType(blockState.getBlockData()); + } + public boolean isOfType(@Nullable BlockData blockData) { if (blockData == null) return isOfType(Material.AIR, null); diff --git a/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java b/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java index 33c5d0d3463..c6d5f25870e 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java +++ b/src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java @@ -74,6 +74,19 @@ public static Material asBlock(Material type) { return null; } } + + /** + * Gets an item material corresponding to given block material, which might + * be the given material. + * @param type Material. + * @return Item version of material or null. + * @deprecated This just returns itself and has no use + */ + @Deprecated + public static Material asItem(Material type) { + // Assume (naively) that all types are valid items + return type; + } /** * Tests whether two item stacks are of the same type, i.e. it ignores the amounts. diff --git a/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java b/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java index b6979ebd4b4..eef0866a01b 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java +++ b/src/main/java/ch/njol/skript/bukkitutil/block/BlockCompat.java @@ -22,6 +22,7 @@ import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; import org.bukkit.entity.FallingBlock; import org.bukkit.inventory.ItemStack; @@ -41,6 +42,17 @@ public interface BlockCompat { BlockCompat INSTANCE = new NewBlockCompat(); static final BlockSetter SETTER = INSTANCE.getSetter(); + + /** + * Gets block values from a block state. They can be compared to other + * values if needed, but cannot be used to retrieve any other data. + * @param block Block state to retrieve value from. + * @return Block values. + * @deprecated Use {@link #getBlockValues(BlockData)} instead + */ + @Deprecated + @Nullable + BlockValues getBlockValues(BlockState block); /** * Gets block values from a block. They can be compared to other values @@ -65,6 +77,15 @@ default BlockValues getBlockValues(Block block) { @Nullable BlockValues getBlockValues(ItemStack stack); + /** + * Creates a block state from a falling block. + * @param entity Falling block entity + * @return Block state. + * @deprecated This shouldn't be used + */ + @Deprecated + BlockState fallingBlockToState(FallingBlock entity); + @Nullable default BlockValues getBlockValues(FallingBlock entity) { return getBlockValues(entity.getBlockData()); diff --git a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java index 97caa6e5179..89d7d93e0ec 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java +++ b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java @@ -30,10 +30,12 @@ import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; import org.bukkit.block.data.Bisected; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Directional; import org.bukkit.block.data.type.Bed; +import org.bukkit.entity.FallingBlock; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.eclipse.jdt.annotation.NonNull; @@ -324,6 +326,17 @@ public void sendBlockChange(Player player, Location location, Material type, @Nu private NewBlockSetter setter = new NewBlockSetter(); + + /** + * @deprecated Use {@link #getBlockValues(BlockData)} instead + */ + @Deprecated + @Nullable + @Override + public BlockValues getBlockValues(BlockState blockState) { + return getBlockValues(blockState.getBlockData()); + } + @Nullable @Override public BlockValues getBlockValues(BlockData blockData) { @@ -340,6 +353,14 @@ public BlockValues getBlockValues(ItemStack stack) { } return null; } + + @Deprecated + @Override + public BlockState fallingBlockToState(FallingBlock entity) { + BlockState state = entity.getWorld().getBlockAt(0, 0, 0).getState(); + state.setBlockData(entity.getBlockData()); + return state; + } @Override public BlockSetter getSetter() { From 294d522e1d04e2726dc15037caa372c6669b6503 Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Sun, 3 Mar 2024 11:12:43 -0800 Subject: [PATCH 3/5] ItemData/BlockCompat - Change a few things around --- src/main/java/ch/njol/skript/aliases/ItemData.java | 2 +- src/main/java/ch/njol/skript/aliases/ItemType.java | 2 +- .../njol/skript/bukkitutil/block/NewBlockCompat.java | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/njol/skript/aliases/ItemData.java b/src/main/java/ch/njol/skript/aliases/ItemData.java index 594480c1f29..32323c57e6f 100644 --- a/src/main/java/ch/njol/skript/aliases/ItemData.java +++ b/src/main/java/ch/njol/skript/aliases/ItemData.java @@ -191,7 +191,7 @@ public ItemData(ItemStack stack) { } /** - * @deprecated use {@link ItemData#ItemData(BlockData)} instead + * @deprecated Use {@link ItemData#ItemData(BlockData)} instead */ @Deprecated public ItemData(BlockState blockState) { diff --git a/src/main/java/ch/njol/skript/aliases/ItemType.java b/src/main/java/ch/njol/skript/aliases/ItemType.java index db447ceafa1..695c2a6c914 100644 --- a/src/main/java/ch/njol/skript/aliases/ItemType.java +++ b/src/main/java/ch/njol/skript/aliases/ItemType.java @@ -280,7 +280,7 @@ public boolean isOfType(@Nullable ItemStack item) { } /** - * @deprecated use {@link #isOfType(BlockData)} instead + * @deprecated Use {@link #isOfType(BlockData)} instead */ @Deprecated public boolean isOfType(@Nullable BlockState blockState) { diff --git a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java index 89d7d93e0ec..fd90bdc5deb 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java +++ b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java @@ -326,7 +326,6 @@ public void sendBlockChange(Player player, Location location, Material type, @Nu private NewBlockSetter setter = new NewBlockSetter(); - /** * @deprecated Use {@link #getBlockValues(BlockData)} instead */ @@ -354,6 +353,11 @@ public BlockValues getBlockValues(ItemStack stack) { return null; } + @Override + public BlockSetter getSetter() { + return setter; + } + @Deprecated @Override public BlockState fallingBlockToState(FallingBlock entity) { @@ -361,11 +365,6 @@ public BlockState fallingBlockToState(FallingBlock entity) { state.setBlockData(entity.getBlockData()); return state; } - - @Override - public BlockSetter getSetter() { - return setter; - } @Override @Nullable From 77d31def5a0cdb5e62ed3f87864390415179025d Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Sun, 3 Mar 2024 12:48:51 -0800 Subject: [PATCH 4/5] NewBlockCompat - getBlock at entity instead of forcing a chunk to load --- .../java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java index fd90bdc5deb..2a0ecd36da8 100644 --- a/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java +++ b/src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java @@ -361,7 +361,7 @@ public BlockSetter getSetter() { @Deprecated @Override public BlockState fallingBlockToState(FallingBlock entity) { - BlockState state = entity.getWorld().getBlockAt(0, 0, 0).getState(); + BlockState state = entity.getLocation().getBlock().getState(); state.setBlockData(entity.getBlockData()); return state; } From b135b400b815f0decbb5db39a190235a2a8c03a7 Mon Sep 17 00:00:00 2001 From: Shane Bee Date: Sat, 9 Mar 2024 14:03:08 -0800 Subject: [PATCH 5/5] Update src/main/java/ch/njol/skript/aliases/ItemType.java Co-authored-by: Patrick Miller --- src/main/java/ch/njol/skript/aliases/ItemType.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/ch/njol/skript/aliases/ItemType.java b/src/main/java/ch/njol/skript/aliases/ItemType.java index 695c2a6c914..7341667fa91 100644 --- a/src/main/java/ch/njol/skript/aliases/ItemType.java +++ b/src/main/java/ch/njol/skript/aliases/ItemType.java @@ -284,8 +284,7 @@ public boolean isOfType(@Nullable ItemStack item) { */ @Deprecated public boolean isOfType(@Nullable BlockState blockState) { - if (blockState == null) return false; - return isOfType(blockState.getBlockData()); + return blockState != null && isOfType(blockState.getBlockData()); } public boolean isOfType(@Nullable BlockData blockData) {