From 5f5fd36fd1f429d111ead117c69202c3f74d9c26 Mon Sep 17 00:00:00 2001 From: Aya <31237389+tal5@users.noreply.github.com> Date: Thu, 1 Sep 2022 13:45:23 +0300 Subject: [PATCH] Entity Helper Cleanup (#2369) * Entity Helper Cleanup * Fixes from review --- .../player/PlayerFishesScriptEvent.java | 7 +- .../denizen/nms/interfaces/EntityHelper.java | 118 +++----------- .../denizen/nms/util/BoundingBox.java | 32 ---- .../denizen/npc/traits/SleepingTrait.java | 5 +- .../denizen/objects/EntityTag.java | 33 ++-- .../denizen/objects/PlayerTag.java | 18 ++- .../properties/entity/EntityBodyArrows.java | 7 +- .../properties/entity/EntityBoundingBox.java | 13 +- .../properties/entity/EntityPickupStatus.java | 12 +- .../properties/entity/EntityShulkerPeek.java | 12 +- .../properties/entity/EntitySpeed.java | 7 +- .../denizen/utilities/Utilities.java | 19 ++- .../nms/v1_16/helpers/EntityHelperImpl.java | 122 +-------------- .../nms/v1_17/helpers/EntityHelperImpl.java | 139 ++--------------- .../nms/v1_18/helpers/EntityHelperImpl.java | 141 ++--------------- .../nms/v1_19/helpers/EntityHelperImpl.java | 147 ++---------------- 16 files changed, 142 insertions(+), 690 deletions(-) delete mode 100644 plugin/src/main/java/com/denizenscript/denizen/nms/util/BoundingBox.java diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerFishesScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerFishesScriptEvent.java index 9346275639..59a7497326 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerFishesScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerFishesScriptEvent.java @@ -1,12 +1,11 @@ package com.denizenscript.denizen.events.player; +import com.denizenscript.denizen.events.BukkitScriptEvent; import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.objects.ItemTag; import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; -import com.denizenscript.denizen.events.BukkitScriptEvent; -import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.scripts.ScriptEntryData; import com.denizenscript.denizencore.utilities.CoreUtilities; import org.bukkit.Material; @@ -157,7 +156,7 @@ public void onPlayerFishes(PlayerFishEvent event) { if (EntityTag.isNPC(event.getPlayer())) { return; } - Entity hookEntity = NMSHandler.entityHelper.getFishHook(event); + Entity hookEntity = event.getHook(); EntityTag.rememberEntity(hookEntity); hook = new EntityTag(hookEntity); state = new ElementTag(event.getState().toString()); diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java index 5825991ad3..58a9d677c2 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java +++ b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java @@ -1,12 +1,11 @@ package com.denizenscript.denizen.nms.interfaces; -import com.denizenscript.denizen.nms.util.BoundingBox; +import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.objects.LocationTag; import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.core.MapTag; -import com.denizenscript.denizencore.utilities.debugging.Debug; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -17,63 +16,32 @@ import org.bukkit.entity.*; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.MapMeta; +import org.bukkit.util.BoundingBox; import org.bukkit.util.RayTraceResult; import org.bukkit.util.Vector; -import java.util.*; +import java.util.List; +import java.util.UUID; public abstract class EntityHelper { - public void setInvisible(Entity entity, boolean invisible) { - // Do nothing on older versions - } - - public boolean isInvisible(Entity entity) { - throw new UnsupportedOperationException(); - } - - public abstract double getAbsorption(LivingEntity entity); + public abstract void setInvisible(Entity entity, boolean invisible); - public abstract void setAbsorption(LivingEntity entity, double value); + public abstract boolean isInvisible(Entity entity); - public abstract void setSneaking(Entity player, boolean sneak); + public abstract void setPose(Entity entity, Pose pose); - public void setSleeping(Entity player, boolean sleep) { - throw new UnsupportedOperationException(); + public void setSneaking(Entity player, boolean sneak) { + if (player instanceof Player) { + ((Player) player).setSneaking(sneak); + } + NMSHandler.entityHelper.setPose(player, sneak ? Pose.SNEAKING : Pose.STANDING); } public abstract double getDamageTo(LivingEntity attacker, Entity target); - public abstract String getRawHoverText(Entity entity); - - public List getDiscoveredRecipes(Player player) { - throw new UnsupportedOperationException(); - } - - public void setRiptide(Entity entity, boolean state) { - Debug.echoError("Riptide control not available on this server version."); - } - - public int getBodyArrows(Entity entity) { - return ((LivingEntity) entity).getArrowsInBody(); - } - - public void setBodyArrows(Entity entity, int numArrows) { - ((LivingEntity) entity).setArrowsInBody(numArrows); - } - - public abstract String getArrowPickupStatus(Entity entity); - - public abstract void setArrowPickupStatus(Entity entity, String status); - - public abstract Entity getFishHook(PlayerFishEvent event); - - public abstract ItemStack getItemFromTrident(Entity entity); - - public abstract void setItemForTrident(Entity entity, ItemStack item); + public abstract void setRiptide(Entity entity, boolean state); public abstract void forceInteraction(Player player, Location location); @@ -89,10 +57,6 @@ public void setBodyArrows(Entity entity, int numArrows) { public abstract void stopWalking(Entity entity); - public abstract double getSpeed(Entity entity); - - public abstract void setSpeed(Entity entity, double speed); - public abstract void follow(final Entity target, final Entity follower, final double speed, final double lead, final double maxRange, final boolean allowWander, final boolean teleport); @@ -408,41 +372,23 @@ public void clientResetLoc(Entity entity) { public abstract void teleport(Entity entity, Location loc); - public abstract BoundingBox getBoundingBox(Entity entity); + public abstract void setBoundingBox(Entity entity, BoundingBox box); - public abstract void setBoundingBox(Entity entity, BoundingBox boundingBox); - - public List getPlayersThatSee(Entity entity) { - throw new UnsupportedOperationException(); - } + public abstract List getPlayersThatSee(Entity entity); public void sendAllUpdatePackets(Entity entity) { throw new UnsupportedOperationException(); } - public void setTicksLived(Entity entity, int ticks) { - entity.setTicksLived(ticks); - } - - public int getShulkerPeek(Entity entity) { - throw new UnsupportedOperationException(); - } + public abstract void setTicksLived(Entity entity, int ticks); - public void setShulkerPeek(Entity entity, int peek) { - throw new UnsupportedOperationException(); - } + public abstract void setHeadAngle(Entity entity, float angle); - public void setHeadAngle(Entity entity, float angle) { - throw new UnsupportedOperationException(); + public void setGhastAttacking(Entity entity, boolean attacking) { // TODO: once minimum version is 1.19 or higher, remove from NMS + ((Ghast) entity).setCharging(attacking); } - public void setGhastAttacking(Entity entity, boolean attacking) { - throw new UnsupportedOperationException(); - } - - public void setEndermanAngry(Entity entity, boolean angry) { - throw new UnsupportedOperationException(); - } + public abstract void setEndermanAngry(Entity entity, boolean angry); public static EntityDamageEvent fireFakeDamageEvent(Entity target, Entity source, EntityDamageEvent.DamageCause cause, float amount) { EntityDamageEvent ede = source == null ? new EntityDamageEvent(target, cause, amount) : new EntityDamageByEntityEvent(source, target, cause, amount); @@ -450,29 +396,7 @@ public static EntityDamageEvent fireFakeDamageEvent(Entity target, Entity source return ede; } - public void damage(LivingEntity target, float amount, Entity source, EntityDamageEvent.DamageCause cause) { - if (cause == null) { - if (source == null) { - target.damage(amount); - } - else { - target.damage(amount, source); - } - } - else { - EntityDamageEvent ede = fireFakeDamageEvent(target, source, cause, amount); - if (!ede.isCancelled()) { - target.setLastDamageCause(ede); - if (source == null) { - target.damage(ede.getFinalDamage()); - } - else { - target.damage(ede.getFinalDamage(), source); - } - target.setLastDamageCause(ede); - } - } - } + public abstract void damage(LivingEntity target, float amount, Entity source, EntityDamageEvent.DamageCause cause); public void setLastHurtBy(LivingEntity mob, LivingEntity damager) { throw new UnsupportedOperationException(); diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/util/BoundingBox.java b/plugin/src/main/java/com/denizenscript/denizen/nms/util/BoundingBox.java deleted file mode 100644 index ec62228d97..0000000000 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/util/BoundingBox.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.denizenscript.denizen.nms.util; - -import org.bukkit.util.Vector; - -public class BoundingBox { - - private Vector low; - private Vector high; - - public BoundingBox(Vector location, Vector size) { - this.low = location; - this.high = size; - } - - public Vector getLow() { - return low; - } - - public Vector getHigh() { - return high; - } - - public double distanceSquared(Vector point) { - double x = Math.max(low.getX(), Math.min(point.getX(), high.getX())); - double y = Math.max(low.getY(), Math.min(point.getY(), high.getY())); - double z = Math.max(low.getZ(), Math.min(point.getZ(), high.getZ())); - double xOff = x - point.getX(); - double yOff = y - point.getY(); - double zOff = z - point.getZ(); - return xOff * xOff + yOff * yOff + zOff * zOff; - } -} diff --git a/plugin/src/main/java/com/denizenscript/denizen/npc/traits/SleepingTrait.java b/plugin/src/main/java/com/denizenscript/denizen/npc/traits/SleepingTrait.java index 56bdab42c5..7e1fd595d8 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/npc/traits/SleepingTrait.java +++ b/plugin/src/main/java/com/denizenscript/denizen/npc/traits/SleepingTrait.java @@ -13,6 +13,7 @@ import org.bukkit.block.data.type.Bed; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Pose; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.block.BlockBreakEvent; @@ -59,7 +60,7 @@ else if (npc.getEntity() instanceof Player) { } else { if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17)) { - NMSHandler.entityHelper.setSleeping(npc.getEntity(), true); + NMSHandler.entityHelper.setPose(npc.getEntity(), Pose.SLEEPING); } else { PlayerAnimation.SLEEP.play((Player) npc.getEntity()); @@ -130,7 +131,7 @@ public void wakeUp() { ((Player) npc.getEntity()).wakeup(false); } if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17)) { - NMSHandler.entityHelper.setSleeping(npc.getEntity(), false); + NMSHandler.entityHelper.setPose(npc.getEntity(), Pose.STANDING); } else { PlayerAnimation.STOP_SLEEPING.play((Player) npc.getEntity()); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java index 44e89f8a6c..8b07a1cc68 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java @@ -1,7 +1,12 @@ package com.denizenscript.denizen.objects; +import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.nms.NMSVersion; +import com.denizenscript.denizen.nms.abstracts.ProfileEditor; import com.denizenscript.denizen.nms.interfaces.EntityAnimation; +import com.denizenscript.denizen.nms.interfaces.FakePlayer; import com.denizenscript.denizen.nms.interfaces.PlayerHelper; +import com.denizenscript.denizen.npc.traits.MirrorTrait; import com.denizenscript.denizen.objects.properties.entity.EntityAge; import com.denizenscript.denizen.objects.properties.entity.EntityColor; import com.denizenscript.denizen.objects.properties.entity.EntityTame; @@ -12,7 +17,10 @@ import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.VanillaTagHelper; import com.denizenscript.denizen.utilities.depends.Depends; -import com.denizenscript.denizen.utilities.entity.*; +import com.denizenscript.denizen.utilities.entity.DenizenEntityType; +import com.denizenscript.denizen.utilities.entity.EntityAttachmentHelper; +import com.denizenscript.denizen.utilities.entity.FakeEntity; +import com.denizenscript.denizen.utilities.entity.HideEntitiesHelper; import com.denizenscript.denizen.utilities.flags.DataPersistenceFlagTracker; import com.denizenscript.denizen.utilities.nbt.CustomNBT; import com.denizenscript.denizencore.DenizenCore; @@ -20,20 +28,16 @@ import com.denizenscript.denizencore.flags.AbstractFlagTracker; import com.denizenscript.denizencore.flags.FlaggableObject; import com.denizenscript.denizencore.objects.*; -import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizen.nms.abstracts.ProfileEditor; -import com.denizenscript.denizen.nms.interfaces.FakePlayer; -import com.denizenscript.denizen.npc.traits.MirrorTrait; import com.denizenscript.denizencore.objects.core.*; -import com.denizenscript.denizencore.tags.ObjectTagProcessor; -import com.denizenscript.denizencore.tags.TagRunnable; -import com.denizenscript.denizencore.utilities.CoreConfiguration; -import com.denizenscript.denizencore.utilities.debugging.Debug; import com.denizenscript.denizencore.objects.properties.PropertyParser; import com.denizenscript.denizencore.scripts.ScriptRegistry; import com.denizenscript.denizencore.tags.Attribute; +import com.denizenscript.denizencore.tags.ObjectTagProcessor; import com.denizenscript.denizencore.tags.TagContext; +import com.denizenscript.denizencore.tags.TagRunnable; +import com.denizenscript.denizencore.utilities.CoreConfiguration; import com.denizenscript.denizencore.utilities.CoreUtilities; +import com.denizenscript.denizencore.utilities.debugging.Debug; import com.denizenscript.denizencore.utilities.text.StringHolder; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; @@ -43,10 +47,13 @@ import org.bukkit.block.BlockFace; import org.bukkit.entity.*; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.*; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Merchant; import org.bukkit.loot.LootTable; import org.bukkit.loot.Lootable; -import org.bukkit.potion.*; +import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; import org.bukkit.util.RayTraceResult; import org.bukkit.util.Vector; @@ -2050,7 +2057,7 @@ else if (object.getBukkitEntity() instanceof Villager) { // Returns the living entity's absorption health. // --> registerSpawnedOnlyTag(ElementTag.class, "absorption_health", (attribute, object) -> { - return new ElementTag(NMSHandler.entityHelper.getAbsorption(object.getLivingEntity())); + return new ElementTag(object.getLivingEntity().getAbsorptionAmount()); }); // <--[tag] @@ -3166,7 +3173,7 @@ public void adjust(Mechanism mechanism) { // // --> if (mechanism.matches("absorption_health") && mechanism.requireFloat()) { - NMSHandler.entityHelper.setAbsorption(getLivingEntity(), mechanism.getValue().asDouble()); + getLivingEntity().setAbsorptionAmount(mechanism.getValue().asDouble()); } // <--[mechanism] diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java index af769f064e..59cae0e036 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java @@ -1,18 +1,22 @@ package com.denizenscript.denizen.objects; +import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.nms.NMSVersion; +import com.denizenscript.denizen.nms.abstracts.ImprovedOfflinePlayer; +import com.denizenscript.denizen.nms.abstracts.Sidebar; import com.denizenscript.denizen.nms.interfaces.AdvancementHelper; import com.denizenscript.denizen.objects.properties.entity.EntityHealth; import com.denizenscript.denizen.scripts.commands.player.DisguiseCommand; import com.denizenscript.denizen.scripts.commands.player.ExperienceCommand; import com.denizenscript.denizen.scripts.commands.player.SidebarCommand; import com.denizenscript.denizen.scripts.commands.server.BossBarCommand; +import com.denizenscript.denizen.tags.core.PlayerTagBase; import com.denizenscript.denizen.utilities.AdvancedTextImpl; +import com.denizenscript.denizen.utilities.BukkitImplDeprecations; import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.ScoreboardHelper; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.blocks.FakeBlock; -import com.denizenscript.denizencore.utilities.debugging.Debug; import com.denizenscript.denizen.utilities.depends.Depends; import com.denizenscript.denizen.utilities.entity.BossBarHelper; import com.denizenscript.denizen.utilities.entity.FakeEntity; @@ -25,18 +29,14 @@ import com.denizenscript.denizencore.flags.AbstractFlagTracker; import com.denizenscript.denizencore.flags.FlaggableObject; import com.denizenscript.denizencore.objects.*; -import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizen.nms.abstracts.ImprovedOfflinePlayer; -import com.denizenscript.denizen.nms.abstracts.Sidebar; -import com.denizenscript.denizen.tags.core.PlayerTagBase; import com.denizenscript.denizencore.objects.core.*; import com.denizenscript.denizencore.tags.Attribute; import com.denizenscript.denizencore.tags.ObjectTagProcessor; import com.denizenscript.denizencore.tags.TagContext; import com.denizenscript.denizencore.tags.TagRunnable; import com.denizenscript.denizencore.utilities.CoreUtilities; -import com.denizenscript.denizen.utilities.BukkitImplDeprecations; import com.denizenscript.denizencore.utilities.Deprecations; +import com.denizenscript.denizencore.utilities.debugging.Debug; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.npc.NPCSelector; @@ -1473,7 +1473,11 @@ else if (obj instanceof EntityTag) { // Returns a list of the recipes the player has discovered, in the Namespace:Key format, for example "minecraft:gold_nugget". // --> registerOnlineOnlyTag(ListTag.class, "discovered_recipes", (attribute, object) -> { - return new ListTag(NMSHandler.entityHelper.getDiscoveredRecipes(object.getPlayerEntity())); + ListTag result = new ListTag(); + for (NamespacedKey recipe : object.getPlayerEntity().getDiscoveredRecipes()) { + result.addObject(new ElementTag(recipe.toString(), true)); + } + return result; }); // <--[tag] diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBodyArrows.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBodyArrows.java index cca9b6018f..53cf39db6f 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBodyArrows.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBodyArrows.java @@ -1,10 +1,9 @@ package com.denizenscript.denizen.objects.properties.entity; -import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.objects.EntityTag; -import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.properties.Property; import com.denizenscript.denizencore.objects.properties.PropertyParser; @@ -35,11 +34,11 @@ private EntityBodyArrows(EntityTag entity) { EntityTag entity; private int getBodyArrows() { - return NMSHandler.entityHelper.getBodyArrows(entity.getBukkitEntity()); + return entity.getLivingEntity().getArrowsInBody(); } private void setBodyArrows(int numArrows) { - NMSHandler.entityHelper.setBodyArrows(entity.getBukkitEntity(), numArrows); + entity.getLivingEntity().setArrowsInBody(numArrows); } @Override diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBoundingBox.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBoundingBox.java index f246dd5ac2..30df014f8a 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBoundingBox.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBoundingBox.java @@ -1,14 +1,14 @@ package com.denizenscript.denizen.objects.properties.entity; import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizen.nms.util.BoundingBox; import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.objects.LocationTag; import com.denizenscript.denizencore.objects.Mechanism; -import com.denizenscript.denizencore.objects.core.ListTag; import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ListTag; import com.denizenscript.denizencore.objects.properties.Property; import com.denizenscript.denizencore.objects.properties.PropertyParser; +import org.bukkit.util.BoundingBox; import java.util.HashSet; import java.util.List; @@ -47,10 +47,10 @@ private EntityBoundingBox(EntityTag entity) { EntityTag entity; private ListTag getBoundingBox() { - BoundingBox boundingBox = NMSHandler.entityHelper.getBoundingBox(entity.getBukkitEntity()); + BoundingBox boundingBox = entity.getBukkitEntity().getBoundingBox(); ListTag list = new ListTag(); - list.addObject(new LocationTag(boundingBox.getLow().toLocation(entity.getWorld()))); - list.addObject(new LocationTag(boundingBox.getHigh().toLocation(entity.getWorld()))); + list.addObject(new LocationTag(entity.getWorld(), boundingBox.getMin())); + list.addObject(new LocationTag(entity.getWorld(), boundingBox.getMax())); return list; } @@ -104,8 +104,7 @@ public void adjust(Mechanism mechanism) { } List locations = mechanism.valueAsType(ListTag.class).filter(LocationTag.class, mechanism.context); if (locations.size() == 2) { - BoundingBox boundingBox = new BoundingBox(locations.get(0).toVector(), locations.get(1).toVector()); - NMSHandler.entityHelper.setBoundingBox(entity.getBukkitEntity(), boundingBox); + NMSHandler.entityHelper.setBoundingBox(entity.getBukkitEntity(), BoundingBox.of(locations.get(0), locations.get(1))); modifiedBoxes.add(entity.getUUID()); } else { diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPickupStatus.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPickupStatus.java index bce93deb4e..38c0023410 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPickupStatus.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPickupStatus.java @@ -7,12 +7,12 @@ import com.denizenscript.denizencore.objects.ObjectTag; import com.denizenscript.denizencore.objects.properties.Property; import com.denizenscript.denizencore.tags.Attribute; -import org.bukkit.entity.Arrow; +import org.bukkit.entity.AbstractArrow; public class EntityPickupStatus implements Property { public static boolean describes(ObjectTag entity) { - return entity instanceof EntityTag && ((EntityTag) entity).getBukkitEntity() instanceof Arrow; + return entity instanceof EntityTag && ((EntityTag) entity).getBukkitEntity() instanceof AbstractArrow; } public static EntityPickupStatus getFrom(ObjectTag entity) { @@ -38,7 +38,7 @@ private EntityPickupStatus(EntityTag entity) { @Override public String getPropertyString() { - return NMSHandler.entityHelper.getArrowPickupStatus(dentity.getBukkitEntity()); + return ((AbstractArrow) dentity.getBukkitEntity()).getPickupStatus().name(); } @Override @@ -62,7 +62,7 @@ public ObjectTag getObjectAttribute(Attribute attribute) { // If the entity is an arrow or trident, returns the pickup status of the arrow/trident. // --> if (attribute.startsWith("pickup_status")) { - return new ElementTag(NMSHandler.entityHelper.getArrowPickupStatus(dentity.getBukkitEntity())) + return new ElementTag(((AbstractArrow) dentity.getBukkitEntity()).getPickupStatus().name()) .getObjectAttribute(attribute.fulfill(1)); } @@ -82,8 +82,8 @@ public void adjust(Mechanism mechanism) { // @tags // // --> - if (mechanism.matches("pickup_status")) { - NMSHandler.entityHelper.setArrowPickupStatus(dentity.getBukkitEntity(), mechanism.getValue().asString().toUpperCase()); + if (mechanism.matches("pickup_status") && mechanism.requireEnum(AbstractArrow.PickupStatus.class)) { + ((AbstractArrow) dentity.getBukkitEntity()).setPickupStatus(mechanism.getValue().asEnum(AbstractArrow.PickupStatus.class)); } } } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityShulkerPeek.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityShulkerPeek.java index 2b2cccb2fa..8e113ed02f 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityShulkerPeek.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityShulkerPeek.java @@ -1,6 +1,5 @@ package com.denizenscript.denizen.objects.properties.entity; -import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.ObjectTag; @@ -41,7 +40,7 @@ private EntityShulkerPeek(EntityTag ent) { @Override public String getPropertyString() { - return String.valueOf(NMSHandler.entityHelper.getShulkerPeek(entity.getBukkitEntity())); + return String.valueOf(getPeek()); } @Override @@ -49,6 +48,10 @@ public String getPropertyId() { return "shulker_peek"; } + public int getPeek() { + return (int) (((Shulker) entity.getBukkitEntity()).getPeek() * 100); + } + @Override public ObjectTag getObjectAttribute(Attribute attribute) { @@ -65,8 +68,7 @@ public ObjectTag getObjectAttribute(Attribute attribute) { // Returns the peek value of a shulker box (where 0 is fully closed, 100 is fully open). // --> if (attribute.startsWith("shulker_peek")) { - return new ElementTag(NMSHandler.entityHelper.getShulkerPeek(entity.getBukkitEntity())) - .getObjectAttribute(attribute.fulfill(1)); + return new ElementTag(getPeek()).getObjectAttribute(attribute.fulfill(1)); } return null; @@ -85,7 +87,7 @@ public void adjust(Mechanism mechanism) { // // --> if (mechanism.matches("shulker_peek") && mechanism.requireInteger()) { - NMSHandler.entityHelper.setShulkerPeek(entity.getBukkitEntity(), mechanism.getValue().asInt()); + ((Shulker) entity.getBukkitEntity()).setPeek(mechanism.getValue().asFloat() / 100); } } } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntitySpeed.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntitySpeed.java index 9d49791947..46a4499486 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntitySpeed.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntitySpeed.java @@ -1,10 +1,9 @@ package com.denizenscript.denizen.objects.properties.entity; -import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.objects.EntityTag; -import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.properties.Property; import com.denizenscript.denizencore.tags.Attribute; import org.bukkit.entity.Boat; @@ -58,7 +57,7 @@ public String getPropertyId() { public ElementTag getSpeed() { if (entity.isLivingEntity()) { - return new ElementTag(NMSHandler.entityHelper.getSpeed(entity.getBukkitEntity())); + return new ElementTag(entity.getLivingEntity().getAttribute(org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED).getBaseValue()); } else { if (entity.getBukkitEntity() instanceof Boat) { @@ -110,7 +109,7 @@ public void adjust(Mechanism mechanism) { if (mechanism.matches("speed") && mechanism.requireDouble()) { double value = mechanism.getValue().asDouble(); if (entity.isLivingEntity()) { - NMSHandler.entityHelper.setSpeed(entity.getBukkitEntity(), value); + entity.getLivingEntity().getAttribute(org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(value); } else { if (entity.getBukkitEntity() instanceof Boat) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java index b4610408ec..3d5233b439 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java @@ -1,13 +1,13 @@ package com.denizenscript.denizen.utilities; -import com.denizenscript.denizen.objects.*; -import com.denizenscript.denizen.objects.properties.material.MaterialDirectional; -import com.denizenscript.denizen.scripts.commands.world.SignCommand; -import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.nms.interfaces.BlockHelper; import com.denizenscript.denizen.npc.traits.TriggerTrait; +import com.denizenscript.denizen.objects.*; +import com.denizenscript.denizen.objects.properties.material.MaterialDirectional; +import com.denizenscript.denizen.scripts.commands.world.SignCommand; import com.denizenscript.denizen.tags.BukkitTagContext; +import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; import com.denizenscript.denizencore.events.ScriptEvent; import com.denizenscript.denizencore.objects.core.ScriptTag; import com.denizenscript.denizencore.scripts.ScriptEntry; @@ -27,6 +27,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.*; +import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import java.io.File; @@ -311,8 +312,14 @@ public static boolean checkLocationWithBoundingBox(Location baseLocation, Entity if (!checkLocation(baseLocation, entity.getLocation(), theLeeway + 16)) { return false; } - double distanceSq = NMSHandler.entityHelper.getBoundingBox(entity).distanceSquared(baseLocation.toVector()); - return distanceSq < theLeeway * theLeeway; + BoundingBox box = entity.getBoundingBox(); + double x = Math.max(box.getMinX(), Math.min(baseLocation.getX(), box.getMaxX())); + double y = Math.max(box.getMinY(), Math.min(baseLocation.getY(), box.getMaxY())); + double z = Math.max(box.getMinZ(), Math.min(baseLocation.getZ(), box.getMaxZ())); + double xOff = x - baseLocation.getX(); + double yOff = y - baseLocation.getY(); + double zOff = z - baseLocation.getZ(); + return xOff * xOff + yOff * yOff + zOff * zOff < theLeeway * theLeeway; } public static boolean checkLocation(LivingEntity entity, Location theLocation, double theLeeway) { diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/EntityHelperImpl.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/EntityHelperImpl.java index 1b4f8d8643..506eaa2394 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/EntityHelperImpl.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/EntityHelperImpl.java @@ -2,12 +2,11 @@ import com.denizenscript.denizen.Denizen; import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizen.nms.v1_16.impl.jnbt.CompoundTagImpl; -import com.denizenscript.denizencore.utilities.ReflectionHelper; import com.denizenscript.denizen.nms.interfaces.EntityHelper; -import com.denizenscript.denizen.nms.util.BoundingBox; import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.v1_16.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.utilities.Utilities; +import com.denizenscript.denizencore.utilities.ReflectionHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import net.minecraft.server.v1_16_R3.*; import org.bukkit.Location; @@ -19,26 +18,21 @@ import org.bukkit.craftbukkit.v1_16_R3.entity.*; import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; -import org.bukkit.entity.*; import org.bukkit.entity.Entity; +import org.bukkit.entity.*; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import java.lang.invoke.MethodHandle; -import java.lang.reflect.Field; import java.util.*; public class EntityHelperImpl extends EntityHelper { - public static final Field RECIPE_BOOK_DISCOVERED_SET = ReflectionHelper.getFields(RecipeBook.class).get("recipes"); - public static final MethodHandle ENTITY_SETPOSE = ReflectionHelper.getMethodHandle(net.minecraft.server.v1_16_R3.Entity.class, "setPose", EntityPose.class); - public static final MethodHandle ENTITY_ONGROUND_SETTER = ReflectionHelper.getFinalSetter(net.minecraft.server.v1_16_R3.Entity.class, "onGround"); @Override @@ -52,23 +46,9 @@ public boolean isInvisible(Entity entity) { } @Override - public double getAbsorption(LivingEntity entity) { - return entity.getAbsorptionAmount(); - } - - @Override - public void setAbsorption(LivingEntity entity, double value) { - entity.setAbsorptionAmount(value); - } - - @Override - public void setSneaking(Entity player, boolean sneak) { - if (player instanceof Player) { - ((Player) player).setSneaking(sneak); - } - EntityPose pose = sneak ? EntityPose.CROUCHING : EntityPose.STANDING; + public void setPose(Entity entity, Pose pose) { try { - ENTITY_SETPOSE.invoke(((CraftEntity) player).getHandle(), pose); + ENTITY_SETPOSE.invoke(((CraftEntity) entity).getHandle(), EntityPose.values()[pose.ordinal()]); } catch (Throwable ex) { Debug.echoError(ex); @@ -120,57 +100,11 @@ public double getDamageTo(LivingEntity attacker, Entity target) { return damage; } - @Override - public String getRawHoverText(Entity entity) { - throw new UnsupportedOperationException(); - } - - public List getDiscoveredRecipes(Player player) { - try { - RecipeBookServer book = ((CraftPlayer) player).getHandle().getRecipeBook(); - Set set = (Set) RECIPE_BOOK_DISCOVERED_SET.get(book); - List output = new ArrayList<>(); - for (MinecraftKey key : set) { - output.add(key.toString()); - } - return output; - } - catch (Throwable ex) { - Debug.echoError(ex); - } - return null; - } - - @Override - public String getArrowPickupStatus(Entity entity) { - return ((Arrow) entity).getPickupStatus().name(); - } - - @Override - public void setArrowPickupStatus(Entity entity, String status) { - ((Arrow) entity).setPickupStatus(AbstractArrow.PickupStatus.valueOf(status)); - } - @Override public void setRiptide(Entity entity, boolean state) { ((CraftLivingEntity) entity).getHandle().r(state ? 0 : 1); } - @Override - public Entity getFishHook(PlayerFishEvent event) { - return event.getHook(); - } - - @Override - public ItemStack getItemFromTrident(Entity entity) { - return CraftItemStack.asBukkitCopy(((CraftTrident) entity).getHandle().trident); - } - - @Override - public void setItemForTrident(Entity entity, ItemStack item) { - ((CraftTrident) entity).getHandle().trident = CraftItemStack.asNMSCopy(item); - } - @Override public void forceInteraction(Player player, Location location) { CraftPlayer craftPlayer = (CraftPlayer) player; @@ -231,26 +165,6 @@ public void stopWalking(Entity entity) { ((EntityInsentient) nmsEntity).getNavigation().o(); } - @Override - public double getSpeed(Entity entity) { - net.minecraft.server.v1_16_R3.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof EntityInsentient)) { - return 0.0; - } - EntityInsentient nmsEntity = (EntityInsentient) nmsEntityEntity; - return nmsEntity.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getBaseValue(); - } - - @Override - public void setSpeed(Entity entity, double speed) { - net.minecraft.server.v1_16_R3.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof EntityInsentient)) { - return; - } - EntityInsentient nmsEntity = (EntityInsentient) nmsEntityEntity; - nmsEntity.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(speed); - } - @Override public void follow(final Entity target, final Entity follower, final double speed, final double lead, final double maxRange, final boolean allowWander, final boolean teleport) { @@ -547,18 +461,8 @@ public void teleport(Entity entity, Location loc) { } @Override - public BoundingBox getBoundingBox(Entity entity) { - AxisAlignedBB boundingBox = ((CraftEntity) entity).getHandle().getBoundingBox(); - Vector position = new Vector(boundingBox.minX, boundingBox.minY, boundingBox.minZ); - Vector size = new Vector(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ); - return new BoundingBox(position, size); - } - - @Override - public void setBoundingBox(Entity entity, BoundingBox boundingBox) { - Vector low = boundingBox.getLow(); - Vector high = boundingBox.getHigh(); - ((CraftEntity) entity).getHandle().a(new AxisAlignedBB(low.getX(), low.getY(), low.getZ(), high.getX(), high.getY(), high.getZ())); + public void setBoundingBox(Entity entity, BoundingBox box) { + ((CraftEntity) entity).getHandle().a(new AxisAlignedBB(box.getMinX(), box.getMinY(), box.getMinZ(), box.getMaxX(), box.getMaxY(), box.getMaxZ())); } @Override @@ -573,16 +477,6 @@ else if (entity instanceof CraftItem) { } } - @Override - public int getShulkerPeek(Entity entity) { - return ((CraftShulker) entity).getHandle().eN(); - } - - @Override - public void setShulkerPeek(Entity entity, int peek) { - ((CraftShulker) entity).getHandle().a(peek); - } - @Override public void setHeadAngle(Entity entity, float angle) { EntityLiving handle = ((CraftLivingEntity) entity).getHandle(); diff --git a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/EntityHelperImpl.java b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/EntityHelperImpl.java index bae0d8eb33..0c977d627c 100644 --- a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/EntityHelperImpl.java +++ b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/EntityHelperImpl.java @@ -2,31 +2,27 @@ import com.denizenscript.denizen.Denizen; import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizen.nms.v1_17.ReflectionMappingsInfo; -import com.denizenscript.denizen.objects.EntityTag; -import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.v1_17.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.nms.interfaces.EntityHelper; -import com.denizenscript.denizen.nms.util.BoundingBox; import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.v1_17.ReflectionMappingsInfo; +import com.denizenscript.denizen.nms.v1_17.impl.jnbt.CompoundTagImpl; +import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.utilities.Utilities; +import com.denizenscript.denizencore.utilities.ReflectionHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import net.minecraft.core.BlockPos; import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerPlayerConnection; -import net.minecraft.stats.RecipeBook; -import net.minecraft.stats.ServerRecipeBook; import net.minecraft.world.InteractionHand; import net.minecraft.world.damagesource.CombatRules; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.*; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.MobType; +import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.navigation.PathNavigation; @@ -56,14 +52,11 @@ import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; import org.bukkit.entity.*; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import java.lang.invoke.MethodHandle; @@ -72,8 +65,6 @@ public class EntityHelperImpl extends EntityHelper { - public static final Field RECIPE_BOOK_DISCOVERED_SET = ReflectionHelper.getFields(RecipeBook.class).get(ReflectionMappingsInfo.RecipeBook_known, Set.class); - public static final MethodHandle ENTITY_ONGROUND_SETTER = ReflectionHelper.getFinalSetter(net.minecraft.world.entity.Entity.class, ReflectionMappingsInfo.Entity_onGround, boolean.class); public static final EntityDataAccessor ENTITY_ENDERMAN_DATAWATCHER_SCREAMING = ReflectionHelper.getFieldValue(EnderMan.class, ReflectionMappingsInfo.EnderMan_DATA_CREEPY, null); @@ -89,28 +80,8 @@ public boolean isInvisible(Entity entity) { } @Override - public double getAbsorption(LivingEntity entity) { - return entity.getAbsorptionAmount(); - } - - @Override - public void setAbsorption(LivingEntity entity, double value) { - entity.setAbsorptionAmount(value); - } - - @Override - public void setSneaking(Entity player, boolean sneak) { - if (player instanceof Player) { - ((Player) player).setSneaking(sneak); - } - Pose pose = sneak ? Pose.CROUCHING : Pose.STANDING; - ((CraftEntity) player).getHandle().setPose(pose); - } - - @Override - public void setSleeping(Entity player, boolean sleep) { - Pose pose = sleep ? Pose.SLEEPING : Pose.STANDING; - ((CraftEntity) player).getHandle().setPose(pose); + public void setPose(Entity entity, Pose pose) { + ((CraftEntity) entity).getHandle().setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); } @Override @@ -158,57 +129,11 @@ public double getDamageTo(LivingEntity attacker, Entity target) { return damage; } - @Override - public String getRawHoverText(Entity entity) { - throw new UnsupportedOperationException(); - } - - public List getDiscoveredRecipes(Player player) { - try { - ServerRecipeBook book = ((CraftPlayer) player).getHandle().getRecipeBook(); - Set set = (Set) RECIPE_BOOK_DISCOVERED_SET.get(book); - List output = new ArrayList<>(); - for (ResourceLocation key : set) { - output.add(key.toString()); - } - return output; - } - catch (Throwable ex) { - Debug.echoError(ex); - } - return null; - } - - @Override - public String getArrowPickupStatus(Entity entity) { - return ((Arrow) entity).getPickupStatus().name(); - } - - @Override - public void setArrowPickupStatus(Entity entity, String status) { - ((Arrow) entity).setPickupStatus(AbstractArrow.PickupStatus.valueOf(status)); - } - @Override public void setRiptide(Entity entity, boolean state) { ((CraftLivingEntity) entity).getHandle().startAutoSpinAttack(state ? 0 : 1); } - @Override - public Entity getFishHook(PlayerFishEvent event) { - return event.getHook(); - } - - @Override - public ItemStack getItemFromTrident(Entity entity) { - return CraftItemStack.asBukkitCopy(((CraftTrident) entity).getHandle().tridentItem); - } - - @Override - public void setItemForTrident(Entity entity, ItemStack item) { - ((CraftTrident) entity).getHandle().tridentItem = CraftItemStack.asNMSCopy(item); - } - @Override public void forceInteraction(Player player, Location location) { CraftPlayer craftPlayer = (CraftPlayer) player; @@ -269,26 +194,6 @@ public void stopWalking(Entity entity) { ((Mob) nmsEntity).getNavigation().stop(); } - @Override - public double getSpeed(Entity entity) { - net.minecraft.world.entity.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof Mob)) { - return 0.0; - } - Mob nmsEntity = (Mob) nmsEntityEntity; - return nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue(); - } - - @Override - public void setSpeed(Entity entity, double speed) { - net.minecraft.world.entity.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof Mob)) { - return; - } - Mob nmsEntity = (Mob) nmsEntityEntity; - nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(speed); - } - @Override public void follow(final Entity target, final Entity follower, final double speed, final double lead, final double maxRange, final boolean allowWander, final boolean teleport) { @@ -583,18 +488,8 @@ public void teleport(Entity entity, Location loc) { } @Override - public BoundingBox getBoundingBox(Entity entity) { - AABB boundingBox = ((CraftEntity) entity).getHandle().getBoundingBox(); - Vector position = new Vector(boundingBox.minX, boundingBox.minY, boundingBox.minZ); - Vector size = new Vector(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ); - return new BoundingBox(position, size); - } - - @Override - public void setBoundingBox(Entity entity, BoundingBox boundingBox) { - Vector low = boundingBox.getLow(); - Vector high = boundingBox.getHigh(); - ((CraftEntity) entity).getHandle().setBoundingBox(new AABB(low.getX(), low.getY(), low.getZ(), high.getX(), high.getY(), high.getZ())); + public void setBoundingBox(Entity entity, BoundingBox box) { + ((CraftEntity) entity).getHandle().setBoundingBox(new AABB(box.getMinX(), box.getMinY(), box.getMinZ(), box.getMaxX(), box.getMaxY(), box.getMaxZ())); } @Override @@ -609,16 +504,6 @@ else if (entity instanceof CraftItem) { } } - @Override - public int getShulkerPeek(Entity entity) { - return ((CraftShulker) entity).getHandle().getRawPeekAmount(); - } - - @Override - public void setShulkerPeek(Entity entity, int peek) { - ((CraftShulker) entity).getHandle().setRawPeekAmount(peek); - } - @Override public void setHeadAngle(Entity entity, float angle) { net.minecraft.world.entity.LivingEntity handle = ((CraftLivingEntity) entity).getHandle(); diff --git a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/EntityHelperImpl.java b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/EntityHelperImpl.java index 7d220de280..ce4e76b616 100644 --- a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/EntityHelperImpl.java +++ b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/EntityHelperImpl.java @@ -2,14 +2,13 @@ import com.denizenscript.denizen.Denizen; import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizen.nms.v1_18.ReflectionMappingsInfo; -import com.denizenscript.denizen.objects.EntityTag; -import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.v1_18.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.nms.interfaces.EntityHelper; -import com.denizenscript.denizen.nms.util.BoundingBox; import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.v1_18.ReflectionMappingsInfo; +import com.denizenscript.denizen.nms.v1_18.impl.jnbt.CompoundTagImpl; +import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.utilities.Utilities; +import com.denizenscript.denizencore.utilities.ReflectionHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import io.netty.buffer.Unpooled; import net.minecraft.commands.arguments.EntityAnchorArgument; @@ -20,20 +19,17 @@ import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerEntity; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ChunkMap; +import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerPlayerConnection; -import net.minecraft.stats.RecipeBook; -import net.minecraft.stats.ServerRecipeBook; import net.minecraft.world.InteractionHand; import net.minecraft.world.damagesource.CombatRules; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.*; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.MobType; +import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.navigation.PathNavigation; @@ -63,14 +59,11 @@ import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.entity.*; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import java.lang.invoke.MethodHandle; @@ -79,8 +72,6 @@ public class EntityHelperImpl extends EntityHelper { - public static final Field RECIPE_BOOK_DISCOVERED_SET = ReflectionHelper.getFields(RecipeBook.class).get(ReflectionMappingsInfo.RecipeBook_known, Set.class); - public static final MethodHandle ENTITY_ONGROUND_SETTER = ReflectionHelper.getFinalSetter(net.minecraft.world.entity.Entity.class, ReflectionMappingsInfo.Entity_onGround, boolean.class); public static final EntityDataAccessor ENTITY_ENDERMAN_DATAWATCHER_SCREAMING = ReflectionHelper.getFieldValue(EnderMan.class, ReflectionMappingsInfo.EnderMan_DATA_CREEPY, null); @@ -96,28 +87,8 @@ public boolean isInvisible(Entity entity) { } @Override - public double getAbsorption(LivingEntity entity) { - return entity.getAbsorptionAmount(); - } - - @Override - public void setAbsorption(LivingEntity entity, double value) { - entity.setAbsorptionAmount(value); - } - - @Override - public void setSneaking(Entity player, boolean sneak) { - if (player instanceof Player) { - ((Player) player).setSneaking(sneak); - } - Pose pose = sneak ? Pose.CROUCHING : Pose.STANDING; - ((CraftEntity) player).getHandle().setPose(pose); - } - - @Override - public void setSleeping(Entity player, boolean sleep) { - Pose pose = sleep ? Pose.SLEEPING : Pose.STANDING; - ((CraftEntity) player).getHandle().setPose(pose); + public void setPose(Entity entity, Pose pose) { + ((CraftEntity) entity).getHandle().setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); } @Override @@ -165,37 +136,6 @@ public double getDamageTo(LivingEntity attacker, Entity target) { return damage; } - @Override - public String getRawHoverText(Entity entity) { - throw new UnsupportedOperationException(); - } - - public List getDiscoveredRecipes(Player player) { - try { - ServerRecipeBook book = ((CraftPlayer) player).getHandle().getRecipeBook(); - Set set = (Set) RECIPE_BOOK_DISCOVERED_SET.get(book); - List output = new ArrayList<>(); - for (ResourceLocation key : set) { - output.add(key.toString()); - } - return output; - } - catch (Throwable ex) { - Debug.echoError(ex); - } - return null; - } - - @Override - public String getArrowPickupStatus(Entity entity) { - return ((Arrow) entity).getPickupStatus().name(); - } - - @Override - public void setArrowPickupStatus(Entity entity, String status) { - ((Arrow) entity).setPickupStatus(AbstractArrow.PickupStatus.valueOf(status)); - } - public static final MethodHandle LIVINGENTITY_AUTOSPINATTACK_SETTER = ReflectionHelper.getFinalSetter(net.minecraft.world.entity.LivingEntity.class, ReflectionMappingsInfo.LivingEntity_autoSpinAttackTicks); public static final MethodHandle LIVINGENTITY_SETLIVINGENTITYFLAG = ReflectionHelper.getMethodHandle(net.minecraft.world.entity.LivingEntity.class, ReflectionMappingsInfo.LivingEntity_setLivingEntityFlag, int.class, boolean.class); @@ -211,21 +151,6 @@ public void setRiptide(Entity entity, boolean state) { } } - @Override - public Entity getFishHook(PlayerFishEvent event) { - return event.getHook(); - } - - @Override - public ItemStack getItemFromTrident(Entity entity) { - return CraftItemStack.asBukkitCopy(((CraftTrident) entity).getHandle().tridentItem); - } - - @Override - public void setItemForTrident(Entity entity, ItemStack item) { - ((CraftTrident) entity).getHandle().tridentItem = CraftItemStack.asNMSCopy(item); - } - @Override public void forceInteraction(Player player, Location location) { CraftPlayer craftPlayer = (CraftPlayer) player; @@ -286,26 +211,6 @@ public void stopWalking(Entity entity) { ((Mob) nmsEntity).getNavigation().stop(); } - @Override - public double getSpeed(Entity entity) { - net.minecraft.world.entity.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof Mob)) { - return 0.0; - } - Mob nmsEntity = (Mob) nmsEntityEntity; - return nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue(); - } - - @Override - public void setSpeed(Entity entity, double speed) { - net.minecraft.world.entity.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof Mob)) { - return; - } - Mob nmsEntity = (Mob) nmsEntityEntity; - nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(speed); - } - @Override public void follow(final Entity target, final Entity follower, final double speed, final double lead, final double maxRange, final boolean allowWander, final boolean teleport) { @@ -660,18 +565,8 @@ public void teleport(Entity entity, Location loc) { } @Override - public BoundingBox getBoundingBox(Entity entity) { - AABB boundingBox = ((CraftEntity) entity).getHandle().getBoundingBox(); - Vector position = new Vector(boundingBox.minX, boundingBox.minY, boundingBox.minZ); - Vector size = new Vector(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ); - return new BoundingBox(position, size); - } - - @Override - public void setBoundingBox(Entity entity, BoundingBox boundingBox) { - Vector low = boundingBox.getLow(); - Vector high = boundingBox.getHigh(); - ((CraftEntity) entity).getHandle().setBoundingBox(new AABB(low.getX(), low.getY(), low.getZ(), high.getX(), high.getY(), high.getZ())); + public void setBoundingBox(Entity entity, BoundingBox box) { + ((CraftEntity) entity).getHandle().setBoundingBox(new AABB(box.getMinX(), box.getMinY(), box.getMinZ(), box.getMaxX(), box.getMaxY(), box.getMaxZ())); } @Override @@ -686,16 +581,6 @@ else if (entity instanceof CraftItem) { } } - @Override - public int getShulkerPeek(Entity entity) { - return ((CraftShulker) entity).getHandle().getRawPeekAmount(); - } - - @Override - public void setShulkerPeek(Entity entity, int peek) { - ((CraftShulker) entity).getHandle().setRawPeekAmount(peek); - } - @Override public void setHeadAngle(Entity entity, float angle) { net.minecraft.world.entity.LivingEntity handle = ((CraftLivingEntity) entity).getHandle(); diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java index ff27907bcb..8d2bf2bcc1 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java @@ -2,14 +2,13 @@ import com.denizenscript.denizen.Denizen; import com.denizenscript.denizen.nms.NMSHandler; -import com.denizenscript.denizen.nms.v1_19.ReflectionMappingsInfo; -import com.denizenscript.denizen.objects.EntityTag; -import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.v1_19.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.nms.interfaces.EntityHelper; -import com.denizenscript.denizen.nms.util.BoundingBox; import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.v1_19.ReflectionMappingsInfo; +import com.denizenscript.denizen.nms.v1_19.impl.jnbt.CompoundTagImpl; +import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.utilities.Utilities; +import com.denizenscript.denizencore.utilities.ReflectionHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import io.netty.buffer.Unpooled; import net.minecraft.commands.arguments.EntityAnchorArgument; @@ -20,21 +19,18 @@ import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerEntity; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ChunkMap; +import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerPlayerConnection; -import net.minecraft.stats.RecipeBook; -import net.minecraft.stats.ServerRecipeBook; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.damagesource.CombatRules; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.*; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.MobType; +import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.navigation.PathNavigation; @@ -64,14 +60,11 @@ import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.entity.*; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import java.lang.invoke.MethodHandle; @@ -80,8 +73,6 @@ public class EntityHelperImpl extends EntityHelper { - public static final Field RECIPE_BOOK_DISCOVERED_SET = ReflectionHelper.getFields(RecipeBook.class).get(ReflectionMappingsInfo.RecipeBook_known, Set.class); - public static final MethodHandle ENTITY_ONGROUND_SETTER = ReflectionHelper.getFinalSetter(net.minecraft.world.entity.Entity.class, ReflectionMappingsInfo.Entity_onGround, boolean.class); public static final EntityDataAccessor ENTITY_ENDERMAN_DATAWATCHER_SCREAMING = ReflectionHelper.getFieldValue(EnderMan.class, ReflectionMappingsInfo.EnderMan_DATA_CREEPY, null); @@ -97,28 +88,8 @@ public boolean isInvisible(Entity entity) { } @Override - public double getAbsorption(LivingEntity entity) { - return entity.getAbsorptionAmount(); - } - - @Override - public void setAbsorption(LivingEntity entity, double value) { - entity.setAbsorptionAmount(value); - } - - @Override - public void setSneaking(Entity player, boolean sneak) { - if (player instanceof Player) { - ((Player) player).setSneaking(sneak); - } - Pose pose = sneak ? Pose.CROUCHING : Pose.STANDING; - ((CraftEntity) player).getHandle().setPose(pose); - } - - @Override - public void setSleeping(Entity player, boolean sleep) { - Pose pose = sleep ? Pose.SLEEPING : Pose.STANDING; - ((CraftEntity) player).getHandle().setPose(pose); + public void setPose(Entity entity, Pose pose) { + ((CraftEntity) entity).getHandle().setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); } @Override @@ -166,37 +137,6 @@ public double getDamageTo(LivingEntity attacker, Entity target) { return damage; } - @Override - public String getRawHoverText(Entity entity) { - throw new UnsupportedOperationException(); - } - - public List getDiscoveredRecipes(Player player) { - try { - ServerRecipeBook book = ((CraftPlayer) player).getHandle().getRecipeBook(); - Set set = (Set) RECIPE_BOOK_DISCOVERED_SET.get(book); - List output = new ArrayList<>(); - for (ResourceLocation key : set) { - output.add(key.toString()); - } - return output; - } - catch (Throwable ex) { - Debug.echoError(ex); - } - return null; - } - - @Override - public String getArrowPickupStatus(Entity entity) { - return ((Arrow) entity).getPickupStatus().name(); - } - - @Override - public void setArrowPickupStatus(Entity entity, String status) { - ((Arrow) entity).setPickupStatus(AbstractArrow.PickupStatus.valueOf(status)); - } - public static final MethodHandle LIVINGENTITY_AUTOSPINATTACK_SETTER = ReflectionHelper.getFinalSetter(net.minecraft.world.entity.LivingEntity.class, ReflectionMappingsInfo.LivingEntity_autoSpinAttackTicks); public static final MethodHandle LIVINGENTITY_SETLIVINGENTITYFLAG = ReflectionHelper.getMethodHandle(net.minecraft.world.entity.LivingEntity.class, ReflectionMappingsInfo.LivingEntity_setLivingEntityFlag_method, int.class, boolean.class); @@ -212,21 +152,6 @@ public void setRiptide(Entity entity, boolean state) { } } - @Override - public Entity getFishHook(PlayerFishEvent event) { - return event.getHook(); - } - - @Override - public ItemStack getItemFromTrident(Entity entity) { - return CraftItemStack.asBukkitCopy(((CraftTrident) entity).getHandle().tridentItem); - } - - @Override - public void setItemForTrident(Entity entity, ItemStack item) { - ((CraftTrident) entity).getHandle().tridentItem = CraftItemStack.asNMSCopy(item); - } - @Override public void forceInteraction(Player player, Location location) { CraftPlayer craftPlayer = (CraftPlayer) player; @@ -287,26 +212,6 @@ public void stopWalking(Entity entity) { ((Mob) nmsEntity).getNavigation().stop(); } - @Override - public double getSpeed(Entity entity) { - net.minecraft.world.entity.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof Mob)) { - return 0.0; - } - Mob nmsEntity = (Mob) nmsEntityEntity; - return nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue(); - } - - @Override - public void setSpeed(Entity entity, double speed) { - net.minecraft.world.entity.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle(); - if (!(nmsEntityEntity instanceof Mob)) { - return; - } - Mob nmsEntity = (Mob) nmsEntityEntity; - nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(speed); - } - @Override public void follow(final Entity target, final Entity follower, final double speed, final double lead, final double maxRange, final boolean allowWander, final boolean teleport) { @@ -463,7 +368,6 @@ public List getPlayersThatSee(Entity entity) { public void sendAllUpdatePackets(Entity entity) { ChunkMap tracker = ((ServerLevel) ((CraftEntity) entity).getHandle().level).getChunkSource().chunkMap; ChunkMap.TrackedEntity entityTracker = tracker.entityMap.get(entity.getEntityId()); - ArrayList output = new ArrayList<>(); if (entityTracker == null) { return; } @@ -665,18 +569,8 @@ public void teleport(Entity entity, Location loc) { } @Override - public BoundingBox getBoundingBox(Entity entity) { - AABB boundingBox = ((CraftEntity) entity).getHandle().getBoundingBox(); - Vector position = new Vector(boundingBox.minX, boundingBox.minY, boundingBox.minZ); - Vector size = new Vector(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ); - return new BoundingBox(position, size); - } - - @Override - public void setBoundingBox(Entity entity, BoundingBox boundingBox) { - Vector low = boundingBox.getLow(); - Vector high = boundingBox.getHigh(); - ((CraftEntity) entity).getHandle().setBoundingBox(new AABB(low.getX(), low.getY(), low.getZ(), high.getX(), high.getY(), high.getZ())); + public void setBoundingBox(Entity entity, BoundingBox box) { + ((CraftEntity) entity).getHandle().setBoundingBox(new AABB(box.getMinX(), box.getMinY(), box.getMinZ(), box.getMaxX(), box.getMaxY(), box.getMaxZ())); } @Override @@ -691,16 +585,6 @@ else if (entity instanceof CraftItem) { } } - @Override - public int getShulkerPeek(Entity entity) { - return ((CraftShulker) entity).getHandle().getRawPeekAmount(); - } - - @Override - public void setShulkerPeek(Entity entity, int peek) { - ((CraftShulker) entity).getHandle().setRawPeekAmount(peek); - } - @Override public void setHeadAngle(Entity entity, float angle) { net.minecraft.world.entity.LivingEntity handle = ((CraftLivingEntity) entity).getHandle(); @@ -708,11 +592,6 @@ public void setHeadAngle(Entity entity, float angle) { handle.setYHeadRot(angle); } - @Override - public void setGhastAttacking(Entity entity, boolean attacking) { - ((CraftGhast) entity).getHandle().setCharging(attacking); - } - @Override public void setEndermanAngry(Entity entity, boolean angry) { ((CraftEnderman) entity).getHandle().getEntityData().set(ENTITY_ENDERMAN_DATAWATCHER_SCREAMING, angry);