Search in sources :

Example 1 with MetaType1_9

use of com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9 in project ViaBackwards by ViaVersion.

the class EntityPackets1_11 method registerPackets.

@Override
protected void registerPackets() {
    protocol.registerClientbound(ClientboundPackets1_9_3.EFFECT, new PacketRemapper() {

        @Override
        public void registerMap() {
            map(Type.INT);
            map(Type.POSITION);
            map(Type.INT);
            handler(wrapper -> {
                int type = wrapper.get(Type.INT, 0);
                if (type == 2002 || type == 2007) {
                    // 2007 potion id doesn't exist in 1.10
                    if (type == 2007) {
                        wrapper.set(Type.INT, 0, 2002);
                    }
                    int mappedData = PotionSplashHandler.getOldData(wrapper.get(Type.INT, 1));
                    if (mappedData != -1) {
                        wrapper.set(Type.INT, 1, mappedData);
                    }
                }
            });
        }
    });
    protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_ENTITY, new PacketRemapper() {

        @Override
        public void registerMap() {
            // 0 - Entity id
            map(Type.VAR_INT);
            // 1 - UUID
            map(Type.UUID);
            // 2 - Type
            map(Type.BYTE);
            // 3 - x
            map(Type.DOUBLE);
            // 4 - y
            map(Type.DOUBLE);
            // 5 - z
            map(Type.DOUBLE);
            // 6 - Pitch
            map(Type.BYTE);
            // 7 - Yaw
            map(Type.BYTE);
            // 8 - data
            map(Type.INT);
            // Track Entity
            handler(getObjectTrackerHandler());
            handler(getObjectRewriter(id -> Entity1_11Types.ObjectType.findById(id).orElse(null)));
            // Handle FallingBlock blocks
            handler(new PacketHandler() {

                @Override
                public void handle(PacketWrapper wrapper) throws Exception {
                    Optional<Entity1_12Types.ObjectType> type = Entity1_12Types.ObjectType.findById(wrapper.get(Type.BYTE, 0));
                    if (type.isPresent() && type.get() == Entity1_12Types.ObjectType.FALLING_BLOCK) {
                        int objectData = wrapper.get(Type.INT, 0);
                        int objType = objectData & 4095;
                        int data = objectData >> 12 & 15;
                        Block block = protocol.getItemRewriter().handleBlock(objType, data);
                        if (block == null)
                            return;
                        wrapper.set(Type.INT, 0, block.getId() | block.getData() << 12);
                    }
                }
            });
        }
    });
    registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB);
    registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER);
    protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() {

        @Override
        public void registerMap() {
            // 0 - Entity id
            map(Type.VAR_INT);
            // 1 - UUID
            map(Type.UUID);
            // 2 - Entity Type
            map(Type.VAR_INT, Type.UNSIGNED_BYTE);
            // 3 - X
            map(Type.DOUBLE);
            // 4 - Y
            map(Type.DOUBLE);
            // 5 - Z
            map(Type.DOUBLE);
            // 6 - Yaw
            map(Type.BYTE);
            // 7 - Pitch
            map(Type.BYTE);
            // 8 - Head Pitch
            map(Type.BYTE);
            // 9 - Velocity X
            map(Type.SHORT);
            // 10 - Velocity Y
            map(Type.SHORT);
            // 11 - Velocity Z
            map(Type.SHORT);
            // 12 - Metadata
            map(Types1_9.METADATA_LIST);
            // Track entity
            handler(getTrackerHandler(Type.UNSIGNED_BYTE, 0));
            // Rewrite entity type / metadata
            handler(wrapper -> {
                int entityId = wrapper.get(Type.VAR_INT, 0);
                EntityType type = tracker(wrapper.user()).entityType(entityId);
                List<Metadata> list = wrapper.get(Types1_9.METADATA_LIST, 0);
                handleMetadata(wrapper.get(Type.VAR_INT, 0), list, wrapper.user());
                EntityData entityData = entityDataForType(type);
                if (entityData != null) {
                    wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.replacementId());
                    if (entityData.hasBaseMeta()) {
                        entityData.defaultMeta().createMeta(new WrappedMetadata(list));
                    }
                }
                // Sub 1.11 clients will error if the list is empty
                if (list.isEmpty()) {
                    list.add(new Metadata(0, MetaType1_9.Byte, (byte) 0));
                }
            });
        }
    });
    registerTracker(ClientboundPackets1_9_3.SPAWN_PAINTING, Entity1_11Types.EntityType.PAINTING);
    registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER);
    registerRespawn(ClientboundPackets1_9_3.RESPAWN);
    protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_PLAYER, new PacketRemapper() {

        @Override
        public void registerMap() {
            // 0 - Entity ID
            map(Type.VAR_INT);
            // 1 - Player UUID
            map(Type.UUID);
            // 2 - X
            map(Type.DOUBLE);
            // 3 - Y
            map(Type.DOUBLE);
            // 4 - Z
            map(Type.DOUBLE);
            // 5 - Yaw
            map(Type.BYTE);
            // 6 - Pitch
            map(Type.BYTE);
            // 7 - Metadata list
            map(Types1_9.METADATA_LIST);
            handler(getTrackerAndMetaHandler(Types1_9.METADATA_LIST, Entity1_11Types.EntityType.PLAYER));
            handler(wrapper -> {
                // Sub 1.11 clients will cry if the list is empty
                List<Metadata> metadata = wrapper.get(Types1_9.METADATA_LIST, 0);
                if (metadata.isEmpty()) {
                    metadata.add(new Metadata(0, MetaType1_9.Byte, (byte) 0));
                }
            });
        }
    });
    registerRemoveEntities(ClientboundPackets1_9_3.DESTROY_ENTITIES);
    registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST);
    protocol.registerClientbound(ClientboundPackets1_9_3.ENTITY_STATUS, new PacketRemapper() {

        @Override
        public void registerMap() {
            // 0 - Entity ID
            map(Type.INT);
            // 1 - Entity Status
            map(Type.BYTE);
            handler(new PacketHandler() {

                @Override
                public void handle(PacketWrapper wrapper) throws Exception {
                    byte b = wrapper.get(Type.BYTE, 0);
                    if (b == 35) {
                        wrapper.clearPacket();
                        // Change Game State
                        wrapper.setId(0x1E);
                        // Play Elder Guardian animation
                        wrapper.write(Type.UNSIGNED_BYTE, (short) 10);
                        wrapper.write(Type.FLOAT, 0F);
                    }
                }
            });
        }
    });
}
Also used : EntityData(com.viaversion.viabackwards.api.entities.storage.EntityData) Entity1_12Types(com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types) PacketHandler(com.viaversion.viaversion.api.protocol.remapper.PacketHandler) LegacyEntityRewriter(com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter) WrappedMetadata(com.viaversion.viabackwards.api.entities.storage.WrappedMetadata) ChestedHorseStorage(com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage) PotionSplashHandler(com.viaversion.viabackwards.protocol.protocol1_10to1_11.PotionSplashHandler) PacketWrapper(com.viaversion.viaversion.api.protocol.packet.PacketWrapper) EntityType(com.viaversion.viaversion.api.minecraft.entities.EntityType) MetaType1_9(com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9) Block(com.viaversion.viabackwards.utils.Block) Metadata(com.viaversion.viaversion.api.minecraft.metadata.Metadata) PacketRemapper(com.viaversion.viaversion.api.protocol.remapper.PacketRemapper) Type(com.viaversion.viaversion.api.type.Type) List(java.util.List) StoredEntityData(com.viaversion.viaversion.api.data.entity.StoredEntityData) Types1_9(com.viaversion.viaversion.api.type.types.version.Types1_9) Optional(java.util.Optional) Entity1_11Types(com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types) ClientboundPackets1_9_3(com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3) Protocol1_10To1_11(com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11) PacketRemapper(com.viaversion.viaversion.api.protocol.remapper.PacketRemapper) EntityData(com.viaversion.viabackwards.api.entities.storage.EntityData) StoredEntityData(com.viaversion.viaversion.api.data.entity.StoredEntityData) WrappedMetadata(com.viaversion.viabackwards.api.entities.storage.WrappedMetadata) Metadata(com.viaversion.viaversion.api.minecraft.metadata.Metadata) WrappedMetadata(com.viaversion.viabackwards.api.entities.storage.WrappedMetadata) EntityType(com.viaversion.viaversion.api.minecraft.entities.EntityType) PacketHandler(com.viaversion.viaversion.api.protocol.remapper.PacketHandler) PacketWrapper(com.viaversion.viaversion.api.protocol.packet.PacketWrapper) Block(com.viaversion.viabackwards.utils.Block) List(java.util.List)

