From f6d1e2b3b8d7bf1145a035a21692a16a14673f88 Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Sat, 5 Sep 2020 13:24:18 +0200 Subject: [PATCH] Check TileState manually on 1.13.2, fixes PS-122 --- .../com/plotsquared/bukkit/BukkitMain.java | 8 ++- .../bukkit/listener/PaperListener113.java | 58 +++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener113.java diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java index 34cbcc5b3..4f149d126 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitMain.java @@ -25,6 +25,7 @@ */ package com.plotsquared.bukkit; +import com.plotsquared.bukkit.chat.Reflection; import com.plotsquared.bukkit.generator.BukkitHybridUtils; import com.plotsquared.bukkit.generator.BukkitPlotGenerator; import com.plotsquared.bukkit.listener.BlockEventListener; @@ -32,6 +33,7 @@ import com.plotsquared.bukkit.listener.ChunkListener; import com.plotsquared.bukkit.listener.EntityEventListener; import com.plotsquared.bukkit.listener.EntitySpawnListener; import com.plotsquared.bukkit.listener.PaperListener; +import com.plotsquared.bukkit.listener.PaperListener113; import com.plotsquared.bukkit.listener.PlayerEventListener; import com.plotsquared.bukkit.listener.ProjectileEventListener; import com.plotsquared.bukkit.listener.ServerListener; @@ -904,7 +906,11 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain< getServer().getPluginManager().registerEvents(new ProjectileEventListener(), this); getServer().getPluginManager().registerEvents(new EntitySpawnListener(), this); if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) { - getServer().getPluginManager().registerEvents(new PaperListener(), this); + if (Reflection.getVersion().startsWith("v1_13")) { + getServer().getPluginManager().registerEvents(new PaperListener113(), this); + } else { + getServer().getPluginManager().registerEvents(new PaperListener(), this); + } } PlotListener.startRunnable(); } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener113.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener113.java new file mode 100644 index 000000000..d098182bf --- /dev/null +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PaperListener113.java @@ -0,0 +1,58 @@ +package com.plotsquared.bukkit.listener; + +import com.plotsquared.bukkit.util.BukkitUtil; +import com.plotsquared.core.configuration.Captions; +import com.plotsquared.core.configuration.Settings; +import com.plotsquared.core.location.Location; +import com.plotsquared.core.player.PlotPlayer; +import com.plotsquared.core.plot.PlotArea; +import org.bukkit.block.Banner; +import org.bukkit.block.Beacon; +import org.bukkit.block.Bed; +import org.bukkit.block.BlockState; +import org.bukkit.block.CommandBlock; +import org.bukkit.block.Comparator; +import org.bukkit.block.Conduit; +import org.bukkit.block.Container; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.DaylightDetector; +import org.bukkit.block.EnchantingTable; +import org.bukkit.block.EndGateway; +import org.bukkit.block.EnderChest; +import org.bukkit.block.Jukebox; +import org.bukkit.block.Sign; +import org.bukkit.block.Skull; +import org.bukkit.block.Structure; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockPlaceEvent; + +public class PaperListener113 extends PaperListener { + + @EventHandler + public void onBlockPlace(BlockPlaceEvent event) { + if (!Settings.Paper_Components.TILE_ENTITY_CHECK || !Settings.Enabled_Components.CHUNK_PROCESSOR) { + return; + } + BlockState state = event.getBlock().getState(false); + if (!(state instanceof Banner || state instanceof Beacon || state instanceof Bed + || state instanceof CommandBlock || state instanceof Comparator || state instanceof Conduit + || state instanceof Container || state instanceof CreatureSpawner || state instanceof DaylightDetector + || state instanceof EnchantingTable || state instanceof EnderChest || state instanceof EndGateway + || state instanceof Jukebox || state instanceof Sign || state instanceof Skull + || state instanceof Structure)) { + return; + } + final Location location = BukkitUtil.getLocation(event.getBlock().getLocation()); + final PlotArea plotArea = location.getPlotArea(); + if (plotArea == null) { + return; + } + final int tileEntityCount = event.getBlock().getChunk().getTileEntities(false).length; + if (tileEntityCount >= Settings.Chunk_Processor.MAX_TILES) { + final PlotPlayer plotPlayer = BukkitUtil.getPlayer(event.getPlayer()); + Captions.TILE_ENTITY_CAP_REACHED.send(plotPlayer, Settings.Chunk_Processor.MAX_TILES); + event.setCancelled(true); + event.setBuild(false); + } + } +}