Search in sources :

Example 6 with StoredEntityData

use of com.viaversion.viaversion.api.data.entity.StoredEntityData in project ViaVersion by ViaVersion.

the class EntityTrackerBase method setClientEntityId.

@Override
public void setClientEntityId(int clientEntityId) {
    Preconditions.checkNotNull(playerType);
    entityTypes.put(clientEntityId, playerType);
    if (this.clientEntityId != -1 && entityData != null) {
        StoredEntityData data = entityData.remove(this.clientEntityId);
        if (data != null) {
            entityData.put(clientEntityId, data);
        }
    }
    this.clientEntityId = clientEntityId;
}
Also used : StoredEntityData(com.viaversion.viaversion.api.data.entity.StoredEntityData)

Example 7 with StoredEntityData

use of com.viaversion.viaversion.api.data.entity.StoredEntityData in project ViaBackwards by ViaVersion.

the class EntityPackets1_12 method registerRewrites.

@Override
protected void registerRewrites() {
    mapEntityTypeWithData(Entity1_12Types.EntityType.PARROT, Entity1_12Types.EntityType.BAT).plainName().spawnMetadata(storage -> storage.add(new Metadata(12, MetaType1_12.Byte, (byte) 0x00)));
    mapEntityTypeWithData(Entity1_12Types.EntityType.ILLUSION_ILLAGER, Entity1_12Types.EntityType.EVOCATION_ILLAGER).plainName();
    // Handle Illager
    filter().filterFamily(Entity1_12Types.EntityType.EVOCATION_ILLAGER).cancel(12);
    filter().filterFamily(Entity1_12Types.EntityType.EVOCATION_ILLAGER).index(13).toIndex(12);
    filter().type(Entity1_12Types.EntityType.ILLUSION_ILLAGER).index(0).handler((event, meta) -> {
        byte mask = (byte) meta.getValue();
        if ((mask & 0x20) == 0x20) {
            mask &= ~0x20;
        }
        meta.setValue(mask);
    });
    // Create Parrot storage
    filter().filterFamily(Entity1_12Types.EntityType.PARROT).handler((event, meta) -> {
        StoredEntityData data = storedEntityData(event);
        if (!data.has(ParrotStorage.class)) {
            data.put(new ParrotStorage());
        }
    });
    // Parrot remove animal metadata
    // Is baby
    filter().type(Entity1_12Types.EntityType.PARROT).cancel(12);
    filter().type(Entity1_12Types.EntityType.PARROT).index(13).handler((event, meta) -> {
        StoredEntityData data = storedEntityData(event);
        ParrotStorage storage = data.get(ParrotStorage.class);
        boolean isSitting = (((byte) meta.getValue()) & 0x01) == 0x01;
        boolean isTamed = (((byte) meta.getValue()) & 0x04) == 0x04;
        if (!storage.isTamed() && isTamed) {
        // TODO do something to let the user know it's done
        }
        storage.setTamed(isTamed);
        if (isSitting) {
            event.setIndex(12);
            meta.setValue((byte) 0x01);
            storage.setSitting(true);
        } else if (storage.isSitting()) {
            event.setIndex(12);
            meta.setValue((byte) 0x00);
            storage.setSitting(false);
        } else {
            event.cancel();
        }
    });
    // Flags (Is sitting etc, might be useful in the future
    // Owner
    filter().type(Entity1_12Types.EntityType.PARROT).cancel(14);
    // Variant
    filter().type(Entity1_12Types.EntityType.PARROT).cancel(15);
    // Left shoulder entity data
    filter().type(Entity1_12Types.EntityType.PLAYER).index(15).handler((event, meta) -> {
        CompoundTag tag = (CompoundTag) meta.getValue();
        ShoulderTracker tracker = event.user().get(ShoulderTracker.class);
        if (tag.isEmpty() && tracker.getLeftShoulder() != null) {
            tracker.setLeftShoulder(null);
            tracker.update();
        } else if (tag.contains("id") && event.entityId() == tracker.getEntityId()) {
            String id = (String) tag.get("id").getValue();
            if (tracker.getLeftShoulder() == null || !tracker.getLeftShoulder().equals(id)) {
                tracker.setLeftShoulder(id);
                tracker.update();
            }
        }
        event.cancel();
    });
    // Right shoulder entity data
    filter().type(Entity1_12Types.EntityType.PLAYER).index(16).handler((event, meta) -> {
        CompoundTag tag = (CompoundTag) event.meta().getValue();
        ShoulderTracker tracker = event.user().get(ShoulderTracker.class);
        if (tag.isEmpty() && tracker.getRightShoulder() != null) {
            tracker.setRightShoulder(null);
            tracker.update();
        } else if (tag.contains("id") && event.entityId() == tracker.getEntityId()) {
            String id = (String) tag.get("id").getValue();
            if (tracker.getRightShoulder() == null || !tracker.getRightShoulder().equals(id)) {
                tracker.setRightShoulder(id);
                tracker.update();
            }
        }
        event.cancel();
    });
}
Also used : ShoulderTracker(com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ShoulderTracker) Metadata(com.viaversion.viaversion.api.minecraft.metadata.Metadata) StoredEntityData(com.viaversion.viaversion.api.data.entity.StoredEntityData) CompoundTag(com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag) ParrotStorage(com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ParrotStorage)

