From ae1baad7859e9dd5309781279ce674b99007b55f Mon Sep 17 00:00:00 2001 From: Gregory Mitchell <54124162+gmitch215@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:40:04 -0500 Subject: [PATCH] Optimizations, Small Bug Fixes - Remove Unused Code - Small Bug Fixes - Improve Maintainability - Fix NBTSection1_20_R4 on 1.20.5 --- .../mobchip/abstraction/ChipUtil.java | 9 +- .../mobchip/ai/behavior/BehaviorResult.java | 4 +- .../mobchip/ai/goal/PathfinderBeg.java | 1 + .../mobchip/ai/goal/PathfinderTempt.java | 6 +- .../me/gamercoder215/mobchip/bosses/Boss.java | 9 +- .../gamercoder215/mobchip/util/Position.java | 14 ++- .../mobchip/bukkit/BukkitBrain.java | 8 +- .../mobchip/bukkit/events/BrainEvent.java | 7 +- .../v1_14_R1/AnimalPanic1_14_R1.java | 4 +- .../v1_15_R1/AnimalPanic1_15_R1.java | 4 +- .../v1_16_R1/AnimalPanic1_16_R1.java | 4 +- .../v1_16_R2/AnimalPanic1_16_R2.java | 4 +- .../v1_20_R4/NBTSection1_20_R4.java | 86 ++++++++++--------- 13 files changed, 87 insertions(+), 73 deletions(-) diff --git a/abstraction/src/main/java/me/gamercoder215/mobchip/abstraction/ChipUtil.java b/abstraction/src/main/java/me/gamercoder215/mobchip/abstraction/ChipUtil.java index 972c4a802..2991062db 100644 --- a/abstraction/src/main/java/me/gamercoder215/mobchip/abstraction/ChipUtil.java +++ b/abstraction/src/main/java/me/gamercoder215/mobchip/abstraction/ChipUtil.java @@ -54,7 +54,7 @@ default void clearPathfinders(Mob mob, boolean target) { getGoals(mob, target).forEach(w -> removePathfinder(w.getPathfinder(), target)); } - default void addPathfinders(Collection c, boolean target) { + default void addPathfinders(Collection c, boolean target) { for (WrappedPathfinder p : c) addPathfinder(p.getPathfinder(), p.getPriority(), target); } @@ -178,7 +178,7 @@ static Class[] getArgTypes(Object... args) { return types; } - static String bukkitToCraftBukkkit() { + static String bukkitToCraftBukkit() { String bukkit = Bukkit.getServer().getBukkitVersion().split("-")[0]; switch (bukkit) { case "1.20.1": @@ -200,7 +200,7 @@ static String getServerVersion() { return Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3].substring(1); } catch (IndexOutOfBoundsException e) { // Using CraftBukkit Relocation - return bukkitToCraftBukkkit(); + return bukkitToCraftBukkit(); } } @@ -219,7 +219,8 @@ static ChipUtil getWrapper() { static void printStackTrace(Throwable e) { Bukkit.getLogger().severe(e.getClass().getName() + ": " + e.getMessage()); - for (StackTraceElement s : e.getStackTrace()) Bukkit.getLogger().severe(" " + s.toString()); + for (StackTraceElement s : e.getStackTrace()) + Bukkit.getLogger().severe(s.toString()); if (e.getCause() != null) { Bukkit.getLogger().severe("Caused by:"); printStackTrace(e.getCause()); diff --git a/base/src/main/java/me/gamercoder215/mobchip/ai/behavior/BehaviorResult.java b/base/src/main/java/me/gamercoder215/mobchip/ai/behavior/BehaviorResult.java index c465ec06b..5c096cc0b 100644 --- a/base/src/main/java/me/gamercoder215/mobchip/ai/behavior/BehaviorResult.java +++ b/base/src/main/java/me/gamercoder215/mobchip/ai/behavior/BehaviorResult.java @@ -16,7 +16,9 @@ public abstract class BehaviorResult { return Status.STOPPED; } @Override - public void stop() {} + public void stop() { + // Do nothing + } }; /** diff --git a/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderBeg.java b/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderBeg.java index 73ef67a29..ea4ea67f0 100644 --- a/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderBeg.java +++ b/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderBeg.java @@ -25,6 +25,7 @@ public PathfinderBeg(@NotNull Wolf w) { */ public PathfinderBeg(@NotNull Wolf w, float lookRange) { super(w); + this.lookRange = lookRange; } @Override diff --git a/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderTempt.java b/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderTempt.java index 22ad6d173..88500df29 100644 --- a/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderTempt.java +++ b/base/src/main/java/me/gamercoder215/mobchip/ai/goal/PathfinderTempt.java @@ -118,8 +118,10 @@ public void setItems(@NotNull Iterable items) throws Illega * @param items Array of Items to use * @throws IllegalArgumentException if Items are null or empty */ - public void setItems(@NotNull ItemStack... items) throws IllegalArgumentException - { if (items == null) throw new IllegalArgumentException("Items cannot be null"); setItems(Arrays.asList(items)); } + public void setItems(@NotNull ItemStack... items) throws IllegalArgumentException { + if (items == null) throw new IllegalArgumentException("Items cannot be null"); + setItems(Arrays.asList(items)); + } @Override public double getSpeedModifier() { diff --git a/base/src/main/java/me/gamercoder215/mobchip/bosses/Boss.java b/base/src/main/java/me/gamercoder215/mobchip/bosses/Boss.java index be2f23550..ee087dde2 100644 --- a/base/src/main/java/me/gamercoder215/mobchip/bosses/Boss.java +++ b/base/src/main/java/me/gamercoder215/mobchip/bosses/Boss.java @@ -21,10 +21,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; /** * Represents a Boss Entity. @@ -51,7 +48,7 @@ public abstract class Boss { private float pitch; private double health = DEFAULT_HEALTH; - private final Map equipment = new HashMap<>(); + private final Map equipment = new EnumMap<>(EquipmentSlot.class); private final Map attributes = new HashMap<>(); @@ -237,7 +234,7 @@ public void run() { Bukkit.getLogger().severe(e.getCause().getMessage()); for (StackTraceElement s : e.getCause().getStackTrace()) Bukkit.getLogger().severe(s.toString()); } catch (Exception e) { - Bukkit.getLogger().severe(e.getMessage()); + Bukkit.getLogger().severe(e.getMessage()); for (StackTraceElement s : e.getStackTrace()) Bukkit.getLogger().severe(s.toString()); } } diff --git a/base/src/main/java/me/gamercoder215/mobchip/util/Position.java b/base/src/main/java/me/gamercoder215/mobchip/util/Position.java index 2df942004..6e9201c0d 100644 --- a/base/src/main/java/me/gamercoder215/mobchip/util/Position.java +++ b/base/src/main/java/me/gamercoder215/mobchip/util/Position.java @@ -87,11 +87,11 @@ public double distance(@NotNull Entity en) { * @return distance squared */ public double distanceSquared(@NotNull Position node) { - double x = this.x - node.x; - double y = this.y - node.y; - double z = this.z - node.z; + int x = this.x - node.x; + int y = this.y - node.y; + int z = this.z - node.z; - return x * x + y * y + z * z; + return (x * x) + (y * y) + (z * z); } /** @@ -309,10 +309,6 @@ public Position setZ(int z) { @Override public Position clone() { - try { - return (Position) super.clone(); - } catch (CloneNotSupportedException e) { - throw new Error(e); - } + return new Position(x, y, z); } } diff --git a/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/BukkitBrain.java b/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/BukkitBrain.java index 4dc90c042..d1dc57cac 100644 --- a/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/BukkitBrain.java +++ b/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/BukkitBrain.java @@ -259,7 +259,9 @@ public EntityBehavior getBehaviors() { * @param Memory Type */ @Override - public void setMemory(@NotNull Memory memory, @NotNull T value) throws IllegalArgumentException { + public void setMemory(@NotNull Memory memory, @Nullable T value) throws IllegalArgumentException { + if (value == null) removeMemory(memory); + Object old = getMemory(memory); w.setMemory(m, memory, value); @@ -278,7 +280,9 @@ public void setMemory(@NotNull Memory memory, @NotNull T value) throws Il * @param Memory Type */ @Override - public void setMemory(@NotNull Memory memory, @NotNull T value, long expire) throws IllegalArgumentException { + public void setMemory(@NotNull Memory memory, @Nullable T value, long expire) throws IllegalArgumentException { + if (value == null) removeMemory(memory); + Object old = getMemory(memory); w.setMemory(m, memory, value, expire); diff --git a/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/events/BrainEvent.java b/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/events/BrainEvent.java index e69bf0188..29d53e56d 100644 --- a/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/events/BrainEvent.java +++ b/bukkit/src/main/java/me/gamercoder215/mobchip/bukkit/events/BrainEvent.java @@ -1,11 +1,10 @@ package me.gamercoder215.mobchip.bukkit.events; +import me.gamercoder215.mobchip.EntityBrain; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; -import me.gamercoder215.mobchip.EntityBrain; - /** * Represents an Event related to the Brain */ @@ -18,7 +17,7 @@ public abstract class BrainEvent extends Event { * Construct a BrainEvent * @param brain EntityBrain involved */ - public BrainEvent(@NotNull EntityBrain brain) { + protected BrainEvent(@NotNull EntityBrain brain) { this.brain = brain; } @@ -27,7 +26,7 @@ public BrainEvent(@NotNull EntityBrain brain) { * @param brain EntityBrain involved * @param async true if async, else false */ - public BrainEvent(@NotNull EntityBrain brain, boolean async) { + protected BrainEvent(@NotNull EntityBrain brain, boolean async) { super(async); this.brain = brain; diff --git a/nms/1_14_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_14_R1/AnimalPanic1_14_R1.java b/nms/1_14_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_14_R1/AnimalPanic1_14_R1.java index 4230e3a1c..218a30bae 100644 --- a/nms/1_14_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_14_R1/AnimalPanic1_14_R1.java +++ b/nms/1_14_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_14_R1/AnimalPanic1_14_R1.java @@ -27,7 +27,9 @@ protected void start(WorldServer w, EntityCreature c, long var2) { c.getBehaviorController().removeMemory(MemoryModuleType.WALK_TARGET); } - protected void stop(WorldServer w, EntityCreature c, long var2) {} + protected void stop(WorldServer w, EntityCreature c, long var2) { + // Do nothing + } protected void tick(WorldServer w, EntityCreature c, long var2) { if (c.getNavigation().n()) { diff --git a/nms/1_15_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_15_R1/AnimalPanic1_15_R1.java b/nms/1_15_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_15_R1/AnimalPanic1_15_R1.java index 97dad9edc..ddefe4593 100644 --- a/nms/1_15_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_15_R1/AnimalPanic1_15_R1.java +++ b/nms/1_15_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_15_R1/AnimalPanic1_15_R1.java @@ -27,7 +27,9 @@ protected void start(WorldServer w, EntityCreature c, long var2) { c.getBehaviorController().removeMemory(MemoryModuleType.WALK_TARGET); } - protected void stop(WorldServer w, EntityCreature c, long var2) {} + protected void stop(WorldServer w, EntityCreature c, long var2) { + // Do nothing + } protected void tick(WorldServer w, EntityCreature c, long var2) { if (c.getNavigation().m()) { diff --git a/nms/1_16_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R1/AnimalPanic1_16_R1.java b/nms/1_16_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R1/AnimalPanic1_16_R1.java index 1aad5bc4c..c9df5f77c 100644 --- a/nms/1_16_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R1/AnimalPanic1_16_R1.java +++ b/nms/1_16_R1/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R1/AnimalPanic1_16_R1.java @@ -25,7 +25,9 @@ protected void start(WorldServer w, EntityCreature c, long var2) { c.getBehaviorController().removeMemory(MemoryModuleType.WALK_TARGET); } - protected void stop(WorldServer w, EntityCreature c, long var2) {} + protected void stop(WorldServer w, EntityCreature c, long var2) { + // Do nothing + } protected void tick(WorldServer w, EntityCreature c, long var2) { if (c.getNavigation().m()) { diff --git a/nms/1_16_R2/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R2/AnimalPanic1_16_R2.java b/nms/1_16_R2/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R2/AnimalPanic1_16_R2.java index 9615ba84a..b4e361a97 100644 --- a/nms/1_16_R2/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R2/AnimalPanic1_16_R2.java +++ b/nms/1_16_R2/src/main/java/me/gamercoder215/mobchip/abstraction/v1_16_R2/AnimalPanic1_16_R2.java @@ -25,7 +25,9 @@ protected void start(WorldServer w, EntityCreature c, long var2) { c.getBehaviorController().removeMemory(MemoryModuleType.WALK_TARGET); } - protected void stop(WorldServer w, EntityCreature c, long var2) {} + protected void stop(WorldServer w, EntityCreature c, long var2) { + // Do nothing + } protected void tick(WorldServer w, EntityCreature c, long var2) { if (c.getNavigation().m()) { diff --git a/nms/1_20_R4/src/main/java/me/gamercoder215/mobchip/abstraction/v1_20_R4/NBTSection1_20_R4.java b/nms/1_20_R4/src/main/java/me/gamercoder215/mobchip/abstraction/v1_20_R4/NBTSection1_20_R4.java index 45979dbfa..30a11d875 100644 --- a/nms/1_20_R4/src/main/java/me/gamercoder215/mobchip/abstraction/v1_20_R4/NBTSection1_20_R4.java +++ b/nms/1_20_R4/src/main/java/me/gamercoder215/mobchip/abstraction/v1_20_R4/NBTSection1_20_R4.java @@ -6,7 +6,8 @@ import net.minecraft.nbt.*; import org.bukkit.*; import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.craftbukkit.v1_20_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_20_R4.CraftRegistry; +import org.bukkit.craftbukkit.v1_20_R4.inventory.CraftItemStack; import org.bukkit.entity.Mob; import org.bukkit.inventory.ItemStack; import org.bukkit.util.EulerAngle; @@ -50,48 +51,49 @@ static Tag serialize(Object v) { return tag; } - if (v instanceof Collection) { - List collection = new ArrayList<>((Collection) v); - CompoundTag coll = new CompoundTag(); + switch (v) { + case Collection objects -> { + List collection = new ArrayList<>(objects); + CompoundTag coll = new CompoundTag(); - try { - coll.putString(ChipUtil.CLASS_TAG, Collection.class.getName()); - ListTag tag = new ListTag(); - for (int i = 0; i < collection.size(); i++) tag.add(i, serialize(collection.get(i))); - coll.put("values", tag); - - Field idF = ListTag.class.getDeclaredField("w"); - idF.setAccessible(true); + try { + coll.putString(ChipUtil.CLASS_TAG, Collection.class.getName()); + ListTag tag = new ListTag(); + for (int i = 0; i < collection.size(); i++) tag.add(i, serialize(collection.get(i))); + coll.put("values", tag); + + Field idF = ListTag.class.getDeclaredField("w"); + idF.setAccessible(true); + + coll.putByte("id", idF.getByte(tag)); + } catch (ReflectiveOperationException e) { + Bukkit.getLogger().severe("Failed to serialize collection: " + e.getMessage()); + for (StackTraceElement ste : e.getStackTrace()) Bukkit.getLogger().severe(ste.toString()); + } - coll.putByte("id", idF.getByte(tag)); - } catch (ReflectiveOperationException e) { - Bukkit.getLogger().severe("Failed to serialize collection: " + e.getMessage()); - for (StackTraceElement ste : e.getStackTrace()) Bukkit.getLogger().severe(ste.toString()); + return coll; } - - return coll; - } - - if (v instanceof Map map) { - CompoundTag tag = new CompoundTag(); - for (Map.Entry entry : map.entrySet()) { - tag.put(entry.getKey().toString(), serialize(entry.getValue())); + case Map map -> { + CompoundTag tag = new CompoundTag(); + for (Map.Entry entry : map.entrySet()) { + tag.put(entry.getKey().toString(), serialize(entry.getValue())); + } + return tag; + } + case Enum enumeration -> { + CompoundTag tag = new CompoundTag(); + tag.putString(ChipUtil.CLASS_TAG, enumeration.getClass().getName()); + tag.putString("value", ((Enum) v).name()); + return tag; + } + case ConfigurationSerializable serializable -> { + CompoundTag tag = new CompoundTag(); + tag.putString(ChipUtil.CLASS_TAG, serializable.getClass().getName()); + tag.put("value", serialize(serializable.serialize())); + return tag; + } + default -> { } - return tag; - } - - if (v instanceof Enum enumeration) { - CompoundTag tag = new CompoundTag(); - tag.putString(ChipUtil.CLASS_TAG, enumeration.getClass().getName()); - tag.putString("value", ((Enum) v).name()); - return tag; - } - - if (v instanceof ConfigurationSerializable serializable) { - CompoundTag tag = new CompoundTag(); - tag.putString(ChipUtil.CLASS_TAG, serializable.getClass().getName()); - tag.put("value", serialize(serializable.serialize())); - return tag; } return switch (v.getClass().getSimpleName().toLowerCase()) { @@ -121,7 +123,7 @@ static Tag serialize(Object v) { ItemStack item = (ItemStack) v; CompoundTag stack = new CompoundTag(); stack.putString(ChipUtil.CLASS_TAG, item.getClass().getName()); - stack.put("item", CraftItemStack.asNMSCopy(item).getOrCreateTag()); + stack.put("item", CraftItemStack.asNMSCopy(item).saveOptional(CraftRegistry.getMinecraftRegistry())); yield stack; } @@ -238,7 +240,9 @@ static Object deserialize(Tag v) { } case "itemstack" -> { CompoundTag item = cmp.getCompound("item"); - yield CraftItemStack.asBukkitCopy(net.minecraft.world.item.ItemStack.of(item)); + Optional stack = net.minecraft.world.item.ItemStack.parse(CraftRegistry.getMinecraftRegistry(), item) + .map(CraftItemStack::asBukkitCopy); + yield stack.orElse(null); } case "location" -> { String world = cmp.getString("world");