mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-25 15:43:44 +02:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			feat/mutab
			...
			refactor/v
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 79121603ee | ||
|   | bbb9965526 | 
| @@ -72,6 +72,7 @@ import net.kyori.adventure.text.minimessage.Template; | |||||||
| import org.bukkit.Bukkit; | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.GameMode; | import org.bukkit.GameMode; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
|  | import org.bukkit.Tag; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.block.BlockFace; | import org.bukkit.block.BlockFace; | ||||||
| import org.bukkit.block.BlockState; | import org.bukkit.block.BlockState; | ||||||
| @@ -113,11 +114,20 @@ import org.checkerframework.checker.nullness.qual.NonNull; | |||||||
| import java.util.Iterator; | import java.util.Iterator; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.Objects; | import java.util.Objects; | ||||||
|  | import java.util.Set; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
|  |  | ||||||
| @SuppressWarnings("unused") | @SuppressWarnings("unused") | ||||||
| public class BlockEventListener implements Listener { | public class BlockEventListener implements Listener { | ||||||
|  |  | ||||||
|  |     private static final Set<Material> PISTONS = Set.of( | ||||||
|  |             Material.PISTON, | ||||||
|  |             Material.STICKY_PISTON | ||||||
|  |     ); | ||||||
|  |     private static final Set<Material> PHYSICS_BLOCKS = Set.of( | ||||||
|  |             Material.TURTLE_EGG, | ||||||
|  |             Material.TURTLE_SPAWN_EGG | ||||||
|  |     ); | ||||||
|     private final PlotAreaManager plotAreaManager; |     private final PlotAreaManager plotAreaManager; | ||||||
|     private final WorldEdit worldEdit; |     private final WorldEdit worldEdit; | ||||||
|  |  | ||||||
| @@ -223,48 +233,31 @@ public class BlockEventListener implements Listener { | |||||||
|             plot.debug("Prevented block physics and resent block change because disable-physics = true"); |             plot.debug("Prevented block physics and resent block change because disable-physics = true"); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         switch (event.getChangedType()) { |         if (event.getChangedType() == Material.COMPARATOR) { | ||||||
|             case COMPARATOR: { |             if (!plot.getFlag(RedstoneFlag.class)) { | ||||||
|                 if (!plot.getFlag(RedstoneFlag.class)) { |                 event.setCancelled(true); | ||||||
|                     event.setCancelled(true); |                 plot.debug("Prevented comparator update because redstone = false"); | ||||||
|                     plot.debug("Prevented comparator update because redstone = false"); |  | ||||||
|                 } |  | ||||||
|                 return; |  | ||||||
|             } |             } | ||||||
|             case ANVIL: |             return; | ||||||
|             case DRAGON_EGG: |         } | ||||||
|             case GRAVEL: |         if (PHYSICS_BLOCKS.contains(event.getChangedType())) { | ||||||
|             case SAND: |             if (plot.getFlag(DisablePhysicsFlag.class)) { | ||||||
|             case TURTLE_EGG: |                 event.setCancelled(true); | ||||||
|             case TURTLE_HELMET: |                 plot.debug("Prevented block physics because disable-physics = true"); | ||||||
|             case TURTLE_SPAWN_EGG: { |  | ||||||
|                 if (plot.getFlag(DisablePhysicsFlag.class)) { |  | ||||||
|                     event.setCancelled(true); |  | ||||||
|                     plot.debug("Prevented block physics because disable-physics = true"); |  | ||||||
|                 } |  | ||||||
|                 return; |  | ||||||
|             } |             } | ||||||
|             default: |             return; | ||||||
|                 if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) { |         } | ||||||
|                     switch (block.getType()) { |         if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) { | ||||||
|                         case PISTON, STICKY_PISTON -> { |             if (PISTONS.contains(block.getType())) { | ||||||
|                             org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData(); |                 org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData(); | ||||||
|                             switch (piston.getFacing()) { |                 final BlockFace facing = piston.getFacing(); | ||||||
|                                 case EAST -> location = location.add(1, 0, 0); |                 location = location.add(facing.getModX(), facing.getModY(), facing.getModZ()); | ||||||
|                                 case SOUTH -> location = location.add(-1, 0, 0); |                 Plot newPlot = area.getOwnedPlotAbs(location); | ||||||
|                                 case WEST -> location = location.add(0, 0, 1); |                 if (!plot.equals(newPlot)) { | ||||||
|                                 case NORTH -> location = location.add(0, 0, -1); |                     event.setCancelled(true); | ||||||
|                             } |                     plot.debug("Prevented piston update because of invalid edge piston detection"); | ||||||
|                             Plot newPlot = area.getOwnedPlotAbs(location); |  | ||||||
|                             if (!plot.equals(newPlot)) { |  | ||||||
|                                 event.setCancelled(true); |  | ||||||
|                                 plot.debug("Prevented piston update because of invalid edge piston detection"); |  | ||||||
|                                 return; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |                 } | ||||||
|                 break; |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -555,21 +548,18 @@ public class BlockEventListener implements Listener { | |||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         switch (event.getNewState().getType()) { |         if (Tag.SNOW.isTagged(event.getNewState().getType())) { | ||||||
|             case SNOW: |             if (!plot.getFlag(SnowFormFlag.class)) { | ||||||
|             case SNOW_BLOCK: |                 plot.debug("Snow could not form because snow-form = false"); | ||||||
|                 if (!plot.getFlag(SnowFormFlag.class)) { |                 event.setCancelled(true); | ||||||
|                     plot.debug("Snow could not form because snow-form = false"); |             } | ||||||
|                     event.setCancelled(true); |             return; | ||||||
|                 } |         } | ||||||
|                 return; |         if (Tag.ICE.isTagged(event.getNewState().getType())) { | ||||||
|             case ICE: |             if (!plot.getFlag(IceFormFlag.class)) { | ||||||
|             case FROSTED_ICE: |                 plot.debug("Ice could not form because ice-form = false"); | ||||||
|             case PACKED_ICE: |                 event.setCancelled(true); | ||||||
|                 if (!plot.getFlag(IceFormFlag.class)) { |             } | ||||||
|                     plot.debug("Ice could not form because ice-form = false"); |  | ||||||
|                     event.setCancelled(true); |  | ||||||
|                 } |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -590,18 +580,12 @@ public class BlockEventListener implements Listener { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         Class<? extends BooleanFlag<?>> flag; |         Class<? extends BooleanFlag<?>> flag; | ||||||
|         switch (event.getNewState().getType()) { |         if (Tag.SNOW.isTagged(event.getNewState().getType())) { | ||||||
|             case SNOW: |             flag = SnowFormFlag.class; | ||||||
|             case SNOW_BLOCK: |         } else if (Tag.ICE.isTagged(event.getNewState().getType())) { | ||||||
|                 flag = SnowFormFlag.class; |             flag = IceFormFlag.class; | ||||||
|                 break; |         } else { | ||||||
|             case ICE: |             return; | ||||||
|             case FROSTED_ICE: |  | ||||||
|             case PACKED_ICE: |  | ||||||
|                 flag = IceFormFlag.class; |  | ||||||
|                 break; |  | ||||||
|             default: |  | ||||||
|                 return; // other blocks are ignored by this event |  | ||||||
|         } |         } | ||||||
|         boolean allowed = plot.getFlag(flag); |         boolean allowed = plot.getFlag(flag); | ||||||
|         Entity entity = event.getEntity(); |         Entity entity = event.getEntity(); | ||||||
| @@ -705,50 +689,33 @@ public class BlockEventListener implements Listener { | |||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         switch (block.getType()) { |         Material blockType = block.getType(); | ||||||
|             case ICE: |         if (Tag.ICE.isTagged(blockType)) { | ||||||
|                 if (!plot.getFlag(IceMeltFlag.class)) { |             if (!plot.getFlag(IceMeltFlag.class)) { | ||||||
|                     plot.debug("Ice could not melt because ice-melt = false"); |                 plot.debug("Ice could not melt because ice-melt = false"); | ||||||
|                     event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|                 } |             } | ||||||
|                 break; |             return; | ||||||
|             case SNOW: |         } | ||||||
|                 if (!plot.getFlag(SnowMeltFlag.class)) { |         if (Tag.SNOW.isTagged(blockType)) { | ||||||
|                     plot.debug("Snow could not melt because snow-melt = false"); |             if (!plot.getFlag(SnowMeltFlag.class)) { | ||||||
|                     event.setCancelled(true); |                 plot.debug("Snow could not melt because snow-melt = false"); | ||||||
|                 } |                 event.setCancelled(true); | ||||||
|                 break; |             } | ||||||
|             case FARMLAND: |             return; | ||||||
|                 if (!plot.getFlag(SoilDryFlag.class)) { |         } | ||||||
|                     plot.debug("Soil could not dry because soil-dry = false"); |         if (blockType == Material.FARMLAND) { | ||||||
|                     event.setCancelled(true); |             if (!plot.getFlag(SoilDryFlag.class)) { | ||||||
|                 } |                 plot.debug("Soil could not dry because soil-dry = false"); | ||||||
|                 break; |                 event.setCancelled(true); | ||||||
|             case TUBE_CORAL_BLOCK: |             } | ||||||
|             case BRAIN_CORAL_BLOCK: |             return; | ||||||
|             case BUBBLE_CORAL_BLOCK: |         } | ||||||
|             case FIRE_CORAL_BLOCK: |         if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType)) { | ||||||
|             case HORN_CORAL_BLOCK: |             if (!plot.getFlag(CoralDryFlag.class)) { | ||||||
|             case TUBE_CORAL: |                 plot.debug("Coral could not dry because coral-dry = false"); | ||||||
|             case BRAIN_CORAL: |                 event.setCancelled(true); | ||||||
|             case BUBBLE_CORAL: |             } | ||||||
|             case FIRE_CORAL: |  | ||||||
|             case HORN_CORAL: |  | ||||||
|             case TUBE_CORAL_FAN: |  | ||||||
|             case BRAIN_CORAL_FAN: |  | ||||||
|             case BUBBLE_CORAL_FAN: |  | ||||||
|             case FIRE_CORAL_FAN: |  | ||||||
|             case HORN_CORAL_FAN: |  | ||||||
|             case BRAIN_CORAL_WALL_FAN: |  | ||||||
|             case BUBBLE_CORAL_WALL_FAN: |  | ||||||
|             case FIRE_CORAL_WALL_FAN: |  | ||||||
|             case HORN_CORAL_WALL_FAN: |  | ||||||
|             case TUBE_CORAL_WALL_FAN: |  | ||||||
|                 if (!plot.getFlag(CoralDryFlag.class)) { |  | ||||||
|                     plot.debug("Coral could not dry because coral-dry = false"); |  | ||||||
|                     event.setCancelled(true); |  | ||||||
|                 } |  | ||||||
|                 break; |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ import com.plotsquared.core.plot.Plot; | |||||||
| import com.plotsquared.core.plot.PlotArea; | import com.plotsquared.core.plot.PlotArea; | ||||||
| import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; | import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; | import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; | ||||||
|  | import org.bukkit.Material; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.entity.Entity; | import org.bukkit.entity.Entity; | ||||||
| import org.bukkit.entity.Item; | import org.bukkit.entity.Item; | ||||||
| @@ -46,11 +47,31 @@ import org.bukkit.event.block.BlockReceiveGameEvent; | |||||||
|  |  | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.Objects; | import java.util.Objects; | ||||||
|  | import java.util.Set; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
|  |  | ||||||
| @SuppressWarnings("unused") | @SuppressWarnings("unused") | ||||||
| public class BlockEventListener117 implements Listener { | public class BlockEventListener117 implements Listener { | ||||||
|  |  | ||||||
|  |     private static final Set<Material> COPPER_OXIDIZING = Set.of( | ||||||
|  |             Material.COPPER_BLOCK, | ||||||
|  |             Material.EXPOSED_COPPER, | ||||||
|  |             Material.WEATHERED_COPPER, | ||||||
|  |             Material.OXIDIZED_COPPER, | ||||||
|  |             Material.CUT_COPPER, | ||||||
|  |             Material.EXPOSED_CUT_COPPER, | ||||||
|  |             Material.WEATHERED_CUT_COPPER, | ||||||
|  |             Material.OXIDIZED_CUT_COPPER, | ||||||
|  |             Material.CUT_COPPER_STAIRS, | ||||||
|  |             Material.EXPOSED_CUT_COPPER_STAIRS, | ||||||
|  |             Material.WEATHERED_CUT_COPPER_STAIRS, | ||||||
|  |             Material.OXIDIZED_CUT_COPPER_STAIRS, | ||||||
|  |             Material.CUT_COPPER_SLAB, | ||||||
|  |             Material.EXPOSED_CUT_COPPER_SLAB, | ||||||
|  |             Material.WEATHERED_CUT_COPPER_SLAB, | ||||||
|  |             Material.OXIDIZED_CUT_COPPER_SLAB | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     @Inject |     @Inject | ||||||
|     public BlockEventListener117() { |     public BlockEventListener117() { | ||||||
|     } |     } | ||||||
| @@ -155,27 +176,11 @@ public class BlockEventListener117 implements Listener { | |||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         switch (event.getNewState().getType()) { |         if (COPPER_OXIDIZING.contains(event.getNewState().getType())) { | ||||||
|             case COPPER_BLOCK: |             if (!plot.getFlag(CopperOxideFlag.class)) { | ||||||
|             case EXPOSED_COPPER: |                 plot.debug("Copper could not oxide because copper-oxide = false"); | ||||||
|             case WEATHERED_COPPER: |                 event.setCancelled(true); | ||||||
|             case OXIDIZED_COPPER: |             } | ||||||
|             case CUT_COPPER: |  | ||||||
|             case EXPOSED_CUT_COPPER: |  | ||||||
|             case WEATHERED_CUT_COPPER: |  | ||||||
|             case OXIDIZED_CUT_COPPER: |  | ||||||
|             case CUT_COPPER_STAIRS: |  | ||||||
|             case EXPOSED_CUT_COPPER_STAIRS: |  | ||||||
|             case WEATHERED_CUT_COPPER_STAIRS: |  | ||||||
|             case OXIDIZED_CUT_COPPER_STAIRS: |  | ||||||
|             case CUT_COPPER_SLAB: |  | ||||||
|             case EXPOSED_CUT_COPPER_SLAB: |  | ||||||
|             case WEATHERED_CUT_COPPER_SLAB: |  | ||||||
|             case OXIDIZED_CUT_COPPER_SLAB: |  | ||||||
|                 if (!plot.getFlag(CopperOxideFlag.class)) { |  | ||||||
|                     plot.debug("Copper could not oxide because copper-oxide = false"); |  | ||||||
|                     event.setCancelled(true); |  | ||||||
|                 } |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -131,17 +131,17 @@ public class EntitySpawnListener implements Listener { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlotAbs(); |         Plot plot = location.getOwnedPlotAbs(); | ||||||
|  |         EntityType type = entity.getType(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             EntityType type = entity.getType(); |  | ||||||
|             if (!area.isMobSpawning()) { |             if (!area.isMobSpawning()) { | ||||||
|                 switch (type) { |                 if (type == EntityType.PLAYER) { | ||||||
|                     case DROPPED_ITEM: |                     return; | ||||||
|                         if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { |                 } | ||||||
|                             event.setCancelled(true); |                 if (type == EntityType.DROPPED_ITEM) { | ||||||
|                             return; |                     if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { | ||||||
|                         } |                         event.setCancelled(true); | ||||||
|                     case PLAYER: |                     } | ||||||
|                         return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 if (type.isAlive()) { |                 if (type.isAlive()) { | ||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
| @@ -155,15 +155,16 @@ public class EntitySpawnListener implements Listener { | |||||||
|         if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { |         if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|         } |         } | ||||||
|         switch (entity.getType()) { |         if (type == EntityType.ENDER_CRYSTAL) { | ||||||
|             case ENDER_CRYSTAL: |             if (BukkitEntityUtil.checkEntity(entity, plot)) { | ||||||
|                 if (BukkitEntityUtil.checkEntity(entity, plot)) { |                 event.setCancelled(true); | ||||||
|                     event.setCancelled(true); |             } | ||||||
|                 } |             return; | ||||||
|             case SHULKER: |         } | ||||||
|                 if (!entity.hasMetadata("shulkerPlot")) { |         if (type == EntityType.SHULKER) { | ||||||
|                     entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId())); |             if (!entity.hasMetadata("shulkerPlot")) { | ||||||
|                 } |                 entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId())); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -237,15 +237,15 @@ public class PaperListener implements Listener { | |||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             EntityType type = event.getType(); |             EntityType type = event.getType(); | ||||||
|             if (!area.isMobSpawning()) { |             if (!area.isMobSpawning()) { | ||||||
|                 switch (type) { |                 if (type == EntityType.PLAYER) { | ||||||
|                     case DROPPED_ITEM: |                     return; | ||||||
|                         if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { |                 } | ||||||
|                             event.setShouldAbortSpawn(true); |                 if (type == EntityType.DROPPED_ITEM) { | ||||||
|                             event.setCancelled(true); |                     if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { | ||||||
|                             return; |                         event.setShouldAbortSpawn(true); | ||||||
|                         } |                         event.setCancelled(true); | ||||||
|                     case PLAYER: |                     } | ||||||
|                         return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 if (type.isAlive()) { |                 if (type.isAlive()) { | ||||||
|                     event.setShouldAbortSpawn(true); |                     event.setShouldAbortSpawn(true); | ||||||
|   | |||||||
| @@ -89,6 +89,7 @@ import org.bukkit.Bukkit; | |||||||
| import org.bukkit.ChatColor; | import org.bukkit.ChatColor; | ||||||
| import org.bukkit.FluidCollisionMode; | import org.bukkit.FluidCollisionMode; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
|  | import org.bukkit.Tag; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.block.BlockFace; | import org.bukkit.block.BlockFace; | ||||||
| import org.bukkit.block.BlockState; | import org.bukkit.block.BlockState; | ||||||
| @@ -166,6 +167,20 @@ import java.util.regex.Pattern; | |||||||
| @SuppressWarnings("unused") | @SuppressWarnings("unused") | ||||||
| public class PlayerEventListener extends PlotListener implements Listener { | public class PlayerEventListener extends PlotListener implements Listener { | ||||||
|  |  | ||||||
|  |     private static final Set<Material> MINECARTS = Set.of( | ||||||
|  |             Material.MINECART, | ||||||
|  |             Material.TNT_MINECART, | ||||||
|  |             Material.CHEST_MINECART, | ||||||
|  |             Material.COMMAND_BLOCK_MINECART, | ||||||
|  |             Material.FURNACE_MINECART, | ||||||
|  |             Material.HOPPER_MINECART | ||||||
|  |     ); | ||||||
|  |     private static final Set<Material> BOOKS = Set.of( | ||||||
|  |             Material.BOOK, | ||||||
|  |             Material.KNOWLEDGE_BOOK, | ||||||
|  |             Material.WRITABLE_BOOK, | ||||||
|  |             Material.WRITTEN_BOOK | ||||||
|  |     ); | ||||||
|     private final EventDispatcher eventDispatcher; |     private final EventDispatcher eventDispatcher; | ||||||
|     private final WorldEdit worldEdit; |     private final WorldEdit worldEdit; | ||||||
|     private final PlotAreaManager plotAreaManager; |     private final PlotAreaManager plotAreaManager; | ||||||
| @@ -837,10 +852,10 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|         if ((slot > 8) || !event.getEventName().equals("InventoryCreativeEvent")) { |         if ((slot > 8) || !event.getEventName().equals("InventoryCreativeEvent")) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         ItemStack current = inv.getItemInHand(); |         ItemStack oldItem = inv.getItemInHand(); | ||||||
|  |         ItemMeta oldMeta = oldItem.getItemMeta(); | ||||||
|         ItemStack newItem = event.getCursor(); |         ItemStack newItem = event.getCursor(); | ||||||
|         ItemMeta newMeta = newItem.getItemMeta(); |         ItemMeta newMeta = newItem.getItemMeta(); | ||||||
|         ItemMeta oldMeta = newItem.getItemMeta(); |  | ||||||
|  |  | ||||||
|         if (event.getClick() == ClickType.CREATIVE) { |         if (event.getClick() == ClickType.CREATIVE) { | ||||||
|             final Plot plot = pp.getCurrentPlot(); |             final Plot plot = pp.getCurrentPlot(); | ||||||
| @@ -880,34 +895,26 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|                 oldLore = lore.toString(); |                 oldLore = lore.toString(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (!"[(+NBT)]".equals(newLore) || (current.equals(newItem) && newLore.equals(oldLore))) { |         Material itemType = newItem.getType(); | ||||||
|             switch (newItem.getType()) { |         if (!"[(+NBT)]".equals(newLore) || (oldItem.equals(newItem) && newLore.equals(oldLore))) { | ||||||
|                 case LEGACY_BANNER: |             if (newMeta == null || (itemType != Material.LEGACY_BANNER && itemType != Material.PLAYER_HEAD)) { | ||||||
|                 case PLAYER_HEAD: |                 return; | ||||||
|                     if (newMeta != null) { |  | ||||||
|                         break; |  | ||||||
|                     } |  | ||||||
|                 default: |  | ||||||
|                     return; |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         Block block = player.getTargetBlock(null, 7); |         Block block = player.getTargetBlock(null, 7); | ||||||
|         org.bukkit.block.BlockState state = block.getState(); |         org.bukkit.block.BlockState state = block.getState(); | ||||||
|         Material stateType = state.getType(); |         Material stateType = state.getType(); | ||||||
|         Material itemType = newItem.getType(); |  | ||||||
|         if (stateType != itemType) { |         if (stateType != itemType) { | ||||||
|             switch (stateType) { |             if (stateType == Material.LEGACY_WALL_BANNER || stateType == Material.LEGACY_STANDING_BANNER) { | ||||||
|                 case LEGACY_STANDING_BANNER: |                 if (itemType != Material.LEGACY_BANNER) { | ||||||
|                 case LEGACY_WALL_BANNER: |  | ||||||
|                     if (itemType == Material.LEGACY_BANNER) { |  | ||||||
|                         break; |  | ||||||
|                     } |  | ||||||
|                 case LEGACY_SKULL: |  | ||||||
|                     if (itemType == Material.LEGACY_SKULL_ITEM) { |  | ||||||
|                         break; |  | ||||||
|                     } |  | ||||||
|                 default: |  | ||||||
|                     return; |                     return; | ||||||
|  |                 } | ||||||
|  |             } else if (stateType == Material.LEGACY_SKULL) { | ||||||
|  |                 if (itemType != Material.LEGACY_SKULL_ITEM) { | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 return; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         Location location = BukkitUtil.adapt(state.getLocation()); |         Location location = BukkitUtil.adapt(state.getLocation()); | ||||||
| @@ -946,7 +953,7 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (cancelled) { |         if (cancelled) { | ||||||
|             if ((current.getType() == newItem.getType()) && (current.getDurability() == newItem |             if ((oldItem.getType() == newItem.getType()) && (oldItem.getDurability() == newItem | ||||||
|                     .getDurability())) { |                     .getDurability())) { | ||||||
|                 event.setCursor( |                 event.setCursor( | ||||||
|                         new ItemStack(newItem.getType(), newItem.getAmount(), newItem.getDurability())); |                         new ItemStack(newItem.getType(), newItem.getAmount(), newItem.getDurability())); | ||||||
| @@ -1133,14 +1140,21 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|                     //Allow all players to eat while also allowing the block place event ot be fired |                     //Allow all players to eat while also allowing the block place event ot be fired | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 switch (type) { |                 if (type == Material.ARMOR_STAND) { | ||||||
|                     case ACACIA_BOAT, BIRCH_BOAT, CHEST_MINECART, COMMAND_BLOCK_MINECART, DARK_OAK_BOAT, FURNACE_MINECART, HOPPER_MINECART, JUNGLE_BOAT, MINECART, OAK_BOAT, SPRUCE_BOAT, TNT_MINECART -> eventType = PlayerBlockEventType.PLACE_VEHICLE; |                     location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation()); | ||||||
|                     case FIREWORK_ROCKET, FIREWORK_STAR -> eventType = PlayerBlockEventType.SPAWN_MOB; |                     eventType = PlayerBlockEventType.PLACE_MISC; | ||||||
|                     case BOOK, KNOWLEDGE_BOOK, WRITABLE_BOOK, WRITTEN_BOOK -> eventType = PlayerBlockEventType.READ; |                 } | ||||||
|                     case ARMOR_STAND -> { |                 if (Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) { | ||||||
|                         location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation()); |                     eventType = PlayerBlockEventType.PLACE_VEHICLE; | ||||||
|                         eventType = PlayerBlockEventType.PLACE_MISC; |                     break; | ||||||
|                     } |                 } | ||||||
|  |                 if (type == Material.FIREWORK_ROCKET || type == Material.FIREWORK_STAR) { | ||||||
|  |                     eventType = PlayerBlockEventType.SPAWN_MOB; | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |                 if (BOOKS.contains(type)) { | ||||||
|  |                     eventType = PlayerBlockEventType.READ; | ||||||
|  |                     break; | ||||||
|                 } |                 } | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user