diff --git a/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityData.java b/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityData.java index b553c6b0..2d70e74a 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityData.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityData.java @@ -20,11 +20,17 @@ import lombok.ToString; public class EntityData { private final int id; private final boolean isObject; + private String mobName; private final int replacementId; private final int objectData; private MetaCreator defaultMeta; + public EntityData mobName(String name) { + this.mobName = name; + return this; + } + public void spawnMetadata(MetaCreator handler) { this.defaultMeta = handler; } diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java index 15512938..24b974d8 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java @@ -10,7 +10,10 @@ package nl.matsv.viabackwards.api.rewriters; +import lombok.AccessLevel; +import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; import nl.matsv.viabackwards.ViaBackwards; import nl.matsv.viabackwards.api.BackwardsProtocol; import nl.matsv.viabackwards.api.entities.meta.MetaHandlerEvent; @@ -23,7 +26,9 @@ import nl.matsv.viabackwards.api.entities.types.AbstractObjectType; import nl.matsv.viabackwards.api.exceptions.RemovedValueException; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9; import java.util.ArrayList; import java.util.List; @@ -39,6 +44,13 @@ public abstract class EntityRewriter extends Rewrit private final Map objectTypes = new ConcurrentHashMap<>(); private final List metaHandlers = new ArrayList<>(); + @Getter(AccessLevel.PROTECTED) + @Setter(AccessLevel.PROTECTED) + private MetaType displayNameMetaType = MetaType1_9.String; + @Getter(AccessLevel.PROTECTED) + @Setter(AccessLevel.PROTECTED) + private int displayNameIndex = 2; + protected AbstractEntityType getEntityType(UserConnection connection, int id) { return getEntityTracker(connection).getEntityType(id); } @@ -115,6 +127,21 @@ public abstract class EntityRewriter extends Rewrit newList.clear(); } + // Handle Entity Name + Optional opMd = storage.get(getDisplayNameIndex()); + if (opMd.isPresent()) { + Optional opEd = getEntityData(type); + if (opEd.isPresent()) { + Metadata data = opMd.get(); + EntityData entData = opEd.get(); + if (entData.getMobName() != null && + (data.getValue() == null || ((String) data.getValue()).isEmpty()) && + data.getMetaType().getTypeID() == getDisplayNameMetaType().getTypeID()) + data.setValue(entData.getMobName()); + } + + } + return storage; } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java index 2bb7a8d2..975ec3c9 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java @@ -402,10 +402,10 @@ public class EntityPackets1_11 extends EntityRewriter { regEntType(EntityType.ZOMBIE_HORSE, EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(3))); // New mobs regEntType(EntityType.EVOCATION_FANGS, EntityType.SHULKER); - regEntType(EntityType.EVOCATION_ILLAGER, EntityType.VILLAGER); - regEntType(EntityType.VEX, EntityType.BAT); - regEntType(EntityType.VINDICATION_ILLAGER, EntityType.VILLAGER).spawnMetadata(storage -> storage.add(new Metadata(13, MetaType1_9.VarInt, 4))); // Base Profession - regEntType(EntityType.LIAMA, EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(1))); // TODO fix chest slots + regEntType(EntityType.EVOCATION_ILLAGER, EntityType.VILLAGER).mobName("Evoker"); + regEntType(EntityType.VEX, EntityType.BAT).mobName("Vex"); + regEntType(EntityType.VINDICATION_ILLAGER, EntityType.VILLAGER).mobName("Vindicator").spawnMetadata(storage -> storage.add(new Metadata(13, MetaType1_9.VarInt, 4))); // Base Profession + regEntType(EntityType.LIAMA, EntityType.HORSE).mobName("Llama").spawnMetadata(storage -> storage.add(getHorseMetaType(1))); // TODO fix chest slots regEntType(EntityType.LIAMA_SPIT, EntityType.SNOWBALL); regObjType(ObjectType.LIAMA_SPIT, ObjectType.SNOWBALL, -1); diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/BlockItemPackets1_12.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/BlockItemPackets1_12.java index ac678c6a..949f5f07 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/BlockItemPackets1_12.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/BlockItemPackets1_12.java @@ -282,7 +282,7 @@ public class BlockItemPackets1_12 extends BlockItemRewriter Stained Clay - for (int i = 235; i < 250; i++) { + for (int i = 235; i < 251; i++) { rewrite(i).repItem(new Item((short) 159, (byte) 1, (short) (i - 235), getNamedTag("1.12 Glazed Terracotta"))) .repBlock(new Block(159, (i - 235))); // TODO color provided by name } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/EntityPackets1_12.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/EntityPackets1_12.java index a2a1bd02..c28391e5 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/EntityPackets1_12.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12to1_11_1/packets/EntityPackets1_12.java @@ -359,8 +359,8 @@ public class EntityPackets1_12 extends EntityRewriter { @Override protected void registerRewrites() { - regEntType(EntityType.PARROT, EntityType.BAT).spawnMetadata(storage -> storage.add(new Metadata(12, MetaType1_12.Byte, (byte) 0x00))); - regEntType(EntityType.ILLUSION_ILLAGER, EntityType.EVOCATION_ILLAGER); + regEntType(EntityType.PARROT, EntityType.BAT).mobName("Parrot").spawnMetadata(storage -> storage.add(new Metadata(12, MetaType1_12.Byte, (byte) 0x00))); + regEntType(EntityType.ILLUSION_ILLAGER, EntityType.EVOCATION_ILLAGER).mobName("Illusioner"); // Handle Illager TODO wtf does this metadata do? Is aggresive it is a bitmask? registerMetaHandler().filter(EntityType.EVOCATION_ILLAGER, true, 12).removed(); diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_9_4to1_10/packets/EntityPackets1_10.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_9_4to1_10/packets/EntityPackets1_10.java index 73ef654c..fc026c4b 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_9_4to1_10/packets/EntityPackets1_10.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_9_4to1_10/packets/EntityPackets1_10.java @@ -365,7 +365,7 @@ public class EntityPackets1_10 extends EntityRewriter { @Override protected void registerRewrites() { - regEntType(EntityType.POLAR_BEAR, EntityType.SHEEP); + regEntType(EntityType.POLAR_BEAR, EntityType.SHEEP).mobName("Polar Bear"); // Change the sheep color when the polar bear is standing up (index 13 -> Standing up) registerMetaHandler().filter(EntityType.POLAR_BEAR, 13).handle((e -> {