From 3fa94b4f313fc2e2e791ed5ee869fc9b8b15d127 Mon Sep 17 00:00:00 2001 From: Pyr Date: Wed, 19 Apr 2023 17:08:30 +0100 Subject: [PATCH] small optimizations and reformatting --- .../listeners/InventoryListener.java | 22 +++--- .../znpcservers/listeners/PlayerListener.java | 7 +- .../github/znetworkw/znpcservers/npc/NPC.java | 72 +++++-------------- .../znpcservers/npc/task/NPCManagerTask.java | 12 ++-- .../java/lol/pyr/znpcsplus/ZNPCsPlus.java | 22 +++--- 5 files changed, 44 insertions(+), 91 deletions(-) diff --git a/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java b/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java index df573f8..bb39d20 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java +++ b/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java @@ -1,7 +1,7 @@ package io.github.znetworkw.znpcservers.listeners; -import io.github.znetworkw.znpcservers.utility.inventory.ZInventory; import io.github.znetworkw.znpcservers.utility.inventory.ZInventoryHolder; +import io.github.znetworkw.znpcservers.utility.inventory.ZInventoryPage; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,17 +15,15 @@ public class InventoryListener implements Listener { @EventHandler public void onClick(InventoryClickEvent event) { - if (!(event.getWhoClicked() instanceof Player)) - return; - if (event.getCurrentItem() == null) - return; - if (!(event.getInventory().getHolder() instanceof ZInventoryHolder)) - return; + if (!(event.getWhoClicked() instanceof Player player)) return; + if (event.getCurrentItem() == null) return; + if (!(event.getInventory().getHolder() instanceof ZInventoryHolder holder)) return; event.setCancelled(true); - ZInventory zInventory = ((ZInventoryHolder) event.getInventory().getHolder()).getzInventory(); - if (!zInventory.getPage().containsItem(event.getRawSlot())) - return; - zInventory.getPage().findItem(event.getRawSlot()).getInventoryCallback().onClick(event); - ((Player) event.getWhoClicked()).updateInventory(); + + ZInventoryPage page = holder.getzInventory().getPage(); + if (!page.containsItem(event.getRawSlot())) return; + + page.findItem(event.getRawSlot()).getInventoryCallback().onClick(event); + player.updateInventory(); } } diff --git a/src/main/java/io/github/znetworkw/znpcservers/listeners/PlayerListener.java b/src/main/java/io/github/znetworkw/znpcservers/listeners/PlayerListener.java index b4edfb5..1133e35 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/listeners/PlayerListener.java +++ b/src/main/java/io/github/znetworkw/znpcservers/listeners/PlayerListener.java @@ -5,6 +5,7 @@ import io.github.znetworkw.znpcservers.npc.event.NPCInteractEvent; import io.github.znetworkw.znpcservers.user.EventService; import io.github.znetworkw.znpcservers.user.ZUser; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -27,7 +28,7 @@ public class PlayerListener implements Listener { ZUser.unregister(event.getPlayer()); } - @EventHandler(ignoreCancelled = true) + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onTalk(AsyncPlayerChatEvent event) { ZUser zUser = ZUser.find(event.getPlayer()); if (EventService.hasService(zUser, AsyncPlayerChatEvent.class)) { @@ -41,9 +42,7 @@ public class PlayerListener implements Listener { @EventHandler public void onConversation(NPCInteractEvent event) { ConversationModel conversationStorage = event.getNpc().getNpcPojo().getConversation(); - if (conversationStorage == null || conversationStorage - .getConversationType() != ConversationModel.ConversationType.CLICK) - return; + if (conversationStorage == null || conversationStorage.getConversationType() != ConversationModel.ConversationType.CLICK) return; event.getNpc().tryStartConversation(event.getPlayer()); } } diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java b/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java index 3cf3680..b4178a8 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/NPC.java @@ -22,41 +22,21 @@ import java.util.concurrent.ConcurrentMap; public class NPC { private static final ConcurrentMap NPC_MAP = new ConcurrentHashMap<>(); - - private static final String PROFILE_TEXTURES = "textures"; - - private static final String START_PREFIX = "[ZNPC] "; - private final Set viewers = new HashSet<>(); - private final PacketCache packets = new PacketCache(); - private final NPCModel npcPojo; - private final Hologram hologram; - private final String npcName; - private final NPCSkin npcSkin; - private long lastMove = -1L; - private int entityID; - private Object glowColor; - private Object tabConstructor; - private Object updateTabConstructor; - private Object nmsEntity; - private Object bukkitEntity; - private UUID uuid; - private GameProfile gameProfile; - private NPCPath.PathInitializer npcPath; public NPC(NPCModel npcModel, boolean load) { @@ -155,8 +135,7 @@ public class NPC { try { if (this.npcPath == null) { lookAt(null, location, true); - if (updateTime) - this.lastMove = System.nanoTime(); + if (updateTime) this.lastMove = System.nanoTime(); this.npcPojo.setLocation(new ZLocation(location = new Location(location.getWorld(), location.getBlockX() + 0.5D, location.getY(), location.getBlockZ() + 0.5D, location.getYaw(), location.getPitch()))); } CacheRegistry.SET_LOCATION_METHOD.load().invoke(this.nmsEntity, location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); @@ -172,8 +151,7 @@ public class NPC { this.npcPojo.setSkin(skinFetch.getTexture()); this.npcPojo.setSignature(skinFetch.getSignature()); this.gameProfile.getProperties().clear(); - this.gameProfile.getProperties().put("textures", new Property("textures", this.npcPojo - .getSkin(), this.npcPojo.getSignature())); + this.gameProfile.getProperties().put("textures", new Property("textures", this.npcPojo.getSkin(), this.npcPojo.getSignature())); updateProfile(this.gameProfile.getProperties()); deleteViewers(); } @@ -182,9 +160,9 @@ public class NPC { try { Object dataWatcherObject = CacheRegistry.GET_DATA_WATCHER_METHOD.load().invoke(this.nmsEntity); if (Utils.versionNewer(9)) { - CacheRegistry.SET_DATA_WATCHER_METHOD.load().invoke(dataWatcherObject, CacheRegistry.DATA_WATCHER_OBJECT_CONSTRUCTOR - .load().newInstance(this.npcSkin.getLayerIndex(), CacheRegistry.DATA_WATCHER_REGISTER_FIELD - .load()), (byte) 127); + CacheRegistry.SET_DATA_WATCHER_METHOD.load().invoke(dataWatcherObject, + CacheRegistry.DATA_WATCHER_OBJECT_CONSTRUCTOR.load() + .newInstance(this.npcSkin.getLayerIndex(), CacheRegistry.DATA_WATCHER_REGISTER_FIELD.load()), (byte) 127); } else { CacheRegistry.WATCH_DATA_WATCHER_METHOD.load().invoke(dataWatcherObject, 10, (byte) 127); } @@ -233,13 +211,11 @@ public class NPC { scoreboardPackets.forEach(p -> Utils.sendPackets(user, p)); } if (npcIsPlayer) { - if (FunctionFactory.isTrue(this, "mirror")) - updateProfile(user.getGameProfile().getProperties()); + if (FunctionFactory.isTrue(this, "mirror")) updateProfile(user.getGameProfile().getProperties()); Utils.sendPackets(user, this.tabConstructor, this.updateTabConstructor); } Utils.sendPackets(user, this.packets.getProxyInstance().getSpawnPacket(this.nmsEntity, npcIsPlayer)); - if (FunctionFactory.isTrue(this, "holo")) - this.hologram.spawn(user); + if (FunctionFactory.isTrue(this, "holo")) this.hologram.spawn(user); updateMetadata(Collections.singleton(user)); sendEquipPackets(user); lookAt(user, getLocation(), true); @@ -254,16 +230,14 @@ public class NPC { } public synchronized void delete(ZUser user) { - if (!this.viewers.contains(user)) - throw new IllegalStateException(user.getUUID().toString() + " is not a viewer."); + if (!this.viewers.contains(user)) throw new IllegalStateException(user.getUUID().toString() + " is not a viewer."); this.viewers.remove(user); handleDelete(user); } private void handleDelete(ZUser user) { try { - if (this.npcPojo.getNpcType() == NPCType.PLAYER) - this.packets.getProxyInstance().getTabRemovePacket(this.nmsEntity); + if (this.npcPojo.getNpcType() == NPCType.PLAYER) this.packets.getProxyInstance().getTabRemovePacket(this.nmsEntity); this.hologram.delete(user); Utils.sendPackets(user, this.packets.getProxyInstance().getDestroyPacket(this.entityID)); } catch (ReflectiveOperationException operationException) { @@ -273,34 +247,27 @@ public class NPC { public void lookAt(ZUser player, Location location, boolean rotation) { long lastMoveNanos = System.nanoTime() - this.lastMove; - if (this.lastMove > 1L && lastMoveNanos < 1000000000L) - return; + if (this.lastMove > 1L && lastMoveNanos < 1000000000L) return; Location direction = rotation ? location : this.npcPojo.getLocation().bukkitLocation().clone().setDirection(location.clone().subtract(this.npcPojo.getLocation().bukkitLocation().clone()).toVector()); try { Object lookPacket = CacheRegistry.PACKET_PLAY_OUT_ENTITY_LOOK_CONSTRUCTOR.load().newInstance(this.entityID, (byte) (int) (direction.getYaw() * 256.0F / 360.0F), (byte) (int) (direction.getPitch() * 256.0F / 360.0F), true); Object headRotationPacket = CacheRegistry.PACKET_PLAY_OUT_ENTITY_HEAD_ROTATION_CONSTRUCTOR.load().newInstance(this.nmsEntity, (byte) (int) (direction.getYaw() * 256.0F / 360.0F)); - if (player != null) { - Utils.sendPackets(player, lookPacket, headRotationPacket); - } else { - this.viewers.forEach(players -> Utils.sendPackets(players, headRotationPacket)); - } + if (player != null) Utils.sendPackets(player, lookPacket, headRotationPacket); + else this.viewers.forEach(players -> Utils.sendPackets(players, headRotationPacket)); } catch (ReflectiveOperationException operationException) { throw new UnexpectedCallException(operationException); } } public void deleteViewers() { - for (ZUser user : this.viewers) - handleDelete(user); + for (ZUser user : this.viewers) handleDelete(user); this.viewers.clear(); } protected void updateMetadata(Iterable users) { try { Object metaData = this.packets.getProxyInstance().getMetadataPacket(this.entityID, this.nmsEntity); - for (ZUser user : users) { - Utils.sendPackets(user, metaData); - } + for (ZUser user : users) Utils.sendPackets(user, metaData); } catch (ReflectiveOperationException operationException) { operationException.getCause().printStackTrace(); operationException.printStackTrace(); @@ -308,8 +275,7 @@ public class NPC { } public void updateProfile(PropertyMap propertyMap) { - if (this.npcPojo.getNpcType() != NPCType.PLAYER) - return; + if (this.npcPojo.getNpcType() != NPCType.PLAYER) return; try { Object gameProfileObj = CacheRegistry.GET_PROFILE_METHOD.load().invoke(this.nmsEntity); Utils.setValue(gameProfileObj, "name", this.gameProfile.getName()); @@ -321,8 +287,7 @@ public class NPC { } public void sendEquipPackets(ZUser zUser) { - if (this.npcPojo.getNpcEquip().isEmpty()) - return; + if (this.npcPojo.getNpcEquip().isEmpty()) return; try { ImmutableList equipPackets = this.packets.getProxyInstance().getEquipPackets(this); equipPackets.forEach(o -> Utils.sendPackets(zUser, o)); @@ -343,13 +308,12 @@ public class NPC { public void tryStartConversation(Player player) { ConversationModel conversation = this.npcPojo.getConversation(); - if (conversation == null) - throw new IllegalStateException("can't find conversation"); + if (conversation == null) throw new IllegalStateException("can't find conversation"); conversation.startConversation(this, player); } public Location getLocation() { - return (this.npcPath != null) ? + return this.npcPath != null ? this.npcPath.getLocation().bukkitLocation() : this.npcPojo.getLocation().bukkitLocation(); } diff --git a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java index 4466628..92fbbd7 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java +++ b/src/main/java/io/github/znetworkw/znpcservers/npc/task/NPCManagerTask.java @@ -18,8 +18,7 @@ public class NPCManagerTask extends BukkitRunnable { public void run() { for (NPC npc : NPC.all()) { boolean hasPath = (npc.getNpcPath() != null); - if (hasPath) - npc.getNpcPath().handle(); + if (hasPath) npc.getNpcPath().handle(); for (Player player : Bukkit.getOnlinePlayers()) { ZUser zUser = ZUser.find(player); boolean canSeeNPC = (player.getWorld() == npc.getLocation().getWorld() && player.getLocation().distance(npc.getLocation()) <= ConfigurationConstants.VIEW_DISTANCE); @@ -28,14 +27,11 @@ public class NPCManagerTask extends BukkitRunnable { continue; } if (canSeeNPC) { - if (!npc.getViewers().contains(zUser)) - npc.spawn(zUser); - if (FunctionFactory.isTrue(npc, "look") && !hasPath) - npc.lookAt(zUser, player.getLocation(), false); + if (!npc.getViewers().contains(zUser)) npc.spawn(zUser); + if (FunctionFactory.isTrue(npc, "look") && !hasPath) npc.lookAt(zUser, player.getLocation(), false); npc.getHologram().updateNames(zUser); ConversationModel conversationStorage = npc.getNpcPojo().getConversation(); - if (conversationStorage != null && conversationStorage.getConversationType() == ConversationModel.ConversationType.RADIUS) - npc.tryStartConversation(player); + if (conversationStorage != null && conversationStorage.getConversationType() == ConversationModel.ConversationType.RADIUS) npc.tryStartConversation(player); } } } diff --git a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java index c17237c..d7fccf7 100644 --- a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java +++ b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java @@ -30,15 +30,14 @@ import java.util.Collections; public class ZNPCsPlus extends JavaPlugin { public static final File PLUGIN_FOLDER = new File("plugins/ServersNPC"); - public static final File PATH_FOLDER = new File("plugins/ServersNPC/paths"); - public static final Gson GSON = (new GsonBuilder()) + public static final Gson GSON = new GsonBuilder() .registerTypeAdapter(ZLocation.class, ZLocation.SERIALIZER) .registerTypeHierarchyAdapter(ItemStack.class, new ItemStackSerializer()) .setPrettyPrinting() .disableHtmlEscaping() .create(); - private static final int PLUGIN_ID = 8054; + private static final int PLUGIN_ID = 18244; public static SchedulerUtils SCHEDULER; public static BungeeUtils BUNGEE_UTILS; @@ -53,8 +52,7 @@ public class ZNPCsPlus extends JavaPlugin { public static void deleteNPC(int npcID) { NPC npc = NPC.find(npcID); - if (npc == null) - throw new IllegalStateException("can't find npc: " + npcID); + if (npc == null) throw new IllegalStateException("can't find npc: " + npcID); NPC.unregister(npcID); ConfigurationConstants.NPC_LIST.remove(npc.getNpcPojo()); } @@ -82,14 +80,12 @@ public class ZNPCsPlus extends JavaPlugin { } public void loadAllPaths() { - File[] listFiles = PATH_FOLDER.listFiles(); - if (listFiles == null) - return; - for (File file : listFiles) { - if (file.getName().endsWith(".path")) { - NPCPath.AbstractTypeWriter abstractTypeWriter = NPCPath.AbstractTypeWriter.forFile(file, NPCPath.AbstractTypeWriter.TypeWriter.MOVEMENT); - abstractTypeWriter.load(); - } + File[] files = PATH_FOLDER.listFiles(); + if (files == null) return; + for (File file : files) { + if (!file.getName().endsWith(".path")) continue; + NPCPath.AbstractTypeWriter abstractTypeWriter = NPCPath.AbstractTypeWriter.forFile(file, NPCPath.AbstractTypeWriter.TypeWriter.MOVEMENT); + abstractTypeWriter.load(); } } }