Search in sources :

Example 6 with FakeEntity

use of com.denizenscript.denizen.utilities.entity.FakeEntity in project Denizen-For-Bukkit by DenizenScript.

the class FakeSpawnCommand method execute.

@Override
public void execute(ScriptEntry scriptEntry) {
    EntityTag entity = scriptEntry.getObjectTag("entity");
    LocationTag location = scriptEntry.getObjectTag("location");
    List<PlayerTag> players = (List<PlayerTag>) scriptEntry.getObject("players");
    DurationTag duration = scriptEntry.getObjectTag("duration");
    ElementTag cancel = scriptEntry.getElement("cancel");
    if (scriptEntry.dbCallShouldDebug()) {
        Debug.report(scriptEntry, getName(), entity, cancel, location, duration, db("players", players));
    }
    if (cancel != null && cancel.asBoolean()) {
        if (entity.isFake) {
            FakeEntity fakeEnt = FakeEntity.idsToEntities.get(entity.getUUID());
            if (fakeEnt != null) {
                fakeEnt.cancelEntity();
            } else {
                Debug.echoDebug(scriptEntry, "Entity '" + entity + "' cannot be cancelled: not listed in fake-entity map.");
            }
        }
    } else {
        FakeEntity created = FakeEntity.showFakeEntityTo(players, entity, location, duration);
        scriptEntry.addObject("faked_entity", created.entity);
    }
}
Also used : LocationTag(com.denizenscript.denizen.objects.LocationTag) FakeEntity(com.denizenscript.denizen.utilities.entity.FakeEntity) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) EntityTag(com.denizenscript.denizen.objects.EntityTag) List(java.util.List) ElementTag(com.denizenscript.denizencore.objects.core.ElementTag) DurationTag(com.denizenscript.denizencore.objects.core.DurationTag)

Example 7 with FakeEntity

use of com.denizenscript.denizen.utilities.entity.FakeEntity 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 {
        int ider = -1;
        if (packet instanceof ClientboundSetEntityDataPacket) {
            ider = ((ClientboundSetEntityDataPacket) packet).getId();
        }
        if (packet instanceof ClientboundUpdateAttributesPacket) {
            ider = ((ClientboundUpdateAttributesPacket) packet).getEntityId();
        }
        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;
                }
            }
            if (!disguise.isActive) {
                return false;
            }
            if (NMSHandler.debugPackets) {
                doPacketOutput("DISGUISED packet " + packet.getClass().getName() + " for entity " + ider + " to player " + player.getScoreboardName());
            }
            if (packet instanceof ClientboundSetEntityDataPacket) {
                ClientboundSetEntityDataPacket metadataPacket = (ClientboundSetEntityDataPacket) packet;
                if (e.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(e.getId(), ((CraftEntity) disguise.toOthers.entity.entity).getHandle().getEntityData(), true);
                    oldManager.send(altPacket, genericfuturelistener);
                    return true;
                }
                return false;
            }
            if (packet instanceof ClientboundUpdateAttributesPacket) {
                FakeEntity fake = ider == player.getId() ? disguise.fakeToSelf : disguise.toOthers;
                if (fake == null) {
                    return false;
                }
                if (fake.entity.entity instanceof LivingEntity) {
                    return false;
                }
                // Non-living don't have attributes
                return true;
            }
            antiDuplicate = true;
            disguise.sendTo(Collections.singletonList(new PlayerTag(player.getBukkitEntity())));
            antiDuplicate = false;
            return true;
        }
    } catch (Throwable ex) {
        antiDuplicate = false;
        Debug.echoError(ex);
    }
    return false;
}
Also used : FakeEntity(com.denizenscript.denizen.utilities.entity.FakeEntity) LivingEntity(org.bukkit.entity.LivingEntity) FakeEntity(com.denizenscript.denizen.utilities.entity.FakeEntity) Entity(net.minecraft.world.entity.Entity) CraftEntity(org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity) DisguiseCommand(com.denizenscript.denizen.scripts.commands.player.DisguiseCommand) SynchedEntityData(net.minecraft.network.syncher.SynchedEntityData) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) CraftEntity(org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity) LivingEntity(org.bukkit.entity.LivingEntity)

Aggregations

FakeEntity (com.denizenscript.denizen.utilities.entity.FakeEntity)7 EntityTag (com.denizenscript.denizen.objects.EntityTag)5 PlayerTag (com.denizenscript.denizen.objects.PlayerTag)5 ItemTag (com.denizenscript.denizen.objects.ItemTag)3 Mechanism (com.denizenscript.denizencore.objects.Mechanism)3 ItemStack (org.bukkit.inventory.ItemStack)3 BukkitRunnable (org.bukkit.scheduler.BukkitRunnable)3 DisguiseCommand (com.denizenscript.denizen.scripts.commands.player.DisguiseCommand)2 List (java.util.List)2 ServerEntity (net.minecraft.server.level.ServerEntity)2 ServerPlayer (net.minecraft.server.level.ServerPlayer)2 ServerGamePacketListenerImpl (net.minecraft.server.network.ServerGamePacketListenerImpl)2 Sidebar (com.denizenscript.denizen.nms.abstracts.Sidebar)1 CraftFakePlayerImpl (com.denizenscript.denizen.nms.v1_16.impl.entities.CraftFakePlayerImpl)1 EntityItemProjectileImpl (com.denizenscript.denizen.nms.v1_16.impl.entities.EntityItemProjectileImpl)1 CraftFakePlayerImpl (com.denizenscript.denizen.nms.v1_17.impl.entities.CraftFakePlayerImpl)1 EntityItemProjectileImpl (com.denizenscript.denizen.nms.v1_17.impl.entities.EntityItemProjectileImpl)1 CraftFakePlayerImpl (com.denizenscript.denizen.nms.v1_18.impl.entities.CraftFakePlayerImpl)1 EntityItemProjectileImpl (com.denizenscript.denizen.nms.v1_18.impl.entities.EntityItemProjectileImpl)1 LocationTag (com.denizenscript.denizen.objects.LocationTag)1