From 40589ec3512933d29050799498d93d6affa20d6b Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sun, 3 Nov 2019 17:26:51 +0100 Subject: [PATCH] Optimizing techhider with cache, switching to asyncChatEvent, Survival in preparation phase --- .../steamwar/fightsystem/fight/FightTeam.java | 2 +- .../listener/PlayerChatListener.java | 4 +- .../steamwar/fightsystem/utils/TechHider.java | 49 ++++++++++++++----- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/de/steamwar/fightsystem/fight/FightTeam.java b/src/de/steamwar/fightsystem/fight/FightTeam.java index f970e33..7b59dbf 100644 --- a/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -143,7 +143,7 @@ public class FightTeam { invited.remove(player); team.addEntry(player.getName()); - player.setGameMode(GameMode.ADVENTURE); + player.setGameMode(GameMode.SURVIVAL); player.teleport(spawn); if(KitManager.getKits(false).size() > 1) player.getInventory().setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build()); diff --git a/src/de/steamwar/fightsystem/listener/PlayerChatListener.java b/src/de/steamwar/fightsystem/listener/PlayerChatListener.java index f17c00a..32ba681 100644 --- a/src/de/steamwar/fightsystem/listener/PlayerChatListener.java +++ b/src/de/steamwar/fightsystem/listener/PlayerChatListener.java @@ -7,12 +7,12 @@ import de.steamwar.fightsystem.utils.Config; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerChatEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; public class PlayerChatListener extends BasicListener { @EventHandler - public void handlePlayerChat(PlayerChatEvent event) { + public void handlePlayerChat(AsyncPlayerChatEvent event) { Player player = event.getPlayer(); String message = event.getMessage(); diff --git a/src/de/steamwar/fightsystem/utils/TechHider.java b/src/de/steamwar/fightsystem/utils/TechHider.java index 9804186..a7704f2 100644 --- a/src/de/steamwar/fightsystem/utils/TechHider.java +++ b/src/de/steamwar/fightsystem/utils/TechHider.java @@ -27,14 +27,14 @@ import org.bukkit.craftbukkit.v1_12_R1.CraftChunk; import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; public class TechHider { private TechHider(){} + private static Map packetCache = new HashMap<>(); + private static int arenaMinX; private static int arenaMaxX; private static int arenaMinZ; @@ -107,6 +107,8 @@ public class TechHider { if(disabled()) return; + Bukkit.getScheduler().runTaskTimer(FightSystem.getPlugin(), packetCache::clear, 1, 1); + ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.MAP_CHUNK) { @Override public void onPacketSending(PacketEvent e) { @@ -119,9 +121,16 @@ public class TechHider { if(bypass(p, chunkX, chunkZ)) return; - packet = packet.deepClone(); - e.setPacket(packet); - StructureModifier list = packet.getSpecificModifier(List.class); + PacketContainer cached = packetCache.get(packet); + if(cached != null){ + e.setPacket(cached); + return; + } + + cached = packet.deepClone(); + packetCache.put(packet, cached); + e.setPacket(cached); + StructureModifier list = cached.getSpecificModifier(List.class); List nmsTags = list.read(0); boolean changed = false; for(int i = nmsTags.size() - 1; i >= 0; i--){ @@ -136,7 +145,7 @@ public class TechHider { } changed = false; - StructureModifier byteArray = packet.getByteArrays(); + StructureModifier byteArray = cached.getByteArrays(); byte [] data = byteArray.read(0); ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.directBuffer(data.length + 100); int i = 0; @@ -222,9 +231,16 @@ public class TechHider { if(bypass(p, posToChunk(pos.getX()), posToChunk(pos.getZ()))) return; - packet = packet.deepClone(); - e.setPacket(packet); - StructureModifier blockStructure = packet.getBlockData(); + PacketContainer cached = packetCache.get(packet); + if(cached != null){ + e.setPacket(cached); + return; + } + + cached = packet.deepClone(); + packetCache.put(packet, cached); + e.setPacket(cached); + StructureModifier blockStructure = cached.getBlockData(); WrappedBlockData block = blockStructure.read(0); if(Config.HiddenBlocks.contains(block.getType().getId())){ block.setType(obfuscateMaterial); @@ -242,9 +258,16 @@ public class TechHider { if(bypass(p, pos.getChunkX(), pos.getChunkZ())) return; - packet = packet.shallowClone(); - e.setPacket(packet); - StructureModifier blockStructure = packet.getMultiBlockChangeInfoArrays(); + PacketContainer cached = packetCache.get(packet); + if(cached != null){ + e.setPacket(cached); + return; + } + + cached = packet.shallowClone(); + packetCache.put(packet, cached); + e.setPacket(cached); + StructureModifier blockStructure = cached.getMultiBlockChangeInfoArrays(); MultiBlockChangeInfo[] changes = blockStructure.read(0).clone(); boolean changed = false; for(MultiBlockChangeInfo mbci : changes){