Aggregations

EntityData (com.viaversion.viabackwards.api.entities.storage.EntityData)1 WrappedMetadata (com.viaversion.viabackwards.api.entities.storage.WrappedMetadata)1 LegacyEntityRewriter (com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter)1 PotionSplashHandler (com.viaversion.viabackwards.protocol.protocol1_10to1_11.PotionSplashHandler)1 Protocol1_10To1_11 (com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11)1 ChestedHorseStorage (com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage)1 Block (com.viaversion.viabackwards.utils.Block)1 StoredEntityData (com.viaversion.viaversion.api.data.entity.StoredEntityData)1 Entity1_11Types (com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types)1 Entity1_12Types (com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types)1 EntityType (com.viaversion.viaversion.api.minecraft.entities.EntityType)1 Metadata (com.viaversion.viaversion.api.minecraft.metadata.Metadata)1 MetaType1_9 (com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9)1 PacketWrapper (com.viaversion.viaversion.api.protocol.packet.PacketWrapper)1 PacketHandler (com.viaversion.viaversion.api.protocol.remapper.PacketHandler)1 PacketRemapper (com.viaversion.viaversion.api.protocol.remapper.PacketRemapper)1 Type (com.viaversion.viaversion.api.type.Type)1 Types1_9 (com.viaversion.viaversion.api.type.types.version.Types1_9)1 ClientboundPackets1_9_3 (com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3)1 List (java.util.List)1