From cb1bf131409fd4b22cf9f06ebe5d44be2d00dd8c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 25 Nov 2020 18:23:12 +0100 Subject: [PATCH] entity mappings for 1.8.9, pre flattening bug fixes --- ...b8435362ef4ccb88df70d0abf405fddd87b.tar.gz | Bin 0 -> 1921 bytes .../minosoft/data/EntityClassMappings.java | 1 + .../data/entities/EntityMetaData.java | 8 +- .../data/entities/EntityMetaDataFields.java | 21 ++++- .../minosoft/data/entities/Objects.java | 2 +- .../data/entities/entities/Entity.java | 5 ++ .../data/entities/entities/animal/Wolf.java | 3 + .../entities/entities/animal/horse/Horse.java | 19 ++++ .../entities/decoration/ItemFrame.java | 3 +- .../entities/entities/monster/Enderman.java | 3 + .../entities/monster/ZombiePigman.java | 32 +++++++ .../entities/entities/monster/raid/Witch.java | 4 + .../data/mappings/VersionTweaker.java | 82 ++++++++++++++++++ .../events/CollectItemAnimationEvent.java | 21 ++--- .../clientbound/play/PacketCollectItem.java | 22 +++-- .../clientbound/play/PacketSpawnMob.java | 3 + .../clientbound/play/PacketSpawnObject.java | 6 ++ .../protocol/protocol/InByteBuffer.java | 4 + .../resources/assets/mapping/resources.json | 2 +- 19 files changed, 212 insertions(+), 29 deletions(-) create mode 100644 data/resources/61/61406b8435362ef4ccb88df70d0abf405fddd87b.tar.gz create mode 100644 src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombiePigman.java create mode 100644 src/main/java/de/bixilon/minosoft/data/mappings/VersionTweaker.java diff --git a/data/resources/61/61406b8435362ef4ccb88df70d0abf405fddd87b.tar.gz b/data/resources/61/61406b8435362ef4ccb88df70d0abf405fddd87b.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..497480aa8588a5f7116c7cdb8cd883bdfee58ad7 GIT binary patch literal 1921 zcmV-{2Y&b;iwFSIk-lF51MOPfbD~HPzvulcQv1ARiQnGah$B)#uwYEeeWB2xazXKs zY%Y7X|NHeIA}|e_O;UGPwNxd>nWpK_Uw032caax)?xFU_A=v%)F;~4_?{r!>@F{iM z_3S6V8uf0wc_THuZCLC!T8*2!)M__dzunY7NS@sFbcmb~MA-(R7kw|MyR?5)<|h68 zpIm=`y1Dth^>*$ubXL*l-*5N=EGa|X~wsF1n zhO?1sy>#)xiJS~0SdmRir_{79Mi}MPDTmCaYT5Fbm_knZYc=V&D^$^_Lgcw^-BOJ*L$}#{8f(-;hn01*^>k? z^gC)YRaf}!Ej+?~Z;M#1jaaQM#pu+=!a>+WqC!(AU?cVGF=z3Z*f<9yCOU#NNKCdW zo~?|D#kffbV?@49EP~6B_-F5}w+@o{-Rt8i$JX6J!l4{{*KurA=3Ig#RENx)5Z#uE zX{vN+4>Uu*ErMhvu{|V=6hSj31shs`pk$KR5Xa4>^Ubx(Fs6^_+eL#aAE}=I%?(%H zVI#2YV08tBt!9qp!gs!l!QZ(W+pDV7KqFu283XZH+d2?r_VQ_gNFhS;btx!Do&69x zYov&EM68t%J$pzI5_w@b+ZUNNYgHI=ud*><*TApX*dA)- z-W6&pGhz-^fWouMGr^JWq9Kc$!sj`PiGS|F`u#2<@NqrI49b>ZfIbF~NN!d~*;G|* zD5JJThC{8Qh95T2{EISRpo+*K)tVJDSYznjFU9&YcorXzp(+0OJg<$ne00T_>Wk1> z5~TSq_3-CYe1Cx(3Z6I)mvr0Pt=! zvM4L&SxRP&jr(+VElIT1Q@C@MuKi(F8_i6e$TaSHMl-5av>Y4v5dEAW`Qo*Ao_Ej; zzMa!1*zezkQM7vx#g@T#>+Bxvg&!;*Kh9&aF_{qkbdZsJ;}O)vf-Fz1@gpK*#-_74 zEb-&AX!k0i`}x@!h8}wvz8oUQ$GBi8x0fN9f(EiVw;0sFv|YoCf)j@M-uS}MSp{cl zjV7iExq6`|=Uv&t@lmzQ(KK(o_4*BWue{JL6F?I0m-5nY;ZD1X1q`DSE(c#P1_31I z-gUyaSR;KG@bohRT|R=bZfBYXn6E3;G-g(L&02v)yxsbk*>A`VUTf`D=;TkMt6X%c z){ac*$Ir44h2qkeO>L%ZH4jcP%7nF!` zg=w5{8$d!uP^PZt0h4045+wPkz+Y4XMyCjw?TfMm@!?}8ASJ1Ua9|AQIl@K>VSE${ z3pwIu3Gwj+v`F2mVhtMQh})H{i`00f;0OFMo&<}<+fvSVUS9Qjt!mtvYGfXxqN>|d z=p8KFoe3G#M#G$PJ-JhXy4ZW4*vW=jG450T?-egu4Mf3`QDUV$ESb$Url~pzph``f9(1PAkqo= H04M+eb*REm literal 0 HcmV?d00001 diff --git a/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java b/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java index 5dd3578d2..593e3d804 100644 --- a/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java +++ b/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java @@ -154,6 +154,7 @@ public final class EntityClassMappings { ENTITY_CLASS_MAPPINGS.put(Zombie.class, new ModIdentifier("zombie")); ENTITY_CLASS_MAPPINGS.put(ZombieHorse.class, new ModIdentifier("zombie_horse")); ENTITY_CLASS_MAPPINGS.put(ZombieVillager.class, new ModIdentifier("zombie_villager")); + ENTITY_CLASS_MAPPINGS.put(ZombiePigman.class, new ModIdentifier("zombie_pigman")); ENTITY_CLASS_MAPPINGS.put(ZombifiedPiglin.class, new ModIdentifier("zombified_piglin")); ENTITY_CLASS_MAPPINGS.put(PlayerEntity.class, new ModIdentifier("player")); ENTITY_CLASS_MAPPINGS.put(FishingHook.class, new ModIdentifier("fishing_bobber")); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java index 600f1d027..a582cdcf5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java @@ -44,7 +44,7 @@ public class EntityMetaData { return switch (type) { case BYTE -> buffer.readByte(); case VAR_INT -> buffer.readVarInt(); - case SHORT -> buffer.readShort(); + case SHORT -> buffer.readUnsignedShort(); case INT -> buffer.readInt(); case FLOAT -> buffer.readFloat(); case STRING -> buffer.readString(); @@ -226,7 +226,11 @@ public class EntityMetaData { } public ChatComponent getChatComponent(EntityMetaDataFields field) { - return get(field); + Object object = get(field); + if (object instanceof String string) { + return ChatComponent.fromString(string); + } + return (ChatComponent) object; } public String getString(EntityMetaDataFields field) { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java index 10d9ece76..e35c15a6f 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java @@ -71,7 +71,7 @@ public enum EntityMetaDataFields { BOAT_HURT(0), BOAT_HURT_DIRECTION(1), BOAT_DAMAGE_TAKEN(0f), - BOAT_MATERIAL(Boat.BoatMaterials.OAK), + BOAT_MATERIAL(Boat.BoatMaterials.OAK.ordinal()), BOAT_PADDLE_LEFT(false), BOAT_PADDLE_RIGHT(false), BOAT_BUBBLE_TIME(0), @@ -265,7 +265,24 @@ public enum EntityMetaDataFields { PILLAGER_IS_CHARGING_CROSSBOW(false), - THROWN_EYE_OF_ENDER_ITEM; + THROWN_EYE_OF_ENDER_ITEM, + + + // pretty old stuff here. 1.8 mostly (or even after, I don't know and I don't care) + LEGACY_SKELETON_TYPE((byte) 0), + LEGACY_ENDERMAN_CARRIED_BLOCK(0), + LEGACY_ENDERMAN_CARRIED_BLOCK_DATA(0), + LEGACY_WITCH_IS_AGGRESSIVE(false), + LEGACY_GUARDIAN_FLAGS((byte) 0), + LEGACY_OCELOT_TYPE((byte) 0), + LEGACY_HORSE_OWNER_NAME(""), + LEGACY_HORSE_SPECIAL_TYPE((byte) 0), + LEGACY_HORSE_ARMOR(0), + LEGACY_VILLAGE_PROFESSION(0), + LEGACY_END_CRYSTAL_HEALTH(5), + LEGACY_LIVING_ENTITY_AI_DISABLED((byte) 0), + LEGACY_AGEABLE_ENTITY_AGE((byte) 0), + LEGACY_AGEABLE_OWNER_NAME(""); private final Object defaultValue; diff --git a/src/main/java/de/bixilon/minosoft/data/entities/Objects.java b/src/main/java/de/bixilon/minosoft/data/entities/Objects.java index 63a41b27b..d8bd34796 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/Objects.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/Objects.java @@ -37,7 +37,7 @@ public enum Objects { ARROW(60, Arrow.class), // ToDo: Tipped Arrows SNOWBALL(61, ThrownSnowball.class), EGG(62, ThrownEgg.class), - FIREBALL(63, Fireball.class), + FIREBALL(63, LargeFireball.class), FIRE_CHARGE(64, SmallFireball.class), ENDER_PEARL(65, ThrownEnderPearl.class), WITHER_SKULL(66, WitherSkull.class), diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.java index 9b3e22c66..8fd84efc2 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.java @@ -32,6 +32,7 @@ import java.util.TreeMap; import java.util.UUID; public abstract class Entity { + protected final Connection connection; protected final EntityInformation information; protected final int entityId; protected final UUID uuid; @@ -44,6 +45,7 @@ public abstract class Entity { protected EntityMetaData metaData; public Entity(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { + this.connection = connection; this.information = connection.getMapping().getEntityInformation(getClass()); this.entityId = entityId; this.uuid = uuid; @@ -230,6 +232,9 @@ public abstract class Entity { @Override public String toString() { + if (information == null) { + return this.getClass().getCanonicalName(); + } return String.format("%s:%s", information.getMod(), information.getIdentifier()); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java index af5599ae4..673bf1222 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java @@ -42,6 +42,9 @@ public class Wolf extends TamableAnimal { @EntityMetaDataFunction(identifier = "angerTime") public int getAngerTime() { + if (versionId <= 47) {//ToDo + return metaData.getSets().getBitMask(EntityMetaDataFields.TAMABLE_ENTITY_FLAGS, 0x02) ? 1 : 0; + } return metaData.getSets().getInt(EntityMetaDataFields.WOLF_ANGER_TIME); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java index f30a814d2..f00c05400 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java @@ -17,11 +17,16 @@ import de.bixilon.minosoft.data.entities.EntityMetaDataFields; import de.bixilon.minosoft.data.entities.EntityRotation; import de.bixilon.minosoft.data.entities.Location; import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction; +import de.bixilon.minosoft.data.mappings.Item; import de.bixilon.minosoft.protocol.network.Connection; +import javax.annotation.Nullable; import java.util.UUID; public class Horse extends AbstractHorse { + private static final Item LEGACY_IRON_ARMOR = new Item("iron_horse_armor"); + private static final Item LEGACY_GOLD_ARMOR = new Item("golden_horse_armor"); + private static final Item LEGACY_DIAMOND_ARMOR = new Item("diamond_horse_armor"); public Horse(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); @@ -45,6 +50,20 @@ public class Horse extends AbstractHorse { return HorseDots.byId(getVariant() >> 8); } + @EntityMetaDataFunction(identifier = "armor") + @Nullable + public Item getArmor() { + if (versionId <= 47) { // ToDo + return null; + } + return switch (metaData.getSets().getInt(EntityMetaDataFields.LEGACY_HORSE_ARMOR)) { + default -> null; + case 1 -> LEGACY_IRON_ARMOR; + case 2 -> LEGACY_GOLD_ARMOR; + case 3 -> LEGACY_DIAMOND_ARMOR; + }; + } + public enum HorseColors { WHITE, CREAMY, diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java index 115fd5c4e..226763197 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java @@ -29,6 +29,7 @@ public class ItemFrame extends HangingEntity { super(connection, entityId, uuid, location, rotation); } + @EntityMetaDataFunction(identifier = "item") @Nullable public Slot getItem() { @@ -36,7 +37,7 @@ public class ItemFrame extends HangingEntity { } @EntityMetaDataFunction(identifier = "itemRotationLevel") - public int getItemRotation() { + public int get() { return metaData.getSets().getInt(EntityMetaDataFields.ITEM_FRAME_ROTATION); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java index 8d8638aec..edd1b6376 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java @@ -32,6 +32,9 @@ public class Enderman extends AbstractSkeleton { @EntityMetaDataFunction(identifier = "carriedBlock") @Nullable public Block getCarriedBlock() { + if (versionId <= 47) { // ToDo: No clue here + return connection.getMapping().getBlockById(metaData.getSets().getInt(EntityMetaDataFields.LEGACY_ENDERMAN_CARRIED_BLOCK) << 4 | metaData.getSets().getInt(EntityMetaDataFields.LEGACY_ENDERMAN_CARRIED_BLOCK_DATA)); + } return metaData.getSets().getBlock(EntityMetaDataFields.ENDERMAN_CARRIED_BLOCK); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombiePigman.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombiePigman.java new file mode 100644 index 000000000..130cb96d7 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombiePigman.java @@ -0,0 +1,32 @@ +/* + * Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program.If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.entities.entities.monster; + +import de.bixilon.minosoft.data.entities.EntityRotation; +import de.bixilon.minosoft.data.entities.Location; +import de.bixilon.minosoft.protocol.network.Connection; + +import java.util.UUID; + +/** + * This class is just for the hashmap, it is not used anywhere + */ +@Deprecated +public class ZombiePigman extends ZombifiedPiglin { + + public ZombiePigman(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { + super(connection, entityId, uuid, location, rotation); + } +} + diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java index d6d4f3e13..6e8dab743 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java @@ -31,4 +31,8 @@ public class Witch extends Raider { public boolean isDrinkingPotion() { return metaData.getSets().getBoolean(EntityMetaDataFields.WITCH_IS_DRINKING_POTION); } + + public boolean isAggressive() { + return metaData.getSets().getBoolean(EntityMetaDataFields.LEGACY_WITCH_IS_AGGRESSIVE); + } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/VersionTweaker.java b/src/main/java/de/bixilon/minosoft/data/mappings/VersionTweaker.java new file mode 100644 index 000000000..6c7704e97 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/mappings/VersionTweaker.java @@ -0,0 +1,82 @@ +/* + * Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program.If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.mappings; + +import de.bixilon.minosoft.data.entities.EntityMetaData; +import de.bixilon.minosoft.data.entities.EntityMetaDataFields; +import de.bixilon.minosoft.data.entities.entities.Entity; +import de.bixilon.minosoft.data.entities.entities.animal.horse.*; +import de.bixilon.minosoft.data.entities.entities.monster.*; +import de.bixilon.minosoft.data.entities.entities.vehicle.*; + +public class VersionTweaker { + // some data was packed in mata data in early versions (1.8). This function converts it to the real identifier + public static Class getRealEntityClass(Class fakeClass, EntityMetaData metaData, int versionId) { + if (fakeClass == ZombiePigman.class) { + return ZombifiedPiglin.class; + } else if (fakeClass == Zombie.class) { + if (versionId > 47) { // ToDo: No clue here + return fakeClass; + } + if (metaData.getSets().getInt(EntityMetaDataFields.ZOMBIE_SPECIAL_TYPE) == 1) { + return ZombieVillager.class; + } + } else if (fakeClass == Skeleton.class) { + if (versionId > 47) { // ToDo: No clue here + return fakeClass; + } + if (metaData.getSets().getInt(EntityMetaDataFields.LEGACY_SKELETON_TYPE) == 1) { + return WitherSkeleton.class; + } + } else if (fakeClass == Guardian.class) { + if (versionId > 47) { // ToDo: No clue here + return fakeClass; + } + if (metaData.getSets().getBitMask(EntityMetaDataFields.LEGACY_GUARDIAN_FLAGS, 0x02)) { + return ElderGuardian.class; + } + } else if (fakeClass == Horse.class) { + if (versionId > 47) { // ToDo: No clue here + return fakeClass; + } + return switch (metaData.getSets().getByte(EntityMetaDataFields.LEGACY_HORSE_SPECIAL_TYPE)) { + default -> fakeClass; + case 1 -> Donkey.class; + case 2 -> Mule.class; + case 3 -> ZombieHorse.class; + case 4 -> SkeletonHorse.class; + }; + + } + return fakeClass; + } + + public static Class getRealEntityObjectClass(Class fakeClass, int data, int versionId) { + if (fakeClass == Minecart.class) { + if (versionId > 47) { // ToDo: No clue here + return fakeClass; + } + return switch (data) { + default -> fakeClass; + case 1 -> MinecartChest.class; + case 2 -> MinecartFurnace.class; + case 3 -> MinecartTNT.class; + case 4 -> MinecartSpawner.class; + case 5 -> MinecartHopper.class; + case 6 -> MinecartCommandBlock.class; + }; + } + return fakeClass; + } +} diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java index d64ffbe2e..b7350d126 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java @@ -13,36 +13,37 @@ package de.bixilon.minosoft.modding.event.events; -import de.bixilon.minosoft.data.mappings.Item; +import de.bixilon.minosoft.data.entities.entities.Entity; +import de.bixilon.minosoft.data.entities.entities.item.ItemEntity; import de.bixilon.minosoft.modding.event.events.annotations.MinimumProtocolVersion; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketCollectItem; public class CollectItemAnimationEvent extends CancelableEvent { - private final Item item; - private final int collectorEntityId; + private final ItemEntity item; + private final Entity collector; private final int count; - public CollectItemAnimationEvent(Connection connection, Item item, int collectorEntityId, int count) { + public CollectItemAnimationEvent(Connection connection, ItemEntity item, Entity collector, int count) { super(connection); this.item = item; - this.collectorEntityId = collectorEntityId; + this.collector = collector; this.count = count; } public CollectItemAnimationEvent(Connection connection, PacketCollectItem pkg) { super(connection); - this.item = pkg.getItem(); - this.collectorEntityId = pkg.getCollectorId(); + this.item = (ItemEntity) connection.getPlayer().getWorld().getEntity(pkg.getItemEntityId()); + this.collector = connection.getPlayer().getWorld().getEntity(pkg.getCollectorEntityId()); this.count = pkg.getCount(); } - public Item getItem() { + public ItemEntity getItem() { return item; } - public int getCollectorEntityId() { - return collectorEntityId; + public Entity getCollector() { + return collector; } @MinimumProtocolVersion(versionId = 301) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCollectItem.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCollectItem.java index 5dafaaf1b..b0bf74bd0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCollectItem.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCollectItem.java @@ -13,26 +13,24 @@ package de.bixilon.minosoft.protocol.packets.clientbound.play; -import de.bixilon.minosoft.data.mappings.Item; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.packets.ClientboundPacket; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.PacketHandler; public class PacketCollectItem implements ClientboundPacket { - Item item; - int collectorId; + int itemEntityId; + int collectorEntityId; int count; @Override public boolean read(InByteBuffer buffer) { + itemEntityId = buffer.readEntityId(); if (buffer.getVersionId() < 7) { - item = buffer.getConnection().getMapping().getItemById(buffer.readInt()); - collectorId = buffer.readInt(); + collectorEntityId = buffer.readInt(); return true; } - item = buffer.getConnection().getMapping().getItemById(buffer.readVarInt()); - collectorId = buffer.readVarInt(); + collectorEntityId = buffer.readVarInt(); if (buffer.getVersionId() >= 301) { count = buffer.readVarInt(); } @@ -46,15 +44,15 @@ public class PacketCollectItem implements ClientboundPacket { @Override public void log() { - Log.protocol(String.format("[IN] Item %s was collected by %d (count=%s)", item, collectorId, ((count == 0) ? "?" : count))); + Log.protocol(String.format("[IN] Item %d was collected by %d (count=%s)", itemEntityId, collectorEntityId, ((count == 0) ? "?" : count))); } - public Item getItem() { - return item; + public int getItemEntityId() { + return itemEntityId; } - public int getCollectorId() { - return collectorId; + public int getCollectorEntityId() { + return collectorEntityId; } public int getCount() { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnMob.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnMob.java index 2576c931d..4d799af27 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnMob.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnMob.java @@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.entities.Location; import de.bixilon.minosoft.data.entities.Velocity; import de.bixilon.minosoft.data.entities.entities.Entity; import de.bixilon.minosoft.data.entities.entities.UnknownEntityException; +import de.bixilon.minosoft.data.mappings.VersionTweaker; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.packets.ClientboundPacket; @@ -58,6 +59,8 @@ public class PacketSpawnMob implements ClientboundPacket { EntityMetaData metaData = null; if (buffer.getVersionId() < 550) { metaData = buffer.readMetaData(); + // we have meta data, check if we need to correct the class + typeClass = VersionTweaker.getRealEntityClass(typeClass, metaData, buffer.getVersionId()); } if (typeClass == null) { throw new UnknownEntityException(String.format("Unknown entity (typeId=%d)", type)); diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java index 1217d5bd1..d3f1f4475 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java @@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.entities.Objects; import de.bixilon.minosoft.data.entities.Velocity; import de.bixilon.minosoft.data.entities.entities.Entity; import de.bixilon.minosoft.data.entities.entities.UnknownEntityException; +import de.bixilon.minosoft.data.mappings.VersionTweaker; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.packets.ClientboundPacket; @@ -69,6 +70,11 @@ public class PacketSpawnObject implements ClientboundPacket { } else { velocity = new Velocity(buffer.readShort(), buffer.readShort(), buffer.readShort()); } + + if (buffer.getVersionId() <= 47) { // ToDo + typeClass = VersionTweaker.getRealEntityObjectClass(typeClass, data, buffer.getVersionId()); + } + if (typeClass == null) { throw new UnknownEntityException(String.format("Unknown entity (typeId=%d)", type)); } diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java index ba5ceeb60..cb80d7329 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java @@ -73,6 +73,10 @@ public class InByteBuffer { return buffer.getShort(0); } + public int readUnsignedShort() { + return readShort() & 0xFFFF; + } + public int readInt() { ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES); buffer.put(readBytes(Integer.BYTES)); diff --git a/src/main/resources/assets/mapping/resources.json b/src/main/resources/assets/mapping/resources.json index f62ef0e17..e74869ca7 100644 --- a/src/main/resources/assets/mapping/resources.json +++ b/src/main/resources/assets/mapping/resources.json @@ -1 +1 @@ -{"mappings\/20w46a":"135401a57a8cb5ce0818c512754db37450d16b86","mappings\/20w45a":"203695c4ef2f0a17676e1f1743d0b1d2c3c04239","mappings\/1.16.4":"24bb239b0e14ea742436fe9f08ccf179ca88b7d0","mappings\/1.16.4-rc1":"1e088b54f971faa54d3f27f61a12fe040b6c20ef","mappings\/1.16.4-pre2":"d27ff6aac6271a99472d842fbef83e03553ee2f2","mappings\/1.16.4-pre1":"388897795ad27cbbc0fd7b626c803965b35d1934","mappings\/1.16.3":"a575d45d4367578ca8e2b70018b3c031c82ce496","mappings\/1.16.3-rc1":"c02763afe8aefca1beff0c5e3fb8d77d48624082","mappings\/1.16.2":"00013780a993f90a6f68141939f91af02cc31d0d","mappings\/1.16.2-rc2":"609a840d4c452210476940e00e9344e2d1f72491","mappings\/1.16.2-rc1":"67dbccbf3f3049c6563f56b5de9f46872ddcd60d","mappings\/1.16.2-pre3":"c8cdfb870e2457eeec407d356c57986102ba54a8","mappings\/1.16.2-pre2":"b1f88258b0d10cbca8db7a5006e533e7f8d1279b","mappings\/1.16.2-pre1":"74afcd2e469c6b884cd6cba77396c8153d3b5345","mappings\/20w30a":"51059d88d40567727f68705ea010ddc382cba472","mappings\/20w29a":"c53e25e119d2404cbe3411369c6b9f265371e7d0","mappings\/20w28a":"7d4ba9874038ad167ab98c09ee39bf4c185159f8","mappings\/20w27a":"8694af12f21653bc1bd22d89834271e50ce6f29c","mappings\/1.16.1":"5f3d51e70bd22728fb9fd26ef8c5894d610e83cf","mappings\/1.16":"af2a82457c48763d17575a450e3808f3a3e431b8","mappings\/1.16-rc1":"0ab71b56bd55007d8a03436d3642252e85f58626","mappings\/1.16-pre8":"02949a83bd37de9bba46b9c03e8efb7b2240c0ca","mappings\/1.16-pre7":"39715549b3e31904f5d3f5c2a5ccf0b61635dab4","mappings\/1.16-pre6":"2b6b47db379ad28214065a1192a199bfd6bd4aed","mappings\/1.16-pre5":"5076854bba855eddf2e74b1ca87e53649c0fbe49","mappings\/1.16-pre4":"0d0cdfdfc3e29f719d4c5d4b161442127c500560","mappings\/1.16-pre3":"b232316ce4e7b5add7442e76dd226d0b72ff8d3d","mappings\/1.16-pre2":"b71eac2496fcffbe8f13ee99af5d1f33da81454e","mappings\/1.16-pre1":"f748f7f14c3940fd705281fa9210520254e51ff1","mappings\/20w22a":"9a09f7b7fc69c187c63687c0097dd9424cbb08c2","mappings\/20w21a":"bd91a8b3534562f28e7fd9d448ceec60944c824c","mappings\/20w20b":"f4385e126ad2ea36a82d52a71f057028bffea0a0","mappings\/20w20a":"5ac7c5b40c0a13259d2e8f5886b39e2f672b1dda","mappings\/20w19a":"ff64bbdc04e5c378f032f15739fb418b18e154b5","mappings\/20w18a":"4a0816ef2975962a3de95a5e5c716ea81b760e7e","mappings\/20w17a":"28298f3613a2ce7720242126da27ae1fe8089c06","mappings\/20w16a":"25df7b68d7a5fd288d8ab11613c77e274a0e04ff","mappings\/20w15a":"598f38aa7da8d7139b2fab3980ca3d8418672601","mappings\/20w14a":"6b6218e9e2bd463d3f94047674ccff6eb1ff270e","mappings\/20w14infinite":"3285db9e8431af974f159aea87ddf8a39c340ef1","mappings\/20w13b":"c23f7c357d3109a6566a5ccf2dbec3237f7510fa","mappings\/20w13a":"4400239805718f68be44a7593c4bb528a5dc952a","mappings\/20w12a":"2412680f56f4ecf33774ea58676db78b7d4129c9","mappings\/20w11a":"13c444e9be54b40f018afdf2a89248ad2a016792","mappings\/20w10a":"12c99669ecc5a24c2bd70a06bad7fa5a41b07699","mappings\/20w09a":"755ebbf9c13f1d8b3dd5f9d68522106dc7aa772d","mappings\/20w08a":"c1260870c8a15659c870c81dcccb6406bddf2ea9","mappings\/20w07a":"48335917cce12d608ba954bac5c32e3c7e52478a","mappings\/20w06a":"79206e553b0fc1f19ec1d87160c886f963af9a77","mappings\/1.15.2":"760141d986c6d4f4363aac56426802c2d8fbba19","mappings\/1.15.2-pre2":"595d8f2e5daafc064310b42790600c39b056b8da","mappings\/1.15.2-pre1":"991fcce3b22b2c8a0e614aca5e8b457e896a1288","mappings\/1.15.1":"de7fe2e2253c5b60fd47c812005ef69faaf9dcb7","mappings\/1.15.1-pre1":"0faf609dd84d81c58135cdf43f430e83676ec820","mappings\/1.15":"b055f178e93382622e6cd97985faee3f26491b72","mappings\/1.15-pre7":"ecca2170a62af538a6f9f3106676c1cd5fe53319","mappings\/1.15-pre6":"9218a3480df57de8a7bb9e84706b2fb0664ec563","mappings\/1.15-pre5":"bae7926afd5239b8c92d2ab036a479127790a745","mappings\/1.15-pre4":"28c075af470bb56343543fc12a13457d16b0aafa","mappings\/1.15-pre3":"677fc1045b273ea100c49dc8970828639b198987","mappings\/1.15-pre2":"cf70a4b82daa2a4fb390a75a80ae1a60ead8f491","mappings\/1.15-pre1":"ed04495589c8a4eca828c640b29326451231ebcb","mappings\/19w46b":"15e9f7cac5e105ddae1fd38e1ef876ccdd524f88","mappings\/19w46a":"c9c36d4f2a2b9acae81952cfedf952080351d898","mappings\/19w45b":"7eb55286ab71c48deac3092d1c26c39732262297","mappings\/19w45a":"9906b35137314bd0da1b261a1522db0a64e79893","mappings\/19w44a":"4823b850300c27a0aa4299b59e6cfae3d36b8877","mappings\/19w42a":"098baae5ba0cf9c2dea72b278f6809a6927ab6db","mappings\/19w41a":"8498af26e9488e4e38a97a63fa2c510fef61a27f","mappings\/19w40a":"ab4c89d1c406fc0ecd8d0117dedb7858a6c091e1","mappings\/19w39a":"7f111cd21c4ccc6d2fd3533c2e27d7aa8261b9b2","mappings\/19w38b":"07911e8ec2c51a736b4b47c49a6129e8dd061054","mappings\/19w38a":"fd55bfaaff5193b2a0f3c9d3b74893c62af0e6ea","mappings\/19w37a":"b4edb4bd2d250ec10379a1bfa4bff5c658e8cf91","mappings\/19w36a":"43e202efd313765da373014bb85347f4f52a4f26","mappings\/19w35a":"f6051daccb09e355145abefa497a826068ee6161","mappings\/19w34a":"1cf8d0bee3cdba2a3a2804d2212521ba9f730b01","mappings\/1.14.4":"cb02473d3c2592bb31fbe626ea2c56fb88390ed4","mappings\/1.14.4-pre7":"96888b0fc949fc0c23d43b8bf4e3883986e88605","mappings\/1.14.4-pre6":"918127a4ca6c75e384ff4a0235b318f5bed4f158","mappings\/1.14.4-pre5":"f9d92456d8ccaaeb778343d1fa821e82c4d40b18","mappings\/1.14.4-pre4":"9b49696c6d566fbdecbc0f0ae893a547e64c1975","mappings\/1.14.4-pre3":"ddcf3d83877699aca903582c3a2200edacb7b2b2","mappings\/1.14.4-pre2":"58f73ac669a23acc68279be3425e69763b86e2fb","mappings\/1.14.4-pre1":"d39a29979bf00d2ddbc933ececf54196772a3c96","mappings\/1.14.3":"eb1a3c66eff6bdabb152e5986751f51e119822c4","mappings\/1.14.3-pre4":"31dd198b67864060608a108be98f6aa65617c836","mappings\/1.14.3-pre3":"3a4b094b37b308c8e1b89d82fc30425d1ae4d303","mappings\/1.14.3-pre2":"327eeee3ffaffd27a6b1eec61b213c288e9deae2","mappings\/1.14.3-pre1":"212078e642cafdf6be1eef8462b084a862e4fd72","mappings\/1.14.2":"bd23992e0c6ba76f6aa8e123bf08eb80af369d18","mappings\/1.14.2 Pre-Release 4":"fde42da350db8cbf86c9847483e13db874871175","mappings\/1.14.2 Pre-Release 3":"50a13f43de758354897fd21654450811abc47007","mappings\/1.14.2 Pre-Release 2":"c93acaf686f0a40d640793a0b56e82de273b1537","mappings\/1.14.2 Pre-Release 1":"773c65525f0eaf35a875285ee2c833138dadd623","mappings\/1.14.1":"211750d534cac03e17f1459aab6225184f60cb25","mappings\/1.14.1 Pre-Release 2":"ff1293551c65034233da76fd453339e51176c799","mappings\/1.14.1 Pre-Release 1":"ef73c44d8d3100e3b5d428d70265dcedffa8bd2d","mappings\/1.14":"687ab9251d5b0db28ad2fc712434254bde9620a2","mappings\/1.14 Pre-Release 5":"b091fd24039be333047eaba9b4532785f6bdb79b","mappings\/1.14 Pre-Release 4":"120334251501a378f9772edd474234295bbc45a8","mappings\/1.14 Pre-Release 3":"4708e3cbf7e59b1fc4caa4681030e5c74a9fbc13","mappings\/1.14 Pre-Release 2":"d76cac61812e58b6fd78713c128c3fe43dcfe61c","mappings\/1.14 Pre-Release 1":"4718f5dd3ca546bdfc0ddf39fb0d3a717823dad0","mappings\/19w14b":"540a5667d5b6b24c2373480bd7ca336febe1dee5","mappings\/19w14a":"3dd508ffbb27e9faeadce06e6442caeb3ca2ee0b","mappings\/3D Shareware v1.34":"d53778ed9204e02361476996fd0399ba6c3a4e78","mappings\/19w13b":"7626244a7b4d6a860a0c17b9ec0935f55fa051d7","mappings\/19w13a":"b4abb080bed89286d9d8cb769e9a030829e16304","mappings\/19w12b":"26026b46e5d8afe60a699fddbb1302f1f6327154","mappings\/19w12a":"d50337a1503e36ec8b9b9b42c2f555583bb0d78a","mappings\/19w11b":"c61345545cf63703d3c899d8bfc8998ddc7d0114","mappings\/19w11a":"fe6b539524a153bc78cdfe33b3b5e832a6eb7387","mappings\/19w09a":"5ff1c14a8f044d879ea737e925db3de79f9f7cae","mappings\/19w08b":"88ac17a8d607e80f25dc430d5b0e21a0a99994a0","mappings\/19w08a":"c171b27b3f81e14246f9662f476b302a9f2f56f3","mappings\/19w07a":"445ab1c442978b0b3636fc78309a8b8ded315665","mappings\/19w06a":"0561ae3129781dfef84e243417407687cbd97d7d","mappings\/19w05a":"78db36ecda238996a563002a71f7dbf7b924b661","mappings\/19w04b":"2db5b82b0eb0c55bbf8a697d0da78ec27147b690","mappings\/19w04a":"f41a11b0a872e7494a1a499ccba708e07efa77c9","mappings\/19w03c":"a58ea221598ca8b8c6db74fc431525ce205d0f12","mappings\/19w03b":"6f107c0132f11e293886637485f3128fd6df7db7","mappings\/19w03a":"93b30e5b14e89d1173e2789366321c8a818effb2","mappings\/19w02a":"d92ae16d3ff9eebbf3fcddb627eb5f7edf48780c","mappings\/18w50a":"ad6cba046e712e7ba31950fceefd44bdcda6ad05","mappings\/18w49a":"b6538f1dbeb7ae819dea48a1e3ad9798356e20fc","mappings\/18w48b":"b57ad1a4305bb639393aaca0c3d573d74f09d07f","mappings\/18w48a":"bc7d039bfe9578290913f4420d9d373dfe6cd1ef","mappings\/18w47b":"bcf862b16a1a5a96559b7327ea2e7a2c73279321","mappings\/18w47a":"eb0a5de929a6b988646e99ad536fbfa7cc1c78f1","mappings\/18w46a":"9fac42623572a3a50d5c1c1a47a0157af4c0ac70","mappings\/18w45a":"97e014a25f74e172ab90939133c3a07297003c2b","mappings\/18w44a":"41d36944554c032ee3b958a30b3471d601c3dadd","mappings\/18w43c":"86147b4c942d57bd93a62e8025356d41da3be414","mappings\/18w43b":"29a11a1721baadad6adadf6ddf9dc75818e0f8a0","mappings\/18w43a":"3e7f6e32216fbf38129b87f92914eaa211059a88","mappings\/1.13.2":"83face79970a79e01a9571889acfd2cc460f86b4","mappings\/1.13.2-pre2":"671a5a8825460b62818607013de5abab63b8b742","mappings\/1.13.2-pre1":"ad9e5c015d8cb653a8cad3eb9babd598be8d67d1","mappings\/1.13.1":"10e39c3f0c72bb05276d6f99b0ef93205ac048d3","mappings\/1.13.1-pre2":"15e74f07060c3c6d13daeeb607bccb560a275a4f","mappings\/1.13.1-pre1":"844b19a0677b60090dff193d6f8b5c68f7cf990f","mappings\/18w33a":"b2593bf1cbb7cde2b64a09d3f0e833af74f0e719","mappings\/18w32a":"b874178f9c361934b28a7393a32a286c4536984c","mappings\/18w31a":"47994175ee0894087d9891e22839f9b6fdc39ef2","mappings\/18w30b":"57b16a0c6f972b491aa23b60186d5eb71f91eb62","mappings\/18w30a":"fdcd9cfba4c179d751eb4e73cdd33bb59f87b9f7","mappings\/1.13":"6011e9f868c38c0f71fb5d0764c24a17af6d3daa","mappings\/1.13-pre10":"a3ca1325cf6afa82b394ffc4bff3ccbda0b7bc78","mappings\/1.13-pre9":"c392d7e63c6ea5024e77210f2a0fbeae32ee28e4","mappings\/1.13-pre8":"7f3683cf47d4417b54186aa9ad5bbf66b55d923b","mappings\/1.13-pre7":"5ee595080ae104b18f90b1175c0cf2f0313cd660","mappings\/1.13-pre4":"093e2d68d308608e091f91967e13498630fe4b05","mappings\/1.13-pre3":"8e279bd76e19eab80cbd86024c39d42dbb0473e3","mappings\/1.13-pre2":"ec1edd616f98edd758310a106aecf68d26cbf563","mappings\/1.13-pre1":"c818c4fb641f95e3e5187ae9e9bdd8c9c9c56acb","mappings\/18w22c":"4774d1376706acf49ddf75c3f44e037f736b78df","mappings\/18w22b":"295ed5e5e04ffaec977d48736393817ad6310c42","mappings\/18w22a":"b2d31faadd6b7197089fdf4b6bb8237e6855b1ed","mappings\/18w21b":"f5f6393f5ae4b29c3413ccc1180d5f7cc493fd39","mappings\/18w21a":"75de43c794b682ede7cd40d70c94a61a373f1dbc","mappings\/18w20c":"555fee42f5e3a24faaa8ea65c80d77dddc2f893d","mappings\/18w20b":"12e8c45e0f149aea61b4402ef001a544b2f2e776","mappings\/18w20a":"eef52dd3ae193c4f78798d3a97f5a470f0739b2f","mappings\/18w19b":"8dd5aa05385f63dfb10d0bc343d18181f77202c6","mappings\/18w19a":"eecd26420f947ac300dc6034a1f41356a7df27fc","mappings\/18w16a":"6554ef1f103e9bcc98775a66905b25b8f20cd8a1","mappings\/18w15a":"0a9fca5a8f13f320755b3b94b0c5819d94be6bb3","mappings\/18w14b":"af3103b6f491d06e8c9be15859c29878db02165d","mappings\/18w14a":"e916e69db1d442bf8563fad7a15e0fa78588d496","mappings\/18w11a":"84d908bc468eaf39be9a556fdb45c5c1c92a517c","mappings\/18w10d":"dc32749570c535c7942b00b5b8fef363209dd1d0","mappings\/18w10c":"523f157ab69cd645529b77a9b2254c4d4643fe17","mappings\/18w10b":"72e28f45037ef000ebd3781d0c0d1ff5fe5d77e3","mappings\/18w10a":"a9c32346bff62b3d584b0983b5b688dbd17fda98","mappings\/18w09a":"e2a721e8862d5e478254bb68658b4d5610ad22d0","mappings\/18w08b":"ac4064c84705b317be6c074dfe7d19ceab3beefb","mappings\/18w08a":"98bb1fd4fadac177a53a5eb3aae02ed25f726733","mappings\/18w07c":"7f379e43d907377eb1482526509b642f75d2b8d3","mappings\/18w07b":"3349bc4f24eb38adbda3afdd7a1db933adce6c07","mappings\/18w07a":"cb7eefe2812df54b4e48af075d946209a4ddb406","mappings\/18w06a":"1ee0548f7733a4f2732f28752f7a4410a8eb548c","mappings\/18w05a":"d0d7b246357dda0429ef3515e8b54af5e41c5ef6","mappings\/18w03b":"f1f6754462048515bb0ca46d986c862b2aa52646","mappings\/18w03a":"55b34560d15d01c9bce67517e6736fc7110874dc","mappings\/18w02a":"ae36420f405cdddf9f2afb1fcbbc138d05bc8484","mappings\/18w01a":"f6295cfefc49788684207deee0cde959fb47aad7","mappings\/17w46a":"793bcaf8cfe749f90718953675b919aaac8b9bd5"} +{"mappings\/1.8.9":"61406b8435362ef4ccb88df70d0abf405fddd87b","mappings\/20w46a":"135401a57a8cb5ce0818c512754db37450d16b86","mappings\/20w45a":"203695c4ef2f0a17676e1f1743d0b1d2c3c04239","mappings\/1.16.4":"24bb239b0e14ea742436fe9f08ccf179ca88b7d0","mappings\/1.16.4-rc1":"1e088b54f971faa54d3f27f61a12fe040b6c20ef","mappings\/1.16.4-pre2":"d27ff6aac6271a99472d842fbef83e03553ee2f2","mappings\/1.16.4-pre1":"388897795ad27cbbc0fd7b626c803965b35d1934","mappings\/1.16.3":"a575d45d4367578ca8e2b70018b3c031c82ce496","mappings\/1.16.3-rc1":"c02763afe8aefca1beff0c5e3fb8d77d48624082","mappings\/1.16.2":"00013780a993f90a6f68141939f91af02cc31d0d","mappings\/1.16.2-rc2":"609a840d4c452210476940e00e9344e2d1f72491","mappings\/1.16.2-rc1":"67dbccbf3f3049c6563f56b5de9f46872ddcd60d","mappings\/1.16.2-pre3":"c8cdfb870e2457eeec407d356c57986102ba54a8","mappings\/1.16.2-pre2":"b1f88258b0d10cbca8db7a5006e533e7f8d1279b","mappings\/1.16.2-pre1":"74afcd2e469c6b884cd6cba77396c8153d3b5345","mappings\/20w30a":"51059d88d40567727f68705ea010ddc382cba472","mappings\/20w29a":"c53e25e119d2404cbe3411369c6b9f265371e7d0","mappings\/20w28a":"7d4ba9874038ad167ab98c09ee39bf4c185159f8","mappings\/20w27a":"8694af12f21653bc1bd22d89834271e50ce6f29c","mappings\/1.16.1":"5f3d51e70bd22728fb9fd26ef8c5894d610e83cf","mappings\/1.16":"af2a82457c48763d17575a450e3808f3a3e431b8","mappings\/1.16-rc1":"0ab71b56bd55007d8a03436d3642252e85f58626","mappings\/1.16-pre8":"02949a83bd37de9bba46b9c03e8efb7b2240c0ca","mappings\/1.16-pre7":"39715549b3e31904f5d3f5c2a5ccf0b61635dab4","mappings\/1.16-pre6":"2b6b47db379ad28214065a1192a199bfd6bd4aed","mappings\/1.16-pre5":"5076854bba855eddf2e74b1ca87e53649c0fbe49","mappings\/1.16-pre4":"0d0cdfdfc3e29f719d4c5d4b161442127c500560","mappings\/1.16-pre3":"b232316ce4e7b5add7442e76dd226d0b72ff8d3d","mappings\/1.16-pre2":"b71eac2496fcffbe8f13ee99af5d1f33da81454e","mappings\/1.16-pre1":"f748f7f14c3940fd705281fa9210520254e51ff1","mappings\/20w22a":"9a09f7b7fc69c187c63687c0097dd9424cbb08c2","mappings\/20w21a":"bd91a8b3534562f28e7fd9d448ceec60944c824c","mappings\/20w20b":"f4385e126ad2ea36a82d52a71f057028bffea0a0","mappings\/20w20a":"5ac7c5b40c0a13259d2e8f5886b39e2f672b1dda","mappings\/20w19a":"ff64bbdc04e5c378f032f15739fb418b18e154b5","mappings\/20w18a":"4a0816ef2975962a3de95a5e5c716ea81b760e7e","mappings\/20w17a":"28298f3613a2ce7720242126da27ae1fe8089c06","mappings\/20w16a":"25df7b68d7a5fd288d8ab11613c77e274a0e04ff","mappings\/20w15a":"598f38aa7da8d7139b2fab3980ca3d8418672601","mappings\/20w14a":"6b6218e9e2bd463d3f94047674ccff6eb1ff270e","mappings\/20w14infinite":"3285db9e8431af974f159aea87ddf8a39c340ef1","mappings\/20w13b":"c23f7c357d3109a6566a5ccf2dbec3237f7510fa","mappings\/20w13a":"4400239805718f68be44a7593c4bb528a5dc952a","mappings\/20w12a":"2412680f56f4ecf33774ea58676db78b7d4129c9","mappings\/20w11a":"13c444e9be54b40f018afdf2a89248ad2a016792","mappings\/20w10a":"12c99669ecc5a24c2bd70a06bad7fa5a41b07699","mappings\/20w09a":"755ebbf9c13f1d8b3dd5f9d68522106dc7aa772d","mappings\/20w08a":"c1260870c8a15659c870c81dcccb6406bddf2ea9","mappings\/20w07a":"48335917cce12d608ba954bac5c32e3c7e52478a","mappings\/20w06a":"79206e553b0fc1f19ec1d87160c886f963af9a77","mappings\/1.15.2":"760141d986c6d4f4363aac56426802c2d8fbba19","mappings\/1.15.2-pre2":"595d8f2e5daafc064310b42790600c39b056b8da","mappings\/1.15.2-pre1":"991fcce3b22b2c8a0e614aca5e8b457e896a1288","mappings\/1.15.1":"de7fe2e2253c5b60fd47c812005ef69faaf9dcb7","mappings\/1.15.1-pre1":"0faf609dd84d81c58135cdf43f430e83676ec820","mappings\/1.15":"b055f178e93382622e6cd97985faee3f26491b72","mappings\/1.15-pre7":"ecca2170a62af538a6f9f3106676c1cd5fe53319","mappings\/1.15-pre6":"9218a3480df57de8a7bb9e84706b2fb0664ec563","mappings\/1.15-pre5":"bae7926afd5239b8c92d2ab036a479127790a745","mappings\/1.15-pre4":"28c075af470bb56343543fc12a13457d16b0aafa","mappings\/1.15-pre3":"677fc1045b273ea100c49dc8970828639b198987","mappings\/1.15-pre2":"cf70a4b82daa2a4fb390a75a80ae1a60ead8f491","mappings\/1.15-pre1":"ed04495589c8a4eca828c640b29326451231ebcb","mappings\/19w46b":"15e9f7cac5e105ddae1fd38e1ef876ccdd524f88","mappings\/19w46a":"c9c36d4f2a2b9acae81952cfedf952080351d898","mappings\/19w45b":"7eb55286ab71c48deac3092d1c26c39732262297","mappings\/19w45a":"9906b35137314bd0da1b261a1522db0a64e79893","mappings\/19w44a":"4823b850300c27a0aa4299b59e6cfae3d36b8877","mappings\/19w42a":"098baae5ba0cf9c2dea72b278f6809a6927ab6db","mappings\/19w41a":"8498af26e9488e4e38a97a63fa2c510fef61a27f","mappings\/19w40a":"ab4c89d1c406fc0ecd8d0117dedb7858a6c091e1","mappings\/19w39a":"7f111cd21c4ccc6d2fd3533c2e27d7aa8261b9b2","mappings\/19w38b":"07911e8ec2c51a736b4b47c49a6129e8dd061054","mappings\/19w38a":"fd55bfaaff5193b2a0f3c9d3b74893c62af0e6ea","mappings\/19w37a":"b4edb4bd2d250ec10379a1bfa4bff5c658e8cf91","mappings\/19w36a":"43e202efd313765da373014bb85347f4f52a4f26","mappings\/19w35a":"f6051daccb09e355145abefa497a826068ee6161","mappings\/19w34a":"1cf8d0bee3cdba2a3a2804d2212521ba9f730b01","mappings\/1.14.4":"cb02473d3c2592bb31fbe626ea2c56fb88390ed4","mappings\/1.14.4-pre7":"96888b0fc949fc0c23d43b8bf4e3883986e88605","mappings\/1.14.4-pre6":"918127a4ca6c75e384ff4a0235b318f5bed4f158","mappings\/1.14.4-pre5":"f9d92456d8ccaaeb778343d1fa821e82c4d40b18","mappings\/1.14.4-pre4":"9b49696c6d566fbdecbc0f0ae893a547e64c1975","mappings\/1.14.4-pre3":"ddcf3d83877699aca903582c3a2200edacb7b2b2","mappings\/1.14.4-pre2":"58f73ac669a23acc68279be3425e69763b86e2fb","mappings\/1.14.4-pre1":"d39a29979bf00d2ddbc933ececf54196772a3c96","mappings\/1.14.3":"eb1a3c66eff6bdabb152e5986751f51e119822c4","mappings\/1.14.3-pre4":"31dd198b67864060608a108be98f6aa65617c836","mappings\/1.14.3-pre3":"3a4b094b37b308c8e1b89d82fc30425d1ae4d303","mappings\/1.14.3-pre2":"327eeee3ffaffd27a6b1eec61b213c288e9deae2","mappings\/1.14.3-pre1":"212078e642cafdf6be1eef8462b084a862e4fd72","mappings\/1.14.2":"bd23992e0c6ba76f6aa8e123bf08eb80af369d18","mappings\/1.14.2 Pre-Release 4":"fde42da350db8cbf86c9847483e13db874871175","mappings\/1.14.2 Pre-Release 3":"50a13f43de758354897fd21654450811abc47007","mappings\/1.14.2 Pre-Release 2":"c93acaf686f0a40d640793a0b56e82de273b1537","mappings\/1.14.2 Pre-Release 1":"773c65525f0eaf35a875285ee2c833138dadd623","mappings\/1.14.1":"211750d534cac03e17f1459aab6225184f60cb25","mappings\/1.14.1 Pre-Release 2":"ff1293551c65034233da76fd453339e51176c799","mappings\/1.14.1 Pre-Release 1":"ef73c44d8d3100e3b5d428d70265dcedffa8bd2d","mappings\/1.14":"687ab9251d5b0db28ad2fc712434254bde9620a2","mappings\/1.14 Pre-Release 5":"b091fd24039be333047eaba9b4532785f6bdb79b","mappings\/1.14 Pre-Release 4":"120334251501a378f9772edd474234295bbc45a8","mappings\/1.14 Pre-Release 3":"4708e3cbf7e59b1fc4caa4681030e5c74a9fbc13","mappings\/1.14 Pre-Release 2":"d76cac61812e58b6fd78713c128c3fe43dcfe61c","mappings\/1.14 Pre-Release 1":"4718f5dd3ca546bdfc0ddf39fb0d3a717823dad0","mappings\/19w14b":"540a5667d5b6b24c2373480bd7ca336febe1dee5","mappings\/19w14a":"3dd508ffbb27e9faeadce06e6442caeb3ca2ee0b","mappings\/3D Shareware v1.34":"d53778ed9204e02361476996fd0399ba6c3a4e78","mappings\/19w13b":"7626244a7b4d6a860a0c17b9ec0935f55fa051d7","mappings\/19w13a":"b4abb080bed89286d9d8cb769e9a030829e16304","mappings\/19w12b":"26026b46e5d8afe60a699fddbb1302f1f6327154","mappings\/19w12a":"d50337a1503e36ec8b9b9b42c2f555583bb0d78a","mappings\/19w11b":"c61345545cf63703d3c899d8bfc8998ddc7d0114","mappings\/19w11a":"fe6b539524a153bc78cdfe33b3b5e832a6eb7387","mappings\/19w09a":"5ff1c14a8f044d879ea737e925db3de79f9f7cae","mappings\/19w08b":"88ac17a8d607e80f25dc430d5b0e21a0a99994a0","mappings\/19w08a":"c171b27b3f81e14246f9662f476b302a9f2f56f3","mappings\/19w07a":"445ab1c442978b0b3636fc78309a8b8ded315665","mappings\/19w06a":"0561ae3129781dfef84e243417407687cbd97d7d","mappings\/19w05a":"78db36ecda238996a563002a71f7dbf7b924b661","mappings\/19w04b":"2db5b82b0eb0c55bbf8a697d0da78ec27147b690","mappings\/19w04a":"f41a11b0a872e7494a1a499ccba708e07efa77c9","mappings\/19w03c":"a58ea221598ca8b8c6db74fc431525ce205d0f12","mappings\/19w03b":"6f107c0132f11e293886637485f3128fd6df7db7","mappings\/19w03a":"93b30e5b14e89d1173e2789366321c8a818effb2","mappings\/19w02a":"d92ae16d3ff9eebbf3fcddb627eb5f7edf48780c","mappings\/18w50a":"ad6cba046e712e7ba31950fceefd44bdcda6ad05","mappings\/18w49a":"b6538f1dbeb7ae819dea48a1e3ad9798356e20fc","mappings\/18w48b":"b57ad1a4305bb639393aaca0c3d573d74f09d07f","mappings\/18w48a":"bc7d039bfe9578290913f4420d9d373dfe6cd1ef","mappings\/18w47b":"bcf862b16a1a5a96559b7327ea2e7a2c73279321","mappings\/18w47a":"eb0a5de929a6b988646e99ad536fbfa7cc1c78f1","mappings\/18w46a":"9fac42623572a3a50d5c1c1a47a0157af4c0ac70","mappings\/18w45a":"97e014a25f74e172ab90939133c3a07297003c2b","mappings\/18w44a":"41d36944554c032ee3b958a30b3471d601c3dadd","mappings\/18w43c":"86147b4c942d57bd93a62e8025356d41da3be414","mappings\/18w43b":"29a11a1721baadad6adadf6ddf9dc75818e0f8a0","mappings\/18w43a":"3e7f6e32216fbf38129b87f92914eaa211059a88","mappings\/1.13.2":"83face79970a79e01a9571889acfd2cc460f86b4","mappings\/1.13.2-pre2":"671a5a8825460b62818607013de5abab63b8b742","mappings\/1.13.2-pre1":"ad9e5c015d8cb653a8cad3eb9babd598be8d67d1","mappings\/1.13.1":"10e39c3f0c72bb05276d6f99b0ef93205ac048d3","mappings\/1.13.1-pre2":"15e74f07060c3c6d13daeeb607bccb560a275a4f","mappings\/1.13.1-pre1":"844b19a0677b60090dff193d6f8b5c68f7cf990f","mappings\/18w33a":"b2593bf1cbb7cde2b64a09d3f0e833af74f0e719","mappings\/18w32a":"b874178f9c361934b28a7393a32a286c4536984c","mappings\/18w31a":"47994175ee0894087d9891e22839f9b6fdc39ef2","mappings\/18w30b":"57b16a0c6f972b491aa23b60186d5eb71f91eb62","mappings\/18w30a":"fdcd9cfba4c179d751eb4e73cdd33bb59f87b9f7","mappings\/1.13":"6011e9f868c38c0f71fb5d0764c24a17af6d3daa","mappings\/1.13-pre10":"a3ca1325cf6afa82b394ffc4bff3ccbda0b7bc78","mappings\/1.13-pre9":"c392d7e63c6ea5024e77210f2a0fbeae32ee28e4","mappings\/1.13-pre8":"7f3683cf47d4417b54186aa9ad5bbf66b55d923b","mappings\/1.13-pre7":"5ee595080ae104b18f90b1175c0cf2f0313cd660","mappings\/1.13-pre4":"093e2d68d308608e091f91967e13498630fe4b05","mappings\/1.13-pre3":"8e279bd76e19eab80cbd86024c39d42dbb0473e3","mappings\/1.13-pre2":"ec1edd616f98edd758310a106aecf68d26cbf563","mappings\/1.13-pre1":"c818c4fb641f95e3e5187ae9e9bdd8c9c9c56acb","mappings\/18w22c":"4774d1376706acf49ddf75c3f44e037f736b78df","mappings\/18w22b":"295ed5e5e04ffaec977d48736393817ad6310c42","mappings\/18w22a":"b2d31faadd6b7197089fdf4b6bb8237e6855b1ed","mappings\/18w21b":"f5f6393f5ae4b29c3413ccc1180d5f7cc493fd39","mappings\/18w21a":"75de43c794b682ede7cd40d70c94a61a373f1dbc","mappings\/18w20c":"555fee42f5e3a24faaa8ea65c80d77dddc2f893d","mappings\/18w20b":"12e8c45e0f149aea61b4402ef001a544b2f2e776","mappings\/18w20a":"eef52dd3ae193c4f78798d3a97f5a470f0739b2f","mappings\/18w19b":"8dd5aa05385f63dfb10d0bc343d18181f77202c6","mappings\/18w19a":"eecd26420f947ac300dc6034a1f41356a7df27fc","mappings\/18w16a":"6554ef1f103e9bcc98775a66905b25b8f20cd8a1","mappings\/18w15a":"0a9fca5a8f13f320755b3b94b0c5819d94be6bb3","mappings\/18w14b":"af3103b6f491d06e8c9be15859c29878db02165d","mappings\/18w14a":"e916e69db1d442bf8563fad7a15e0fa78588d496","mappings\/18w11a":"84d908bc468eaf39be9a556fdb45c5c1c92a517c","mappings\/18w10d":"dc32749570c535c7942b00b5b8fef363209dd1d0","mappings\/18w10c":"523f157ab69cd645529b77a9b2254c4d4643fe17","mappings\/18w10b":"72e28f45037ef000ebd3781d0c0d1ff5fe5d77e3","mappings\/18w10a":"a9c32346bff62b3d584b0983b5b688dbd17fda98","mappings\/18w09a":"e2a721e8862d5e478254bb68658b4d5610ad22d0","mappings\/18w08b":"ac4064c84705b317be6c074dfe7d19ceab3beefb","mappings\/18w08a":"98bb1fd4fadac177a53a5eb3aae02ed25f726733","mappings\/18w07c":"7f379e43d907377eb1482526509b642f75d2b8d3","mappings\/18w07b":"3349bc4f24eb38adbda3afdd7a1db933adce6c07","mappings\/18w07a":"cb7eefe2812df54b4e48af075d946209a4ddb406","mappings\/18w06a":"1ee0548f7733a4f2732f28752f7a4410a8eb548c","mappings\/18w05a":"d0d7b246357dda0429ef3515e8b54af5e41c5ef6","mappings\/18w03b":"f1f6754462048515bb0ca46d986c862b2aa52646","mappings\/18w03a":"55b34560d15d01c9bce67517e6736fc7110874dc","mappings\/18w02a":"ae36420f405cdddf9f2afb1fcbbc138d05bc8484","mappings\/18w01a":"f6295cfefc49788684207deee0cde959fb47aad7","mappings\/17w46a":"793bcaf8cfe749f90718953675b919aaac8b9bd5"}