44import com .comphenix .protocol .ProtocolLibrary ;
55import com .comphenix .protocol .ProtocolManager ;
66import com .comphenix .protocol .events .*;
7- import io .papermc .paper .datacomponent .DataComponentType ;
87import io .papermc .paper .datacomponent .DataComponentTypes ;
9- import io .papermc .paper .datacomponent . item . ItemAdventurePredicate ;
8+ import io .papermc .paper .registry . TypedKey ;
109import org .bukkit .GameMode ;
1110import org .bukkit .Location ;
1211import org .bukkit .Material ;
1312import org .bukkit .Tag ;
1413import org .bukkit .block .Block ;
1514import org .bukkit .block .BlockFace ;
15+ import org .bukkit .block .BlockType ;
1616import org .bukkit .block .data .BlockData ;
1717import org .bukkit .block .data .Directional ;
18- import org .bukkit .enchantments .EnchantmentTarget ;
1918import org .bukkit .event .Event ;
2019import org .bukkit .event .EventHandler ;
2120import org .bukkit .event .block .Action ;
2221import org .bukkit .event .block .BlockBreakEvent ;
2322import org .bukkit .event .block .BlockPlaceEvent ;
2423import org .bukkit .event .player .PlayerInteractEvent ;
2524import org .bukkit .inventory .ItemStack ;
26- import org .bukkit .inventory .meta .ItemMeta ;
2725import org .bukkit .util .Vector ;
2826
2927public class PlayerListener extends PlexListener
3028{
3129 private final ProtocolManager protocolManager ;
3230 private final PacketListener packetListener ;
33- public static final DataComponentType .Valued <ItemAdventurePredicate > CAN_PLACE_ON = valued ("can_place_on" );
34-
3531
3632 public PlayerListener ()
3733 {
@@ -47,7 +43,7 @@ public void onPacketSending(PacketEvent event)
4743 }
4844 PacketContainer packet = event .getPacket ();
4945 byte b ;
50- if (packet .getIntegers ().getValues ().get ( 0 ) == event .getPlayer ().getEntityId () && (b = packet .getBytes ().getValues ().get ( 0 )) >= (byte ) 24 && b <= (byte ) 27 )
46+ if (packet .getIntegers ().getValues ().getFirst ( ) == event .getPlayer ().getEntityId () && (b = packet .getBytes ().getValues ().getFirst ( )) >= (byte ) 24 && b <= (byte ) 27 )
5147 {
5248 packet .getBytes ().write (0 , (byte ) 28 );
5349 }
@@ -82,12 +78,8 @@ private void onBlock(PlayerInteractEvent event)
8278 ItemStack item = event .getItem ();
8379 if (item != null )
8480 {
85- ItemMeta meta = item .getItemMeta ();
86- if (meta != null )
87- {
88- canPlace = item .hasData (DataComponentTypes .CAN_PLACE_ON );
89- canBreak = item .hasData (DataComponentTypes .CAN_BREAK );
90- }
81+ canPlace = item .getData (DataComponentTypes .CAN_PLACE_ON ).predicates ().stream ().anyMatch (blockPredicate -> blockPredicate .blocks ().contains ((TypedKey <BlockType >) clicked .getType ().asBlockType ().getKey ().key ()));
82+ canBreak = item .getData (DataComponentTypes .CAN_BREAK ).predicates ().stream ().anyMatch (blockPredicate -> blockPredicate .blocks ().contains ((TypedKey <BlockType >) clicked .getType ().asBlockType ().getKey ().key ()));
9183 }
9284 }
9385 boolean clickedTargetBlock = clicked .getType () == Material .COMMAND_BLOCK || clicked .getType () == Material .CHAIN_COMMAND_BLOCK || clicked .getType () == Material .REPEATING_COMMAND_BLOCK || clicked .getType () == Material .STRUCTURE_BLOCK || clicked .getType () == Material .JIGSAW ;
@@ -140,7 +132,7 @@ else if (event.getAction() == Action.LEFT_CLICK_BLOCK && clickedTargetBlock)
140132 {
141133 return ;
142134 }
143- if (event .getItem () != null && (EnchantmentTarget . WEAPON . includes (event .getItem ().getType ()) || event .getItem ().getType () == Material .DEBUG_STICK || event .getItem ().getType () == Material .TRIDENT ))
135+ if (event .getItem () != null && (Tag . ITEMS_SWORDS . isTagged (event .getItem ().getType ()) || event .getItem ().getType () == Material .DEBUG_STICK || event .getItem ().getType () == Material .TRIDENT ))
144136 {
145137 return ;
146138 }
@@ -192,8 +184,11 @@ private boolean isInteractable(Material material)
192184 {
193185 return switch (material )
194186 {
195- case BREWING_STAND , CAKE , CHEST , HOPPER , TRAPPED_CHEST , ENDER_CHEST , CAULDRON , COMMAND_BLOCK , REPEATING_COMMAND_BLOCK , CHAIN_COMMAND_BLOCK , BEACON , REPEATER , COMPARATOR , BARREL , DISPENSER , DROPPER , LEVER , CRAFTING_TABLE , CARTOGRAPHY_TABLE , SMITHING_TABLE , ENCHANTING_TABLE , FLETCHING_TABLE , BLAST_FURNACE , LOOM , GRINDSTONE , FURNACE , STONECUTTER , BELL , DAYLIGHT_DETECTOR , JIGSAW , STRUCTURE_BLOCK ->
196- true ;
187+ case BREWING_STAND , CAKE , CHEST , HOPPER , TRAPPED_CHEST , ENDER_CHEST , CAULDRON , COMMAND_BLOCK ,
188+ REPEATING_COMMAND_BLOCK , CHAIN_COMMAND_BLOCK , BEACON , REPEATER , COMPARATOR , BARREL , DISPENSER , DROPPER ,
189+ LEVER , CRAFTING_TABLE , CARTOGRAPHY_TABLE , SMITHING_TABLE , ENCHANTING_TABLE , FLETCHING_TABLE ,
190+ BLAST_FURNACE , LOOM , GRINDSTONE , FURNACE , STONECUTTER , BELL , DAYLIGHT_DETECTOR , JIGSAW ,
191+ STRUCTURE_BLOCK -> true ;
197192 default ->
198193 Tag .SIGNS .isTagged (material ) || Tag .BEDS .isTagged (material ) || Tag .BUTTONS .isTagged (material ) || Tag .TRAPDOORS .isTagged (material ) || Tag .WOODEN_DOORS .isTagged (material ) || Tag .SHULKER_BOXES .isTagged (material ) || Tag .ANVIL .isTagged (material ) || Tag .FENCE_GATES .isTagged (material );
199194 };
0 commit comments