From e53e25cd01889ed9d4853f7b816de67c683b9be6 Mon Sep 17 00:00:00 2001 From: SBDeveloper Date: Thu, 4 Aug 2022 19:53:12 +0200 Subject: [PATCH] :art: Code quality improvements --- .../mapreflectionapi/api/MapManager.java | 22 +++--- .../mapreflectionapi/api/MapSender.java | 3 + .../mapreflectionapi/api/MapWrapper.java | 13 ++-- .../events/CreateInventoryMapUpdateEvent.java | 3 +- .../api/events/MapCancelEvent.java | 3 +- .../api/events/MapContentUpdateEvent.java | 7 +- .../api/events/MapInteractEvent.java | 3 +- .../exceptions/MapLimitExceededException.java | 11 +-- .../listeners/PacketListener.java | 72 +++++++++++-------- .../utils/ReflectionUtil.java | 5 +- .../mapreflectionapi/utils/YamlFile.java | 8 +-- 11 files changed, 86 insertions(+), 64 deletions(-) diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapManager.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapManager.java index c1c76b4..2da997a 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapManager.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapManager.java @@ -36,8 +36,8 @@ import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; public class MapManager { - protected final Set OCCUPIED_IDS = new HashSet<>(); - private final List MANAGED_MAPS = new CopyOnWriteArrayList<>(); + protected final Set occupiedIds = new HashSet<>(); + private final List managedMaps = new CopyOnWriteArrayList<>(); /** * Wrap a {@link BufferedImage} in a {@link MapWrapper} @@ -57,7 +57,7 @@ public class MapManager { */ public MapWrapper wrapImage(ArrayImage image) { if (Configuration.getInstance().isImageCache()) { - for (MapWrapper wrapper : MANAGED_MAPS) { + for (MapWrapper wrapper : managedMaps) { if (wrapper.getContent().equals(image)) return wrapper; } } @@ -72,7 +72,7 @@ public class MapManager { */ private MapWrapper wrapNewImage(ArrayImage image) { MapWrapper wrapper = new MapWrapper(image); - MANAGED_MAPS.add(wrapper); + managedMaps.add(wrapper); return wrapper; } @@ -84,7 +84,7 @@ public class MapManager { public void unwrapImage(MapWrapper wrapper) { wrapper.controller.cancelSend(); wrapper.getController().clearViewers(); - MANAGED_MAPS.remove(wrapper); + managedMaps.remove(wrapper); } /** @@ -95,7 +95,7 @@ public class MapManager { */ public Set getMapsVisibleTo(OfflinePlayer player) { Set visible = new HashSet<>(); - for (MapWrapper wrapper : MANAGED_MAPS) { + for (MapWrapper wrapper : managedMaps) { if (wrapper.getController().isViewing(player)) { visible.add(wrapper); } @@ -126,7 +126,7 @@ public class MapManager { * @param id The map ID to register */ public void registerOccupiedID(int id) { - OCCUPIED_IDS.add(id); + occupiedIds.add(id); } /** @@ -135,7 +135,7 @@ public class MapManager { * @param id The map ID to unregister */ public void unregisterOccupiedID(int id) { - OCCUPIED_IDS.remove(id); + occupiedIds.remove(id); } /** @@ -146,7 +146,7 @@ public class MapManager { */ public Set getOccupiedIdsFor(OfflinePlayer player) { Set ids = new HashSet<>(); - for (MapWrapper wrapper : MANAGED_MAPS) { + for (MapWrapper wrapper : managedMaps) { int s = wrapper.getController().getMapId(player); if (s >= 0) { ids.add(s); @@ -176,7 +176,7 @@ public class MapManager { public int getNextFreeIdFor(Player player) throws MapLimitExceededException { Set occupied = getOccupiedIdsFor(player); //Add the 'default' occupied IDs - occupied.addAll(OCCUPIED_IDS); + occupied.addAll(occupiedIds); int largest = 0; for (Integer s : occupied) { @@ -222,7 +222,7 @@ public class MapManager { */ @Nullable public MapWrapper getDuplicate(ArrayImage image) { - for (MapWrapper wrapper : MANAGED_MAPS) { + for (MapWrapper wrapper : managedMaps) { if (image.equals(wrapper.getContent())) { return wrapper; } diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java index c14414a..1a84ef1 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapSender.java @@ -36,6 +36,9 @@ public class MapSender { private static final List sendQueue = new ArrayList<>(); private static int senderID = -1; + private MapSender() { + } + /** * Add a map to the send queue * diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java index 9b24da7..20401dc 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/MapWrapper.java @@ -39,6 +39,7 @@ import tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil; import java.util.*; public class MapWrapper { + private static final String REFERENCE_METADATA = "MAP_WRAPPER_REF"; protected ArrayImage content; /** @@ -246,8 +247,8 @@ public class MapWrapper { Bukkit.getScheduler().runTask(MapReflectionAPI.getInstance(), () -> { ItemFrame frame = getItemFrameById(player.getWorld(), entityId); if (frame != null) { - frame.removeMetadata("MAP_WRAPPER_REF", MapReflectionAPI.getInstance()); - frame.setMetadata("MAP_WRAPPER_REF", new FixedMetadataValue(MapReflectionAPI.getInstance(), MapWrapper.this)); + frame.removeMetadata(REFERENCE_METADATA, MapReflectionAPI.getInstance()); + frame.setMetadata(REFERENCE_METADATA, new FixedMetadataValue(MapReflectionAPI.getInstance(), MapWrapper.this)); } sendItemFramePacket(player, entityId, stack, getMapId(player)); @@ -256,12 +257,16 @@ public class MapWrapper { @Override public void clearFrame(Player player, int entityId) { - + sendItemFramePacket(player, entityId, null, -1); + Bukkit.getScheduler().runTask(MapReflectionAPI.getInstance(), () -> { + ItemFrame frame = getItemFrameById(player.getWorld(), entityId); + if (frame != null) frame.removeMetadata(REFERENCE_METADATA, MapReflectionAPI.getInstance()); + }); } @Override public void clearFrame(Player player, ItemFrame frame) { - + clearFrame(player, frame.getEntityId()); } @Override diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/CreateInventoryMapUpdateEvent.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/CreateInventoryMapUpdateEvent.java index 05c956a..6bab1b4 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/CreateInventoryMapUpdateEvent.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/CreateInventoryMapUpdateEvent.java @@ -32,6 +32,7 @@ import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI; import tech.sbdevelopment.mapreflectionapi.api.MapWrapper; @@ -67,7 +68,7 @@ public class CreateInventoryMapUpdateEvent extends Event implements Cancellable } @Override - public HandlerList getHandlers() { + public @NotNull HandlerList getHandlers() { return handlerList; } diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapCancelEvent.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapCancelEvent.java index 4ab8825..c0d95aa 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapCancelEvent.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapCancelEvent.java @@ -30,6 +30,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; /** * This event gets fired when a map creation is cancelled @@ -58,7 +59,7 @@ public class MapCancelEvent extends Event implements Cancellable { } @Override - public HandlerList getHandlers() { + public @NotNull HandlerList getHandlers() { return handlerList; } } diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapContentUpdateEvent.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapContentUpdateEvent.java index b0f0484..bed0681 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapContentUpdateEvent.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapContentUpdateEvent.java @@ -25,8 +25,10 @@ package tech.sbdevelopment.mapreflectionapi.api.events; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; import tech.sbdevelopment.mapreflectionapi.api.ArrayImage; import tech.sbdevelopment.mapreflectionapi.api.MapWrapper; @@ -40,7 +42,8 @@ public class MapContentUpdateEvent extends Event { private final MapWrapper wrapper; private final ArrayImage content; - private final boolean sendContent = true; + @Setter + private boolean sendContent = true; /** * Construct a new {@link MapContentUpdateEvent} @@ -56,7 +59,7 @@ public class MapContentUpdateEvent extends Event { } @Override - public HandlerList getHandlers() { + public @NotNull HandlerList getHandlers() { return handlerList; } } diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapInteractEvent.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapInteractEvent.java index aad264b..4363806 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapInteractEvent.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/events/MapInteractEvent.java @@ -32,6 +32,7 @@ import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI; import tech.sbdevelopment.mapreflectionapi.api.MapWrapper; @@ -74,7 +75,7 @@ public class MapInteractEvent extends Event implements Cancellable { } @Override - public HandlerList getHandlers() { + public @NotNull HandlerList getHandlers() { return handlerList; } diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/exceptions/MapLimitExceededException.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/exceptions/MapLimitExceededException.java index 47e3510..e783c43 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/api/exceptions/MapLimitExceededException.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/api/exceptions/MapLimitExceededException.java @@ -23,16 +23,11 @@ package tech.sbdevelopment.mapreflectionapi.api.exceptions; +import lombok.experimental.StandardException; + /** * This exception gets thrown if no map IDs are available */ +@StandardException public class MapLimitExceededException extends Exception { - /** - * Construct a new {@link MapLimitExceededException} - * - * @param message The message in this exception - */ - public MapLimitExceededException(String message) { - super(message); - } } diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java index 38621f8..ec9234f 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/listeners/PacketListener.java @@ -45,8 +45,21 @@ public class PacketListener extends PacketAdapter { @Override public void onPacketSending(PacketEvent event) { - if (event.getPacketType() != PacketType.Play.Server.MAP) return; //Make sure it's the right packet! + if (event.getPacketType() == PacketType.Play.Server.MAP) { + handleOUTMapPacket(event); + } + } + @Override + public void onPacketReceiving(PacketEvent event) { + if (event.getPacketType() == PacketType.Play.Client.USE_ENTITY) { + handleINUseEntityPacket(event); + } else if (event.getPacketType() == PacketType.Play.Client.SET_CREATIVE_SLOT) { + handleINSetCreativeSlotPacket(event); + } + } + + private void handleOUTMapPacket(PacketEvent event) { int id = event.getPacket().getIntegers().read(0); //Read first int (a); that's the MAP id if (id < 0) { @@ -64,37 +77,36 @@ public class PacketListener extends PacketAdapter { } } - @Override - public void onPacketReceiving(PacketEvent event) { - if (event.getPacketType() == PacketType.Play.Client.USE_ENTITY) { - int entityId = event.getPacket().getIntegers().read(0); //entityId - WrappedEnumEntityUseAction action = event.getPacket().getEnumEntityUseActions().read(0); - EnumWrappers.EntityUseAction actionEnum = null; - EnumWrappers.Hand hand = null; - Vector pos = null; - try { - actionEnum = action.getAction(); - hand = action.getHand(); - pos = action.getPosition(); - } catch (IllegalArgumentException ignored) { - } + private void handleINUseEntityPacket(PacketEvent event) { + int entityId = event.getPacket().getIntegers().read(0); //entityId + WrappedEnumEntityUseAction action = event.getPacket().getEnumEntityUseActions().read(0); + EnumWrappers.EntityUseAction actionEnum = null; + EnumWrappers.Hand hand = null; + Vector pos = null; + try { + actionEnum = action.getAction(); + hand = action.getHand(); + pos = action.getPosition(); + } catch (IllegalArgumentException ignored) { + } - boolean async = !plugin.getServer().isPrimaryThread(); - MapInteractEvent interactEvent = new MapInteractEvent(event.getPlayer(), entityId, actionEnum != null ? actionEnum.ordinal() : 0, pos, hand != null ? hand.ordinal() : 0, async); - if (interactEvent.getFrame() != null && interactEvent.getMapWrapper() != null) { - Bukkit.getPluginManager().callEvent(interactEvent); - if (interactEvent.isCancelled()) event.setCancelled(true); - } - } else if (event.getPacketType() == PacketType.Play.Client.SET_CREATIVE_SLOT) { - int slot = event.getPacket().getIntegers().read(0); - ItemStack item = event.getPacket().getItemModifier().read(0); + boolean async = !plugin.getServer().isPrimaryThread(); + MapInteractEvent interactEvent = new MapInteractEvent(event.getPlayer(), entityId, actionEnum != null ? actionEnum.ordinal() : 0, pos, hand != null ? hand.ordinal() : 0, async); + if (interactEvent.getFrame() != null && interactEvent.getMapWrapper() != null) { + Bukkit.getPluginManager().callEvent(interactEvent); + if (interactEvent.isCancelled()) event.setCancelled(true); + } + } - boolean async = !plugin.getServer().isPrimaryThread(); - CreateInventoryMapUpdateEvent updateEvent = new CreateInventoryMapUpdateEvent(event.getPlayer(), slot, item, async); - if (updateEvent.getMapWrapper() != null) { - Bukkit.getPluginManager().callEvent(updateEvent); - if (updateEvent.isCancelled()) event.setCancelled(true); - } + private void handleINSetCreativeSlotPacket(PacketEvent event) { + int slot = event.getPacket().getIntegers().read(0); + ItemStack item = event.getPacket().getItemModifier().read(0); + + boolean async = !plugin.getServer().isPrimaryThread(); + CreateInventoryMapUpdateEvent updateEvent = new CreateInventoryMapUpdateEvent(event.getPlayer(), slot, item, async); + if (updateEvent.getMapWrapper() != null) { + Bukkit.getPluginManager().callEvent(updateEvent); + if (updateEvent.isCancelled()) event.setCancelled(true); } } } diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java index a0473c0..e4c7965 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/ReflectionUtil.java @@ -146,7 +146,10 @@ public class ReflectionUtil { Class playerConnection = getNMSClass("server.network", "PlayerConnection"); MethodHandles.Lookup lookup = MethodHandles.lookup(); - MethodHandle sendPacket = null, getHandle = null, getHandleWorld = null, connection = null; + MethodHandle sendPacket = null; + MethodHandle getHandle = null; + MethodHandle getHandleWorld = null; + MethodHandle connection = null; try { connection = lookup.findGetter(entityPlayer, diff --git a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/YamlFile.java b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/YamlFile.java index 87c3378..47bf64f 100644 --- a/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/YamlFile.java +++ b/src/main/java/tech/sbdevelopment/mapreflectionapi/utils/YamlFile.java @@ -40,11 +40,9 @@ public class YamlFile { this.plugin = plugin; this.name = name; - if (!plugin.getDataFolder().exists()) { - if (!plugin.getDataFolder().mkdir()) { - plugin.getLogger().severe("Couldn't generate the pluginfolder!"); - return; - } + if (!plugin.getDataFolder().exists() && !plugin.getDataFolder().mkdir()) { + plugin.getLogger().severe("Couldn't generate the pluginfolder!"); + return; } this.file = new File(plugin.getDataFolder(), name + ".yml");