Skip to content

Commit

Permalink
Entity Helper Cleanup (#2369)
Browse files Browse the repository at this point in the history
* Entity Helper Cleanup

* Fixes from review
  • Loading branch information
tal5 committed Sep 1, 2022
1 parent 816db59 commit 5f5fd36
Show file tree
Hide file tree
Showing 16 changed files with 142 additions and 690 deletions.
@@ -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;
Expand Down Expand Up @@ -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());
Expand Down
@@ -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;
Expand All @@ -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<String> 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);

Expand All @@ -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);

Expand Down Expand Up @@ -408,71 +372,31 @@ 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<Player> getPlayersThatSee(Entity entity) {
throw new UnsupportedOperationException();
}
public abstract List<Player> 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);
Bukkit.getPluginManager().callEvent(ede);
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();
Expand Down

This file was deleted.

Expand Up @@ -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;
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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());
Expand Down
@@ -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;
Expand All @@ -12,28 +17,27 @@
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;
import com.denizenscript.denizencore.events.ScriptEvent;
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;
Expand All @@ -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;
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -3166,7 +3173,7 @@ public void adjust(Mechanism mechanism) {
// <EntityTag.absorption_health>
// -->
if (mechanism.matches("absorption_health") && mechanism.requireFloat()) {
NMSHandler.entityHelper.setAbsorption(getLivingEntity(), mechanism.getValue().asDouble());
getLivingEntity().setAbsorptionAmount(mechanism.getValue().asDouble());
}

// <--[mechanism]
Expand Down

0 comments on commit 5f5fd36

Please sign in to comment.