Example 8 with StoredEntityData

use of com.viaversion.viaversion.api.data.entity.StoredEntityData in project ViaBackwards by ViaVersion.

the class BlockItemPackets1_11 method getChestedHorse.

private Optional<ChestedHorseStorage> getChestedHorse(UserConnection user) {
    WindowTracker tracker = user.get(WindowTracker.class);
    if (tracker.getInventory() != null && tracker.getInventory().equals("EntityHorse")) {
        EntityTracker entTracker = user.getEntityTracker(Protocol1_10To1_11.class);
        StoredEntityData entityData = entTracker.entityData(tracker.getEntityId());
        if (entityData != null)
            return Optional.of(entityData.get(ChestedHorseStorage.class));
    }
    return Optional.empty();
}
Also used : WindowTracker(com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.WindowTracker) EntityTracker(com.viaversion.viaversion.api.data.entity.EntityTracker) StoredEntityData(com.viaversion.viaversion.api.data.entity.StoredEntityData)

Example 9 with StoredEntityData

use of com.viaversion.viaversion.api.data.entity.StoredEntityData in project ViaBackwards by ViaVersion.

the class BlockItemPackets1_11 method isLlama.

private boolean isLlama(UserConnection user) {
    WindowTracker tracker = user.get(WindowTracker.class);
    if (tracker.getInventory() != null && tracker.getInventory().equals("EntityHorse")) {
        EntityTracker entTracker = user.getEntityTracker(Protocol1_10To1_11.class);
        StoredEntityData entityData = entTracker.entityData(tracker.getEntityId());
        return entityData != null && entityData.type().is(Entity1_11Types.EntityType.LIAMA);
    }
    return false;
}
Also used : WindowTracker(com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.WindowTracker) EntityTracker(com.viaversion.viaversion.api.data.entity.EntityTracker) StoredEntityData(com.viaversion.viaversion.api.data.entity.StoredEntityData)

Example 10 with StoredEntityData

use of com.viaversion.viaversion.api.data.entity.StoredEntityData in project ViaBackwards by ViaVersion.

the class EntityPackets1_16 method registerRewrites.

