use of org.bukkit.craftbukkit.v1_17_R1.entity in project Denizen-For-Bukkit by DenizenScript.
the class DenizenNetworkManagerImpl method processDisguiseForPacket.
public boolean processDisguiseForPacket(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> genericfuturelistener) {
if (DisguiseCommand.disguises.isEmpty() || antiDuplicate) {
return false;
}
try {
if (packet instanceof ClientboundSetEntityDataPacket) {
ClientboundSetEntityDataPacket metadataPacket = (ClientboundSetEntityDataPacket) packet;
int eid = metadataPacket.getId();
Entity ent = player.level.getEntity(eid);
if (ent == null) {
return false;
}
HashMap<UUID, DisguiseCommand.TrackedDisguise> playerMap = DisguiseCommand.disguises.get(ent.getUUID());
if (playerMap == null) {
return false;
}
DisguiseCommand.TrackedDisguise disguise = playerMap.get(player.getUUID());
if (disguise == null) {
disguise = playerMap.get(null);
if (disguise == null) {
return false;
}
}
if (ent.getId() == player.getId()) {
if (!disguise.shouldFake) {
return false;
}
List<SynchedEntityData.DataItem<?>> data = metadataPacket.getUnpackedData();
for (SynchedEntityData.DataItem item : data) {
EntityDataAccessor<?> watcherObject = item.getAccessor();
int watcherId = watcherObject.getId();
if (watcherId == 0) {
// Entity flags
ClientboundSetEntityDataPacket altPacket = new ClientboundSetEntityDataPacket(copyPacket(metadataPacket));
data = new ArrayList<>(data);
ENTITY_METADATA_LIST.set(altPacket, data);
data.remove(item);
byte flags = (byte) item.getValue();
// Invisible flag
flags |= 0x20;
data.add(new SynchedEntityData.DataItem(watcherObject, flags));
ClientboundSetEntityDataPacket updatedPacket = getModifiedMetadataFor(altPacket);
oldManager.send(updatedPacket == null ? altPacket : updatedPacket, genericfuturelistener);
return true;
}
}
} else {
ClientboundSetEntityDataPacket altPacket = new ClientboundSetEntityDataPacket(ent.getId(), ((CraftEntity) disguise.toOthers.entity.entity).getHandle().getEntityData(), true);
oldManager.send(altPacket, genericfuturelistener);
return true;
}
return false;
}
int ider = -1;
if (packet instanceof ClientboundAddPlayerPacket) {
ider = ((ClientboundAddPlayerPacket) packet).getEntityId();
} else if (packet instanceof ClientboundAddEntityPacket) {
ider = ((ClientboundAddEntityPacket) packet).getId();
} else if (packet instanceof ClientboundAddMobPacket) {
ider = ((ClientboundAddMobPacket) packet).getId();
}
if (ider != -1) {
Entity e = player.getLevel().getEntity(ider);
if (e == null) {
return false;
}
HashMap<UUID, DisguiseCommand.TrackedDisguise> playerMap = DisguiseCommand.disguises.get(e.getUUID());
if (playerMap == null) {
return false;
}
DisguiseCommand.TrackedDisguise disguise = playerMap.get(player.getUUID());
if (disguise == null) {
disguise = playerMap.get(null);
if (disguise == null) {
return false;
}
}
antiDuplicate = true;
disguise.sendTo(Collections.singletonList(new PlayerTag(player.getBukkitEntity())));
antiDuplicate = false;
return true;
}
} catch (Throwable ex) {
antiDuplicate = false;
Debug.echoError(ex);
}
return false;
}
use of org.bukkit.craftbukkit.v1_17_R1.entity in project Denizen-For-Bukkit by DenizenScript.
the class EntityHelperImpl method damage.
@Override
public void damage(LivingEntity target, float amount, Entity source, EntityDamageEvent.DamageCause cause) {
if (target == null) {
return;
}
net.minecraft.world.entity.LivingEntity nmsTarget = ((CraftLivingEntity) target).getHandle();
net.minecraft.world.entity.Entity nmsSource = source == null ? null : ((CraftEntity) source).getHandle();
CraftEventFactory.entityDamage = nmsSource;
try {
DamageSource src = getSourceFor(nmsSource, cause);
if (src instanceof FakeDamageSrc) {
src = ((FakeDamageSrc) src).real;
EntityDamageEvent ede = fireFakeDamageEvent(target, source, cause, amount);
if (ede.isCancelled()) {
return;
}
}
nmsTarget.hurt(src, amount);
} finally {
CraftEventFactory.entityDamage = null;
}
}
use of org.bukkit.craftbukkit.v1_17_R1.entity in project Denizen-For-Bukkit by DenizenScript.
the class EntityHelperImpl method walkTo.
@Override
public void walkTo(final LivingEntity entity, Location location, Double speed, final Runnable callback) {
if (entity == null || location == null) {
return;
}
net.minecraft.world.entity.Entity nmsEntityEntity = ((CraftEntity) entity).getHandle();
if (!(nmsEntityEntity instanceof Mob)) {
return;
}
final Mob nmsEntity = (Mob) nmsEntityEntity;
final PathNavigation entityNavigation = nmsEntity.getNavigation();
final Path path;
final boolean aiDisabled = !entity.hasAI();
if (aiDisabled) {
entity.setAI(true);
try {
ENTITY_ONGROUND_SETTER.invoke(nmsEntity, true);
} catch (Throwable ex) {
Debug.echoError(ex);
}
}
path = entityNavigation.createPath(location.getX(), location.getY(), location.getZ(), 1);
if (path != null) {
nmsEntity.goalSelector.enableControlFlag(Goal.Flag.MOVE);
entityNavigation.moveTo(path, 1D);
entityNavigation.setSpeedModifier(2D);
final double oldSpeed = nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue();
if (speed != null) {
nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(speed);
}
new BukkitRunnable() {
@Override
public void run() {
if (!entity.isValid()) {
if (callback != null) {
callback.run();
}
cancel();
return;
}
if (aiDisabled && entity instanceof Wolf) {
((Wolf) entity).setAngry(false);
}
if (entityNavigation.isDone() || path.isDone()) {
if (callback != null) {
callback.run();
}
if (speed != null) {
nmsEntity.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(oldSpeed);
}
if (aiDisabled) {
entity.setAI(false);
}
cancel();
}
}
}.runTaskTimer(NMSHandler.getJavaPlugin(), 1, 1);
} else // if (!Utilities.checkLocation(location, entity.getLocation(), 20)) {
// TODO: generate waypoints to the target location?
{
entity.teleport(location);
}
}
use of org.bukkit.craftbukkit.v1_17_R1.entity in project Denizen-For-Bukkit by DenizenScript.
the class EntityHelperImpl method setSpeed.
@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);
}
use of org.bukkit.craftbukkit.v1_17_R1.entity in project Denizen-For-Bukkit by DenizenScript.
the class EntityHelperImpl method getSpeed.
@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();
}
Aggregations