From 912a109c916b2f6075ab4c46756480413db5faea Mon Sep 17 00:00:00 2001 From: creeper123123321 Date: Mon, 4 Mar 2019 09:20:13 -0300 Subject: [PATCH] trying to rewrite entity data --- .../data/EntityTypeMapping.java | 23 ++++++- .../packets/EntityPackets1_14.java | 65 +++++++++++++++++-- 2 files changed, 82 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java index fed85d0d..98b02f20 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/data/EntityTypeMapping.java @@ -1,6 +1,7 @@ package nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.data; +import us.myles.ViaVersion.api.entities.Entity1_13Types; import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.EntityTypeRewriter; import java.lang.reflect.Field; @@ -10,6 +11,7 @@ import java.util.Optional; public class EntityTypeMapping { private static Map entityTypes = new HashMap<>(); + private static Map oldEntityToOldObject = new HashMap<>(); static { try { @@ -20,9 +22,26 @@ public class EntityTypeMapping { } catch (NoSuchFieldException | IllegalAccessException ex) { ex.printStackTrace(); } + for (Map.Entry newToOld : entityTypes.entrySet()) { + Entity1_13Types.EntityType type1_13 = Entity1_13Types.getTypeFromId(newToOld.getValue(), false); + Entity1_13Types.ObjectTypes object1_13 = null; + for (Entity1_13Types.ObjectTypes objectType : Entity1_13Types.ObjectTypes.values()) { + if (objectType.getType() == type1_13) { + object1_13 = objectType; + break; + } + } + if (object1_13 != null) { + oldEntityToOldObject.put(type1_13.getId(), object1_13.getId()); + } + } } - public static Optional getOldId(int type1_13) { - return Optional.ofNullable(entityTypes.get(type1_13)); + public static Optional getOldId(int type1_14) { + return Optional.ofNullable(entityTypes.get(type1_14)); + } + + public static Optional getObjectId(int type1_13) { + return Optional.ofNullable(oldEntityToOldObject.get(type1_13)); } } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java index 84c96bc4..fa8afab2 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/EntityPackets1_14.java @@ -7,6 +7,10 @@ import nl.matsv.viabackwards.api.rewriters.EntityRewriter; import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14; import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.data.EntityTypeMapping; import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.minecraft.VillagerData; +import us.myles.ViaVersion.api.minecraft.item.Item; +import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_13_2; import us.myles.ViaVersion.api.remapper.PacketHandler; import us.myles.ViaVersion.api.remapper.PacketRemapper; import us.myles.ViaVersion.api.type.Type; @@ -41,8 +45,8 @@ public class EntityPackets1_14 extends EntityRewriter { EntityType1_14.EntityType type1_14 = EntityType1_14.getTypeFromId(typeId); typeId = EntityTypeMapping.getOldId(type1_14.getId()).orElse(type1_14.getId()); - EntityType1_13.EntityType type1_13 = EntityType1_13.getTypeFromId(typeId, true); // todo object id - wrapper.cancel(); + EntityType1_13.EntityType type1_13 = EntityType1_13.getTypeFromId(typeId, true); + typeId = EntityTypeMapping.getObjectId(type1_14.getId()).orElse(type1_14.getId()); if (type1_13 != null) { if (type1_13.is(EntityType1_13.EntityType.FALLING_BLOCK)) { @@ -197,12 +201,65 @@ public class EntityPackets1_14 extends EntityRewriter { }); } }); - - } @Override protected void registerRewrites() { + regEntType(EntityType1_14.EntityType.CAT, EntityType1_14.EntityType.OCELOT).mobName("Cat").spawnMetadata(e -> { + e.add(new Metadata(13, MetaType1_13_2.Byte, (byte) 0x4)); // Tamed cat + }); + regEntType(EntityType1_14.EntityType.OCELOT, EntityType1_14.EntityType.OCELOT).mobName("Ocelot"); + regEntType(EntityType1_14.EntityType.TRADER_LLAMA, EntityType1_14.EntityType.LLAMA).mobName("Trader Llama"); + registerMetaHandler().handle(e -> { + if (e.getData().getMetaType().getTypeID() == 6) { // Slot + Protocol1_13_2To1_14.blockItem.handleItemToClient((Item) e.getData().getValue()); + } + return e.getData(); + }); + // Remove entity pose + registerMetaHandler().filter(EntityType1_14.EntityType.ENTITY, 6).removed(); + registerMetaHandler().filter(EntityType1_14.EntityType.ENTITY).handle(e -> { + if (e.getIndex() > 6) e.getData().setId(e.getIndex() - 1); + return e.getData(); + }); + registerMetaHandler().filter(EntityType1_14.EntityType.CAT, 13).removed(); + registerMetaHandler().filter(EntityType1_14.EntityType.CAT, 14).removed(); + registerMetaHandler().filter(EntityType1_14.EntityType.CAT, 15).removed(); + // Villager data -> var int + registerMetaHandler().handle(e -> { + if (e.getData().getValue() instanceof VillagerData) { + e.getData().setMetaType(MetaType1_13_2.VarInt); + e.getData().setValue(villagerDataToProfession(((VillagerData) e.getData().getValue()))); + } + return e.getData(); + }); + } + + public int villagerDataToProfession(VillagerData data) { + switch (data.getProfession()) { + case 1: // Armorer + case 10: // Mason + case 13: // Toolsmith + case 14: // Weaponsmith + return 3; // Blacksmith + case 2: // Butcher + case 8: // Leatherworker + return 4; // Butcher + case 3: // Cartographer + case 9: // Librarian + return 1; // Librarian + case 4: // Cleric + return 2; // Priest + case 5: // Farmer + case 6: // Fisherman + case 7: // Fletcher + case 12: // Shepherd + return 0; // Farmer + case 0: // None + case 11: // Nitwit + default: + return 5; // Nitwit + } } }