79 lines
2.8 KiB
Java
79 lines
2.8 KiB
Java
package me.TheBukor.SkStuff.util;
|
|
|
|
|
|
import net.minecraft.server.v1_16_R2.EntityInsentient;
|
|
import net.minecraft.server.v1_16_R2.PathfinderGoal;
|
|
import net.minecraft.server.v1_16_R2.PathfinderGoalSelector;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftEntity;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.Mob;
|
|
|
|
import java.util.LinkedHashSet;
|
|
|
|
public class NMS_v1_16_R2 implements NMSInterface {
|
|
|
|
@Override
|
|
public void clearPathfinderGoals(Entity entity) {
|
|
Mob e = (Mob) entity;
|
|
Bukkit.getMobGoals().removeAllGoals(e);
|
|
|
|
}
|
|
|
|
@Override
|
|
public void removePathfinderGoal(Object entity, Class<?> goalClass, boolean isTargetSelector) {
|
|
if (entity instanceof EntityInsentient) {
|
|
((EntityInsentient) entity).setGoalTarget(null);
|
|
if (isTargetSelector) {
|
|
((LinkedHashSet<?>) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).removeIf(goal -> ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass);
|
|
} else {
|
|
((LinkedHashSet<?>) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).removeIf(goal -> ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) {
|
|
if (entity instanceof EntityInsentient && goal instanceof PathfinderGoal) {
|
|
if (isTargetSelector)
|
|
((EntityInsentient) entity).targetSelector.a(priority, (PathfinderGoal) goal);
|
|
else
|
|
((EntityInsentient) entity).goalSelector.a(priority, (PathfinderGoal) goal);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean getNoClip(Entity entity) {
|
|
net.minecraft.server.v1_16_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
|
return nmsEntity.noclip;
|
|
}
|
|
|
|
@Override
|
|
public void setNoClip(Entity entity, boolean noclip) {
|
|
net.minecraft.server.v1_16_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
|
nmsEntity.noclip = noclip;
|
|
}
|
|
|
|
@Override
|
|
public boolean getFireProof(Entity entity) {
|
|
net.minecraft.server.v1_16_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
|
return nmsEntity.isFireProof();
|
|
}
|
|
|
|
@Override
|
|
public void setFireProof(Entity entity, boolean fireProof) {
|
|
net.minecraft.server.v1_16_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
|
ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof);
|
|
}
|
|
public float getEntityStepLength(Entity entity) {
|
|
net.minecraft.server.v1_16_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
|
return nmsEntity.G;
|
|
}
|
|
|
|
@Override
|
|
public void setEntityStepLength(Entity entity, float length) {
|
|
net.minecraft.server.v1_16_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
|
nmsEntity.G = length;
|
|
}
|
|
} |