@Override
protected void registerRewrites() {
    filter().handler((event, meta) -> {
        meta.setMetaType(Types1_14.META_TYPES.byId(meta.metaType().typeId()));
        MetaType type = meta.metaType();
        if (type == Types1_14.META_TYPES.itemType) {
            meta.setValue(protocol.getItemRewriter().handleItemToClient((Item) meta.getValue()));
        } else if (type == Types1_14.META_TYPES.blockStateType) {
            meta.setValue(protocol.getMappingData().getNewBlockStateId((int) meta.getValue()));
        } else if (type == Types1_14.META_TYPES.particleType) {
            rewriteParticle((Particle) meta.getValue());
        } else if (type == Types1_14.META_TYPES.optionalComponentType) {
            JsonElement text = meta.value();
            if (text != null) {
                protocol.getTranslatableRewriter().processText(text);
            }
        }
    });
    mapEntityType(Entity1_16Types.ZOMBIFIED_PIGLIN, Entity1_15Types.ZOMBIE_PIGMAN);
    mapTypes(Entity1_16Types.values(), Entity1_15Types.class);
    mapEntityTypeWithData(Entity1_16Types.HOGLIN, Entity1_16Types.COW).jsonName();
    mapEntityTypeWithData(Entity1_16Types.ZOGLIN, Entity1_16Types.COW).jsonName();
    mapEntityTypeWithData(Entity1_16Types.PIGLIN, Entity1_16Types.ZOMBIFIED_PIGLIN).jsonName();
    mapEntityTypeWithData(Entity1_16Types.STRIDER, Entity1_16Types.MAGMA_CUBE).jsonName();
    filter().type(Entity1_16Types.ZOGLIN).cancel(16);
    filter().type(Entity1_16Types.HOGLIN).cancel(15);
    filter().type(Entity1_16Types.PIGLIN).cancel(16);
    filter().type(Entity1_16Types.PIGLIN).cancel(17);
    filter().type(Entity1_16Types.PIGLIN).cancel(18);
    filter().type(Entity1_16Types.STRIDER).index(15).handler((event, meta) -> {
        boolean baby = meta.value();
        meta.setTypeAndValue(Types1_14.META_TYPES.varIntType, baby ? 1 : 3);
    });
    filter().type(Entity1_16Types.STRIDER).cancel(16);
    filter().type(Entity1_16Types.STRIDER).cancel(17);
    filter().type(Entity1_16Types.STRIDER).cancel(18);
    filter().type(Entity1_16Types.FISHING_BOBBER).cancel(8);
    filter().filterFamily(Entity1_16Types.ABSTRACT_ARROW).cancel(8);
    filter().filterFamily(Entity1_16Types.ABSTRACT_ARROW).handler((event, meta) -> {
        if (event.index() >= 8) {
            event.setIndex(event.index() + 1);
        }
    });
    filter().type(Entity1_16Types.WOLF).index(16).handler((event, meta) -> {
        byte mask = meta.value();
        StoredEntityData data = tracker(event.user()).entityData(event.entityId());
        data.put(new WolfDataMaskStorage(mask));
    });
    filter().type(Entity1_16Types.WOLF).index(20).handler((event, meta) -> {
        StoredEntityData data = tracker(event.user()).entityDataIfPresent(event.entityId());
        byte previousMask = 0;
        if (data != null) {
            WolfDataMaskStorage wolfData = data.get(WolfDataMaskStorage.class);
            if (wolfData != null) {
                previousMask = wolfData.tameableMask();
            }
        }
        int angerTime = meta.value();
        byte tameableMask = (byte) (angerTime > 0 ? previousMask | 2 : previousMask & -3);
        event.createExtraMeta(new Metadata(16, Types1_14.META_TYPES.byteType, tameableMask));
        event.cancel();
    });
}
Also used : Item(com.viaversion.viaversion.api.minecraft.item.Item) WolfDataMaskStorage(com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.storage.WolfDataMaskStorage) JsonElement(com.viaversion.viaversion.libs.gson.JsonElement) Metadata(com.viaversion.viaversion.api.minecraft.metadata.Metadata) StoredEntityData(com.viaversion.viaversion.api.data.entity.StoredEntityData) MetaType(com.viaversion.viaversion.api.minecraft.metadata.MetaType)

Aggregations

StoredEntityData (com.viaversion.viaversion.api.data.entity.StoredEntityData)10 EntityTracker (com.viaversion.viaversion.api.data.entity.EntityTracker)3 Metadata (com.viaversion.viaversion.api.minecraft.metadata.Metadata)3 WindowTracker (com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.WindowTracker)2 Preconditions (com.google.common.base.Preconditions)1 ViaBackwards (com.viaversion.viabackwards.ViaBackwards)1 WrappedMetadata (com.viaversion.viabackwards.api.entities.storage.WrappedMetadata)1 SoundRewriter (com.viaversion.viabackwards.api.rewriters.SoundRewriter)1 ChestedHorseStorage (com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage)1 ParrotStorage (com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ParrotStorage)1 ShoulderTracker (com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ShoulderTracker)1 Protocol1_13_2To1_14 (com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14)1 EntityPositionStorage1_14 (com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14)1 WolfDataMaskStorage (com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.storage.WolfDataMaskStorage)1 UserConnection (com.viaversion.viaversion.api.connection.UserConnection)1 ClientEntityIdChangeListener (com.viaversion.viaversion.api.data.entity.ClientEntityIdChangeListener)1 EntityType (com.viaversion.viaversion.api.minecraft.entities.EntityType)1 Item (com.viaversion.viaversion.api.minecraft.item.Item)1 MetaType (com.viaversion.viaversion.api.minecraft.metadata.MetaType)1 PacketWrapper (com.viaversion.viaversion.api.protocol.packet.PacketWrapper)1