Start working on 19w34a

This commit is contained in:
KennyTV 2019-08-23 21:15:38 +02:00
parent 7cb4e1d00e
commit 6f19d2d6d1
18 changed files with 1523 additions and 8 deletions

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>viaversion-parent</artifactId>
<groupId>us.myles</groupId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>viaversion-parent</artifactId>
<groupId>us.myles</groupId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>viaversion-parent</artifactId>
<groupId>us.myles</groupId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -0,0 +1,248 @@
package us.myles.ViaVersion.api.entities;
import com.google.common.base.Optional;
import lombok.AllArgsConstructor;
import lombok.Getter;
import us.myles.ViaVersion.api.Via;
import java.util.HashMap;
import java.util.Map;
public class Entity1_15Types {
public static EntityType getTypeFromId(int typeID) {
Optional<EntityType> type = EntityType.findById(typeID);
if (!type.isPresent()) {
Via.getPlatform().getLogger().severe("Could not find type id " + typeID);
return EntityType.ENTITY; // Fall back to the basic ENTITY
}
return type.get();
}
@AllArgsConstructor
@Getter
public enum EntityType {
ENTITY(-1),
AREA_EFFECT_CLOUD(0, ENTITY),
ENDER_CRYSTAL(18, ENTITY),
EVOCATION_FANGS(22, ENTITY),
XP_ORB(24, ENTITY),
EYE_OF_ENDER_SIGNAL(25, ENTITY),
FALLING_BLOCK(26, ENTITY),
FIREWORKS_ROCKET(27, ENTITY),
ITEM(35, ENTITY),
LLAMA_SPIT(40, ENTITY),
TNT(59, ENTITY),
SHULKER_BULLET(64, ENTITY),
FISHING_BOBBER(111, ENTITY),
LIVINGENTITY(-1, ENTITY),
ARMOR_STAND(1, LIVINGENTITY),
PLAYER(110, LIVINGENTITY),
ABSTRACT_INSENTIENT(-1, LIVINGENTITY),
ENDER_DRAGON(19, ABSTRACT_INSENTIENT),
BEE(4, ABSTRACT_INSENTIENT),
ABSTRACT_CREATURE(-1, ABSTRACT_INSENTIENT),
ABSTRACT_AGEABLE(-1, ABSTRACT_CREATURE),
VILLAGER(85, ABSTRACT_AGEABLE),
WANDERING_TRADER(89, ABSTRACT_AGEABLE),
// Animals
ABSTRACT_ANIMAL(-1, ABSTRACT_AGEABLE),
DOLPHIN(14, ABSTRACT_INSENTIENT),
CHICKEN(9, ABSTRACT_ANIMAL),
COW(11, ABSTRACT_ANIMAL),
MOOSHROOM(50, COW),
PANDA(53, ABSTRACT_INSENTIENT),
PIG(55, ABSTRACT_ANIMAL),
POLAR_BEAR(58, ABSTRACT_ANIMAL),
RABBIT(60, ABSTRACT_ANIMAL),
SHEEP(62, ABSTRACT_ANIMAL),
TURTLE(78, ABSTRACT_ANIMAL),
FOX(28, ABSTRACT_ANIMAL),
ABSTRACT_TAMEABLE_ANIMAL(-1, ABSTRACT_ANIMAL),
CAT(7, ABSTRACT_TAMEABLE_ANIMAL),
OCELOT(51, ABSTRACT_TAMEABLE_ANIMAL),
WOLF(94, ABSTRACT_TAMEABLE_ANIMAL),
ABSTRACT_PARROT(-1, ABSTRACT_TAMEABLE_ANIMAL),
PARROT(54, ABSTRACT_PARROT),
// Horses
ABSTRACT_HORSE(-1, ABSTRACT_ANIMAL),
CHESTED_HORSE(-1, ABSTRACT_HORSE),
DONKEY(13, CHESTED_HORSE),
MULE(49, CHESTED_HORSE),
LLAMA(39, CHESTED_HORSE),
TRADER_LLAMA(76, CHESTED_HORSE),
HORSE(32, ABSTRACT_HORSE),
SKELETON_HORSE(67, ABSTRACT_HORSE),
ZOMBIE_HORSE(96, ABSTRACT_HORSE),
// Golem
ABSTRACT_GOLEM(-1, ABSTRACT_CREATURE),
SNOWMAN(70, ABSTRACT_GOLEM),
VILLAGER_GOLEM(86, ABSTRACT_GOLEM),
SHULKER(63, ABSTRACT_GOLEM),
// Fish
ABSTRACT_FISHES(-1, ABSTRACT_CREATURE),
COD(10, ABSTRACT_FISHES),
PUFFER_FISH(56, ABSTRACT_FISHES),
SALMON_MOB(61, ABSTRACT_FISHES),
TROPICAL_FISH(77, ABSTRACT_FISHES),
// Monsters
ABSTRACT_MONSTER(-1, ABSTRACT_CREATURE),
BLAZE(4, ABSTRACT_MONSTER),
CREEPER(12, ABSTRACT_MONSTER),
ENDERMITE(21, ABSTRACT_MONSTER),
ENDERMAN(20, ABSTRACT_MONSTER),
GIANT(30, ABSTRACT_MONSTER),
SILVERFISH(65, ABSTRACT_MONSTER),
VEX(84, ABSTRACT_MONSTER),
WITCH(90, ABSTRACT_MONSTER),
WITHER(91, ABSTRACT_MONSTER),
RAVAGER(99, ABSTRACT_MONSTER),
// Illagers
ABSTRACT_ILLAGER_BASE(-1, ABSTRACT_MONSTER),
ABSTRACT_EVO_ILLU_ILLAGER(-1, ABSTRACT_ILLAGER_BASE),
EVOCATION_ILLAGER(23, ABSTRACT_EVO_ILLU_ILLAGER),
ILLUSION_ILLAGER(34, ABSTRACT_EVO_ILLU_ILLAGER),
VINDICATION_ILLAGER(87, ABSTRACT_ILLAGER_BASE),
PILLAGER(88, ABSTRACT_ILLAGER_BASE),
// Skeletons
ABSTRACT_SKELETON(-1, ABSTRACT_MONSTER),
SKELETON(66, ABSTRACT_SKELETON),
STRAY(75, ABSTRACT_SKELETON),
WITHER_SKELETON(92, ABSTRACT_SKELETON),
// Guardians
GUARDIAN(31, ABSTRACT_MONSTER),
ELDER_GUARDIAN(17, GUARDIAN),
// Spiders
SPIDER(73, ABSTRACT_MONSTER),
CAVE_SPIDER(8, SPIDER),
// Zombies
ZOMBIE(95, ABSTRACT_MONSTER),
DROWNED(16, ZOMBIE),
HUSK(33, ZOMBIE),
ZOMBIE_PIGMAN(57, ZOMBIE),
ZOMBIE_VILLAGER(97, ZOMBIE),
// Flying entities
ABSTRACT_FLYING(-1, ABSTRACT_INSENTIENT),
GHAST(29, ABSTRACT_FLYING),
PHANTOM(98, ABSTRACT_FLYING),
ABSTRACT_AMBIENT(-1, ABSTRACT_INSENTIENT),
BAT(3, ABSTRACT_AMBIENT),
ABSTRACT_WATERMOB(-1, ABSTRACT_INSENTIENT),
SQUID(74, ABSTRACT_WATERMOB),
// Slimes
SLIME(68, ABSTRACT_INSENTIENT),
MAGMA_CUBE(41, SLIME),
// Hangable objects
ABSTRACT_HANGING(-1, ENTITY),
LEASH_KNOT(38, ABSTRACT_HANGING),
ITEM_FRAME(36, ABSTRACT_HANGING),
PAINTING(52, ABSTRACT_HANGING),
ABSTRACT_LIGHTNING(-1, ENTITY),
LIGHTNING_BOLT(100, ABSTRACT_LIGHTNING),
// Arrows
ABSTRACT_ARROW(-1, ENTITY),
ARROW(2, ABSTRACT_ARROW),
SPECTRAL_ARROW(72, ABSTRACT_ARROW),
TRIDENT(83, ABSTRACT_ARROW),
// Fireballs
ABSTRACT_FIREBALL(-1, ENTITY),
DRAGON_FIREBALL(15, ABSTRACT_FIREBALL),
FIREBALL(37, ABSTRACT_FIREBALL),
SMALL_FIREBALL(69, ABSTRACT_FIREBALL),
WITHER_SKULL(93, ABSTRACT_FIREBALL),
// Projectiles
PROJECTILE_ABSTRACT(-1, ENTITY),
SNOWBALL(71, PROJECTILE_ABSTRACT),
ENDER_PEARL(80, PROJECTILE_ABSTRACT),
EGG(79, PROJECTILE_ABSTRACT),
POTION(82, PROJECTILE_ABSTRACT),
XP_BOTTLE(81, PROJECTILE_ABSTRACT),
// Vehicles
MINECART_ABSTRACT(-1, ENTITY),
CHESTED_MINECART_ABSTRACT(-1, MINECART_ABSTRACT),
CHEST_MINECART(43, CHESTED_MINECART_ABSTRACT),
HOPPER_MINECART(46, CHESTED_MINECART_ABSTRACT),
MINECART(42, MINECART_ABSTRACT),
FURNACE_MINECART(45, MINECART_ABSTRACT),
COMMANDBLOCK_MINECART(44, MINECART_ABSTRACT),
TNT_MINECART(48, MINECART_ABSTRACT),
SPAWNER_MINECART(47, MINECART_ABSTRACT),
BOAT(6, ENTITY);
private static final Map<Integer, EntityType> TYPES = new HashMap<>();
private final int id;
private final EntityType parent;
EntityType(int id) {
this.id = id;
this.parent = null;
}
static {
for (EntityType type : EntityType.values()) {
TYPES.put(type.id, type);
}
}
public static Optional<EntityType> findById(int id) {
if (id == -1)
return Optional.absent();
return Optional.fromNullable(TYPES.get(id));
}
public boolean is(EntityType... types) {
for (EntityType type : types)
if (is(type))
return true;
return false;
}
public boolean is(EntityType type) {
return this == type;
}
public boolean isOrHasParent(EntityType type) {
EntityType parent = this;
do {
if (parent == type)
return true;
parent = parent.getParent();
} while (parent != null);
return false;
}
}
}

View File

@ -21,6 +21,7 @@ import us.myles.ViaVersion.protocols.protocol1_14_2to1_14_1.Protocol1_14_2To1_14
import us.myles.ViaVersion.protocols.protocol1_14_3to1_14_2.Protocol1_14_3To1_14_2;
import us.myles.ViaVersion.protocols.protocol1_14_4to1_14_3.Protocol1_14_4To1_14_3;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4;
import us.myles.ViaVersion.protocols.protocol1_9_1_2to1_9_3_4.Protocol1_9_1_2To1_9_3_4;
import us.myles.ViaVersion.protocols.protocol1_9_1to1_9.Protocol1_9_1To1_9;
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.Protocol1_9_3To1_9_1_2;
@ -70,6 +71,8 @@ public class ProtocolRegistry {
registerProtocol(new Protocol1_14_2To1_14_1(), Collections.singletonList(ProtocolVersion.v1_14_2.getId()), ProtocolVersion.v1_14_1.getId());
registerProtocol(new Protocol1_14_3To1_14_2(), Collections.singletonList(ProtocolVersion.v1_14_3.getId()), ProtocolVersion.v1_14_2.getId());
registerProtocol(new Protocol1_14_4To1_14_3(), Collections.singletonList(ProtocolVersion.v1_14_4.getId()), ProtocolVersion.v1_14_3.getId());
registerProtocol(new Protocol1_15To1_14_4(), Collections.singletonList(ProtocolVersion.v1_15.getId()), ProtocolVersion.v1_14_4.getId());
}
/**

View File

@ -40,6 +40,7 @@ public class ProtocolVersion {
public static final ProtocolVersion v1_14_2;
public static final ProtocolVersion v1_14_3;
public static final ProtocolVersion v1_14_4;
public static final ProtocolVersion v1_15;
public static final ProtocolVersion unknown;
private final int id;
@ -76,6 +77,7 @@ public class ProtocolVersion {
register(v1_14_2 = new ProtocolVersion(485, "1.14.2"));
register(v1_14_3 = new ProtocolVersion(490, "1.14.3"));
register(v1_14_4 = new ProtocolVersion(498, "1.14.4"));
register(v1_15 = new ProtocolVersion(550, "1.15"));
register(unknown = new ProtocolVersion(-1, "UNKNOWN"));
}

View File

@ -0,0 +1,39 @@
package us.myles.ViaVersion.protocols.protocol1_15to1_14_4;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.data.UserConnection;
import us.myles.ViaVersion.api.entities.Entity1_15Types;
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_14;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets.InventoryPackets;
import java.util.ArrayList;
import java.util.List;
public class MetadataRewriter {
public static void handleMetadata(int entityId, Entity1_15Types.EntityType type, List<Metadata> metadatas, UserConnection connection) {
for (Metadata metadata : new ArrayList<>(metadatas)) {
try {
if (metadata.getMetaType() == MetaType1_14.Slot) {
InventoryPackets.toClient((Item) metadata.getValue());
}
if (type == null) continue;
// Metadata 12 added to abstract_living
if (metadata.getId() > 11 && type.isOrHasParent(Entity1_15Types.EntityType.LIVINGENTITY)) {
metadata.setId(metadata.getId() + 1); //TODO is it 11 or 12? what is it for?
}
} catch (Exception e) {
metadatas.remove(metadata);
if (!Via.getConfig().isSuppressMetadataErrors() || Via.getManager().isDebug()) {
Via.getPlatform().getLogger().warning("An error occurred with entity metadata handler");
Via.getPlatform().getLogger().warning("Metadata: " + metadata);
e.printStackTrace();
}
}
}
}
}

View File

@ -0,0 +1,146 @@
package us.myles.ViaVersion.protocols.protocol1_15to1_14_4;
import us.myles.ViaVersion.api.PacketWrapper;
import us.myles.ViaVersion.api.data.UserConnection;
import us.myles.ViaVersion.api.entities.Entity1_15Types;
import us.myles.ViaVersion.api.protocol.Protocol;
import us.myles.ViaVersion.api.remapper.PacketHandler;
import us.myles.ViaVersion.api.remapper.PacketRemapper;
import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.packets.State;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data.MappingData;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets.EntityPackets;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage.EntityTracker;
public class Protocol1_15To1_14_4 extends Protocol {
@Override
protected void registerPackets() {
//TODO do the new tags have to be sent?
//TODO sound, item, possibly block remaps (and blockstates should be the same with the new ones just being appended?)
MappingData.init();
EntityPackets.register(this);
// Join Game
registerOutgoing(State.PLAY, 0x25, 0x26, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.INT); // 0 - Entity ID
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
Entity1_15Types.EntityType entType = Entity1_15Types.EntityType.PLAYER;
EntityTracker tracker = wrapper.user().get(EntityTracker.class);
tracker.addEntity(wrapper.get(Type.INT, 0), entType);
}
});
}
});
// Sound Effect
registerOutgoing(State.PLAY, 0x51, 0x52, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // Sound Id
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
wrapper.set(Type.VAR_INT, 0, MappingData.soundMappings.getNewSound(wrapper.get(Type.VAR_INT, 0)));
}
});
}
});
registerOutgoing(State.PLAY, 0x08, 0x09);
registerOutgoing(State.PLAY, 0x09, 0x0A);
registerOutgoing(State.PLAY, 0x0A, 0x0B);
registerOutgoing(State.PLAY, 0x0B, 0x0C);
registerOutgoing(State.PLAY, 0x0C, 0x0D);
registerOutgoing(State.PLAY, 0x0D, 0x0E);
registerOutgoing(State.PLAY, 0x0E, 0x0F);
registerOutgoing(State.PLAY, 0x0F, 0x10);
registerOutgoing(State.PLAY, 0x10, 0x11);
registerOutgoing(State.PLAY, 0x11, 0x12);
registerOutgoing(State.PLAY, 0x12, 0x13);
registerOutgoing(State.PLAY, 0x13, 0x14);
registerOutgoing(State.PLAY, 0x14, 0x15);
registerOutgoing(State.PLAY, 0x15, 0x16);
registerOutgoing(State.PLAY, 0x16, 0x17);
registerOutgoing(State.PLAY, 0x17, 0x18);
registerOutgoing(State.PLAY, 0x18, 0x19);
registerOutgoing(State.PLAY, 0x19, 0x1A);
registerOutgoing(State.PLAY, 0x1A, 0x1B);
registerOutgoing(State.PLAY, 0x1B, 0x1C);
registerOutgoing(State.PLAY, 0x1C, 0x1D);
registerOutgoing(State.PLAY, 0x1D, 0x1E);
registerOutgoing(State.PLAY, 0x1E, 0x1F);
registerOutgoing(State.PLAY, 0x1F, 0x20);
registerOutgoing(State.PLAY, 0x20, 0x21);
registerOutgoing(State.PLAY, 0x21, 0x22);
registerOutgoing(State.PLAY, 0x22, 0x23);
registerOutgoing(State.PLAY, 0x23, 0x24);
registerOutgoing(State.PLAY, 0x24, 0x25);
registerOutgoing(State.PLAY, 0x26, 0x27);
registerOutgoing(State.PLAY, 0x27, 0x28);
registerOutgoing(State.PLAY, 0x28, 0x29);
registerOutgoing(State.PLAY, 0x29, 0x2A);
registerOutgoing(State.PLAY, 0x2A, 0x2B);
registerOutgoing(State.PLAY, 0x2B, 0x2C);
registerOutgoing(State.PLAY, 0x2C, 0x2D);
registerOutgoing(State.PLAY, 0x2D, 0x2E);
registerOutgoing(State.PLAY, 0x2E, 0x2F);
registerOutgoing(State.PLAY, 0x2F, 0x30);
registerOutgoing(State.PLAY, 0x30, 0x31);
registerOutgoing(State.PLAY, 0x31, 0x32);
registerOutgoing(State.PLAY, 0x32, 0x33);
registerOutgoing(State.PLAY, 0x33, 0x34);
registerOutgoing(State.PLAY, 0x34, 0x35);
registerOutgoing(State.PLAY, 0x35, 0x36);
registerOutgoing(State.PLAY, 0x36, 0x37);
registerOutgoing(State.PLAY, 0x37, 0x38);
registerOutgoing(State.PLAY, 0x38, 0x39);
registerOutgoing(State.PLAY, 0x39, 0x3A);
registerOutgoing(State.PLAY, 0x3A, 0x3B);
registerOutgoing(State.PLAY, 0x3B, 0x3C);
registerOutgoing(State.PLAY, 0x3C, 0x3D);
registerOutgoing(State.PLAY, 0x3D, 0x3E);
registerOutgoing(State.PLAY, 0x3E, 0x3F);
registerOutgoing(State.PLAY, 0x3F, 0x40);
registerOutgoing(State.PLAY, 0x40, 0x41);
registerOutgoing(State.PLAY, 0x41, 0x42);
registerOutgoing(State.PLAY, 0x42, 0x43);
registerOutgoing(State.PLAY, 0x44, 0x45);
registerOutgoing(State.PLAY, 0x45, 0x46);
registerOutgoing(State.PLAY, 0x46, 0x47);
registerOutgoing(State.PLAY, 0x47, 0x48);
registerOutgoing(State.PLAY, 0x48, 0x49);
registerOutgoing(State.PLAY, 0x49, 0x4A);
registerOutgoing(State.PLAY, 0x4A, 0x4B);
registerOutgoing(State.PLAY, 0x4B, 0x4C);
registerOutgoing(State.PLAY, 0x4C, 0x4D);
registerOutgoing(State.PLAY, 0x4D, 0x4E);
registerOutgoing(State.PLAY, 0x4E, 0x4F);
registerOutgoing(State.PLAY, 0x4F, 0x50);
registerOutgoing(State.PLAY, 0x50, 0x51);
registerOutgoing(State.PLAY, 0x52, 0x53);
registerOutgoing(State.PLAY, 0x53, 0x54);
registerOutgoing(State.PLAY, 0x54, 0x55);
registerOutgoing(State.PLAY, 0x55, 0x56);
registerOutgoing(State.PLAY, 0x56, 0x57);
registerOutgoing(State.PLAY, 0x57, 0x58);
registerOutgoing(State.PLAY, 0x58, 0x59);
registerOutgoing(State.PLAY, 0x59, 0x5A);
registerOutgoing(State.PLAY, 0x5A, 0x5B);
registerOutgoing(State.PLAY, 0x5B, 0x5C);
registerOutgoing(State.PLAY, 0x5C, 0x08);
}
@Override
public void init(UserConnection userConnection) {
userConnection.put(new EntityTracker(userConnection));
}
}

View File

@ -0,0 +1,82 @@
package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.util.GsonUtil;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
public class MappingData {
public static SoundMappings soundMappings;
public static void init() {
JsonObject mapping1_14 = loadData("mapping-1.14.json");
JsonObject mapping1_15 = loadData("mapping-1.15.json");
Via.getPlatform().getLogger().info("Loading 1.14 -> 1.15 sound mapping...");
soundMappings = new SoundMappingShortArray(mapping1_14.getAsJsonArray("sounds"), mapping1_15.getAsJsonArray("sounds"));
}
private static JsonObject loadData(String name) {
InputStream stream = MappingData.class.getClassLoader().getResourceAsStream("assets/viaversion/data/" + name);
InputStreamReader reader = new InputStreamReader(stream);
try {
return GsonUtil.getGson().fromJson(reader, JsonObject.class);
} finally {
try {
reader.close();
} catch (IOException ignored) {
// Ignored
}
}
}
private static void mapIdentifiers(short[] output, JsonArray oldIdentifiers, JsonArray newIdentifiers) {
for (int i = 0; i < oldIdentifiers.size(); i++) {
JsonElement v = oldIdentifiers.get(i);
Integer index = findIndex(newIdentifiers, v.getAsString());
if (index == null) {
if (Via.getManager().isDebug()) {
Via.getPlatform().getLogger().warning("No key for " + v + " :( ");
}
continue;
}
output[i] = index.shortValue();
}
}
private static Integer findIndex(JsonArray array, String value) {
for (int i = 0; i < array.size(); i++) {
JsonElement v = array.get(i);
if (v.getAsString().equals(value)) {
return i;
}
}
return null;
}
public interface SoundMappings {
int getNewSound(int old);
}
private static class SoundMappingShortArray implements SoundMappings {
private short[] oldToNew;
private SoundMappingShortArray(JsonArray mapping1_14, JsonArray mapping1_15) {
oldToNew = new short[mapping1_14.size()];
Arrays.fill(oldToNew, (short) -1);
mapIdentifiers(oldToNew, mapping1_14, mapping1_15);
}
@Override
public int getNewSound(int old) {
return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1;
}
}
}

View File

@ -0,0 +1,116 @@
package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets;
import com.google.common.base.Optional;
import us.myles.ViaVersion.api.PacketWrapper;
import us.myles.ViaVersion.api.entities.Entity1_15Types;
import us.myles.ViaVersion.api.protocol.Protocol;
import us.myles.ViaVersion.api.remapper.PacketHandler;
import us.myles.ViaVersion.api.remapper.PacketRemapper;
import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.api.type.types.version.Types1_14;
import us.myles.ViaVersion.packets.State;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.MetadataRewriter;
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage.EntityTracker;
public class EntityPackets {
public static void register(Protocol protocol) {
// Spawn entity
protocol.registerOutgoing(State.PLAY, 0x00, 0x00, new PacketRemapper() {
@Override
public void registerMap() {
// Track Entity
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.passthrough(Type.VAR_INT);
wrapper.passthrough(Type.UUID);
int typeId = wrapper.read(Type.VAR_INT);
Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getNewEntityId(typeId));
wrapper.user().get(EntityTracker.class).addEntity(entityId, entityType);
wrapper.write(Type.VAR_INT, entityType.getId());
}
});
}
});
// Spawn mob packet
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
@Override
public void registerMap() {
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.passthrough(Type.VAR_INT);
wrapper.passthrough(Type.UUID);
int typeId = wrapper.read(Type.VAR_INT);
Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getNewEntityId(typeId));
wrapper.user().get(EntityTracker.class).addEntity(entityId, entityType);
wrapper.write(Type.VAR_INT, entityType.getId());
wrapper.passthrough(Type.DOUBLE);
wrapper.passthrough(Type.DOUBLE);
wrapper.passthrough(Type.DOUBLE);
wrapper.passthrough(Type.BYTE);
wrapper.passthrough(Type.BYTE);
wrapper.passthrough(Type.BYTE);
wrapper.passthrough(Type.SHORT);
wrapper.passthrough(Type.SHORT);
wrapper.passthrough(Type.SHORT);
wrapper.read(Types1_14.METADATA_LIST); // removed - probably sent in an update packet?
}
});
}
});
// Spawn player packet
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
@Override
public void registerMap() {
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.passthrough(Type.VAR_INT);
wrapper.passthrough(Type.UUID);
int typeId = wrapper.read(Type.VAR_INT);
Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getNewEntityId(typeId));
wrapper.user().get(EntityTracker.class).addEntity(entityId, entityType);
wrapper.write(Type.VAR_INT, entityType.getId());
wrapper.passthrough(Type.DOUBLE);
wrapper.passthrough(Type.DOUBLE);
wrapper.passthrough(Type.DOUBLE);
wrapper.passthrough(Type.BYTE);
wrapper.passthrough(Type.BYTE);
wrapper.read(Types1_14.METADATA); // removed - probably sent in an update packet?
}
});
}
});
// Metadata packet
protocol.registerOutgoing(State.PLAY, 0x43, 0x44, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // 0 - Entity ID
map(Types1_14.METADATA_LIST); // 1 - Metadata list
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0);
Optional<Entity1_15Types.EntityType> type = wrapper.user().get(EntityTracker.class).get(entityId);
MetadataRewriter.handleMetadata(entityId, type.orNull(), wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user());
}
});
}
});
}
public static int getNewEntityId(int oldId) {
return oldId >= 4 ? oldId + 1 : oldId; // 4 = bee
}
}

View File

@ -0,0 +1,29 @@
package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets;
import us.myles.ViaVersion.api.minecraft.item.Item;
import us.myles.ViaVersion.api.protocol.Protocol;
public class InventoryPackets {
public static void register(Protocol protocol) {
//TODO eeeeverything
}
public static void toClient(Item item) {
if (item == null) return;
item.setIdentifier(getNewItemId(item.getIdentifier()));
}
public static void toServer(Item item) {
if (item == null) return;
item.setIdentifier(getOldItemId(item.getIdentifier()));
}
public static int getNewItemId(int id) {
return id;
}
public static int getOldItemId(int id) {
return id;
}
}

View File

@ -0,0 +1,39 @@
package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage;
import com.google.common.base.Optional;
import us.myles.ViaVersion.api.data.ExternalJoinGameListener;
import us.myles.ViaVersion.api.data.StoredObject;
import us.myles.ViaVersion.api.data.UserConnection;
import us.myles.ViaVersion.api.entities.Entity1_15Types;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class EntityTracker extends StoredObject implements ExternalJoinGameListener {
private final Map<Integer, Entity1_15Types.EntityType> clientEntityTypes = new ConcurrentHashMap<>();
public EntityTracker(UserConnection user) {
super(user);
}
public void removeEntity(int entityId) {
clientEntityTypes.remove(entityId);
}
public void addEntity(int entityId, Entity1_15Types.EntityType type) {
clientEntityTypes.put(entityId, type);
}
public boolean has(int entityId) {
return clientEntityTypes.containsKey(entityId);
}
public Optional<Entity1_15Types.EntityType> get(int id) {
return Optional.fromNullable(clientEntityTypes.get(id));
}
@Override
public void onExternalJoinGame(int playerEntityId) {
clientEntityTypes.put(playerEntityId, Entity1_15Types.EntityType.PLAYER);
}
}

View File

@ -0,0 +1,811 @@
{
"sounds": [
"ambient.cave",
"ambient.underwater.enter",
"ambient.underwater.exit",
"ambient.underwater.loop",
"ambient.underwater.loop.additions",
"ambient.underwater.loop.additions.rare",
"ambient.underwater.loop.additions.ultra_rare",
"block.anvil.break",
"block.anvil.destroy",
"block.anvil.fall",
"block.anvil.hit",
"block.anvil.land",
"block.anvil.place",
"block.anvil.step",
"block.anvil.use",
"block.bamboo.break",
"block.bamboo.fall",
"block.bamboo.hit",
"block.bamboo.place",
"block.bamboo.step",
"block.bamboo_sapling.break",
"block.bamboo_sapling.hit",
"block.bamboo_sapling.place",
"block.barrel.close",
"block.barrel.open",
"block.beacon.activate",
"block.beacon.ambient",
"block.beacon.deactivate",
"block.beacon.power_select",
"block.beehive.drip",
"block.beehive.enter",
"block.beehive.exit",
"block.beehive.shear",
"block.beehive.work",
"block.bell.resonate",
"block.bell.use",
"block.blastfurnace.fire_crackle",
"block.brewing_stand.brew",
"block.bubble_column.bubble_pop",
"block.bubble_column.upwards_ambient",
"block.bubble_column.upwards_inside",
"block.bubble_column.whirlpool_ambient",
"block.bubble_column.whirlpool_inside",
"block.campfire.crackle",
"block.chest.close",
"block.chest.locked",
"block.chest.open",
"block.chorus_flower.death",
"block.chorus_flower.grow",
"block.comparator.click",
"block.composter.empty",
"block.composter.fill",
"block.composter.fill_success",
"block.composter.ready",
"block.conduit.activate",
"block.conduit.ambient",
"block.conduit.ambient.short",
"block.conduit.attack.target",
"block.conduit.deactivate",
"block.coral_block.break",
"block.coral_block.fall",
"block.coral_block.hit",
"block.coral_block.place",
"block.coral_block.step",
"block.crop.break",
"block.dispenser.dispense",
"block.dispenser.fail",
"block.dispenser.launch",
"block.enchantment_table.use",
"block.end_gateway.spawn",
"block.end_portal.spawn",
"block.end_portal_frame.fill",
"block.ender_chest.close",
"block.ender_chest.open",
"block.fence_gate.close",
"block.fence_gate.open",
"block.fire.ambient",
"block.fire.extinguish",
"block.furnace.fire_crackle",
"block.glass.break",
"block.glass.fall",
"block.glass.hit",
"block.glass.place",
"block.glass.step",
"block.grass.break",
"block.grass.fall",
"block.grass.hit",
"block.grass.place",
"block.grass.step",
"block.gravel.break",
"block.gravel.fall",
"block.gravel.hit",
"block.gravel.place",
"block.gravel.step",
"block.grindstone.use",
"block.iron_door.close",
"block.iron_door.open",
"block.iron_trapdoor.close",
"block.iron_trapdoor.open",
"block.ladder.break",
"block.ladder.fall",
"block.ladder.hit",
"block.ladder.place",
"block.ladder.step",
"block.lantern.break",
"block.lantern.fall",
"block.lantern.hit",
"block.lantern.place",
"block.lantern.step",
"block.lava.ambient",
"block.lava.extinguish",
"block.lava.pop",
"block.lever.click",
"block.lily_pad.place",
"block.metal.break",
"block.metal.fall",
"block.metal.hit",
"block.metal.place",
"block.metal.step",
"block.metal_pressure_plate.click_off",
"block.metal_pressure_plate.click_on",
"block.nether_wart.break",
"block.note_block.banjo",
"block.note_block.basedrum",
"block.note_block.bass",
"block.note_block.bell",
"block.note_block.bit",
"block.note_block.chime",
"block.note_block.cow_bell",
"block.note_block.didgeridoo",
"block.note_block.flute",
"block.note_block.guitar",
"block.note_block.harp",
"block.note_block.hat",
"block.note_block.iron_xylophone",
"block.note_block.pling",
"block.note_block.snare",
"block.note_block.xylophone",
"block.piston.contract",
"block.piston.extend",
"block.portal.ambient",
"block.portal.travel",
"block.portal.trigger",
"block.pumpkin.carve",
"block.redstone_torch.burnout",
"block.sand.break",
"block.sand.fall",
"block.sand.hit",
"block.sand.place",
"block.sand.step",
"block.scaffolding.break",
"block.scaffolding.fall",
"block.scaffolding.hit",
"block.scaffolding.place",
"block.scaffolding.step",
"block.shulker_box.close",
"block.shulker_box.open",
"block.slime_block.break",
"block.slime_block.fall",
"block.slime_block.hit",
"block.slime_block.place",
"block.slime_block.step",
"block.smoker.smoke",
"block.snow.break",
"block.snow.fall",
"block.snow.hit",
"block.snow.place",
"block.snow.step",
"block.stone.break",
"block.stone.fall",
"block.stone.hit",
"block.stone.place",
"block.stone.step",
"block.stone_button.click_off",
"block.stone_button.click_on",
"block.stone_pressure_plate.click_off",
"block.stone_pressure_plate.click_on",
"block.sweet_berry_bush.break",
"block.sweet_berry_bush.place",
"block.tripwire.attach",
"block.tripwire.click_off",
"block.tripwire.click_on",
"block.tripwire.detach",
"block.water.ambient",
"block.wet_grass.break",
"block.wet_grass.fall",
"block.wet_grass.hit",
"block.wet_grass.place",
"block.wet_grass.step",
"block.wood.break",
"block.wood.fall",
"block.wood.hit",
"block.wood.place",
"block.wood.step",
"block.wooden_button.click_off",
"block.wooden_button.click_on",
"block.wooden_door.close",
"block.wooden_door.open",
"block.wooden_pressure_plate.click_off",
"block.wooden_pressure_plate.click_on",
"block.wooden_trapdoor.close",
"block.wooden_trapdoor.open",
"block.wool.break",
"block.wool.fall",
"block.wool.hit",
"block.wool.place",
"block.wool.step",
"enchant.thorns.hit",
"entity.armor_stand.break",
"entity.armor_stand.fall",
"entity.armor_stand.hit",
"entity.armor_stand.place",
"entity.arrow.hit",
"entity.arrow.hit_player",
"entity.arrow.shoot",
"entity.bat.ambient",
"entity.bat.death",
"entity.bat.hurt",
"entity.bat.loop",
"entity.bat.takeoff",
"entity.bee.death",
"entity.bee.hurt",
"entity.bee.loop",
"entity.bee.loop_aggressive",
"entity.bee.pollinate",
"entity.bee.sting",
"entity.blaze.ambient",
"entity.blaze.burn",
"entity.blaze.death",
"entity.blaze.hurt",
"entity.blaze.shoot",
"entity.boat.paddle_land",
"entity.boat.paddle_water",
"entity.cat.ambient",
"entity.cat.beg_for_food",
"entity.cat.death",
"entity.cat.eat",
"entity.cat.hiss",
"entity.cat.hurt",
"entity.cat.purr",
"entity.cat.purreow",
"entity.cat.stray_ambient",
"entity.chicken.ambient",
"entity.chicken.death",
"entity.chicken.egg",
"entity.chicken.hurt",
"entity.chicken.step",
"entity.cod.ambient",
"entity.cod.death",
"entity.cod.flop",
"entity.cod.hurt",
"entity.cow.ambient",
"entity.cow.death",
"entity.cow.hurt",
"entity.cow.milk",
"entity.cow.step",
"entity.creeper.death",
"entity.creeper.hurt",
"entity.creeper.primed",
"entity.dolphin.ambient",
"entity.dolphin.ambient_water",
"entity.dolphin.attack",
"entity.dolphin.death",
"entity.dolphin.eat",
"entity.dolphin.hurt",
"entity.dolphin.jump",
"entity.dolphin.play",
"entity.dolphin.splash",
"entity.dolphin.swim",
"entity.donkey.ambient",
"entity.donkey.angry",
"entity.donkey.chest",
"entity.donkey.death",
"entity.donkey.hurt",
"entity.dragon_fireball.explode",
"entity.drowned.ambient",
"entity.drowned.ambient_water",
"entity.drowned.death",
"entity.drowned.death_water",
"entity.drowned.hurt",
"entity.drowned.hurt_water",
"entity.drowned.shoot",
"entity.drowned.step",
"entity.drowned.swim",
"entity.egg.throw",
"entity.elder_guardian.ambient",
"entity.elder_guardian.ambient_land",
"entity.elder_guardian.curse",
"entity.elder_guardian.death",
"entity.elder_guardian.death_land",
"entity.elder_guardian.flop",
"entity.elder_guardian.hurt",
"entity.elder_guardian.hurt_land",
"entity.ender_dragon.ambient",
"entity.ender_dragon.death",
"entity.ender_dragon.flap",
"entity.ender_dragon.growl",
"entity.ender_dragon.hurt",
"entity.ender_dragon.shoot",
"entity.ender_eye.death",
"entity.ender_eye.launch",
"entity.ender_pearl.throw",
"entity.enderman.ambient",
"entity.enderman.death",
"entity.enderman.hurt",
"entity.enderman.scream",
"entity.enderman.stare",
"entity.enderman.teleport",
"entity.endermite.ambient",
"entity.endermite.death",
"entity.endermite.hurt",
"entity.endermite.step",
"entity.evoker.ambient",
"entity.evoker.cast_spell",
"entity.evoker.celebrate",
"entity.evoker.death",
"entity.evoker.hurt",
"entity.evoker.prepare_attack",
"entity.evoker.prepare_summon",
"entity.evoker.prepare_wololo",
"entity.evoker_fangs.attack",
"entity.experience_bottle.throw",
"entity.experience_orb.pickup",
"entity.firework_rocket.blast",
"entity.firework_rocket.blast_far",
"entity.firework_rocket.large_blast",
"entity.firework_rocket.large_blast_far",
"entity.firework_rocket.launch",
"entity.firework_rocket.shoot",
"entity.firework_rocket.twinkle",
"entity.firework_rocket.twinkle_far",
"entity.fish.swim",
"entity.fishing_bobber.retrieve",
"entity.fishing_bobber.splash",
"entity.fishing_bobber.throw",
"entity.fox.aggro",
"entity.fox.ambient",
"entity.fox.bite",
"entity.fox.death",
"entity.fox.eat",
"entity.fox.hurt",
"entity.fox.screech",
"entity.fox.sleep",
"entity.fox.sniff",
"entity.fox.spit",
"entity.generic.big_fall",
"entity.generic.burn",
"entity.generic.death",
"entity.generic.drink",
"entity.generic.eat",
"entity.generic.explode",
"entity.generic.extinguish_fire",
"entity.generic.hurt",
"entity.generic.small_fall",
"entity.generic.splash",
"entity.generic.swim",
"entity.ghast.ambient",
"entity.ghast.death",
"entity.ghast.hurt",
"entity.ghast.scream",
"entity.ghast.shoot",
"entity.ghast.warn",
"entity.guardian.ambient",
"entity.guardian.ambient_land",
"entity.guardian.attack",
"entity.guardian.death",
"entity.guardian.death_land",
"entity.guardian.flop",
"entity.guardian.hurt",
"entity.guardian.hurt_land",
"entity.horse.ambient",
"entity.horse.angry",
"entity.horse.armor",
"entity.horse.breathe",
"entity.horse.death",
"entity.horse.eat",
"entity.horse.gallop",
"entity.horse.hurt",
"entity.horse.jump",
"entity.horse.land",
"entity.horse.saddle",
"entity.horse.step",
"entity.horse.step_wood",
"entity.hostile.big_fall",
"entity.hostile.death",
"entity.hostile.hurt",
"entity.hostile.small_fall",
"entity.hostile.splash",
"entity.hostile.swim",
"entity.husk.ambient",
"entity.husk.converted_to_zombie",
"entity.husk.death",
"entity.husk.hurt",
"entity.husk.step",
"entity.illusioner.ambient",
"entity.illusioner.cast_spell",
"entity.illusioner.death",
"entity.illusioner.hurt",
"entity.illusioner.mirror_move",
"entity.illusioner.prepare_blindness",
"entity.illusioner.prepare_mirror",
"entity.iron_golem.attack",
"entity.iron_golem.death",
"entity.iron_golem.hurt",
"entity.iron_golem.step",
"entity.item.break",
"entity.item.pickup",
"entity.item_frame.add_item",
"entity.item_frame.break",
"entity.item_frame.place",
"entity.item_frame.remove_item",
"entity.item_frame.rotate_item",
"entity.leash_knot.break",
"entity.leash_knot.place",
"entity.lightning_bolt.impact",
"entity.lightning_bolt.thunder",
"entity.lingering_potion.throw",
"entity.llama.ambient",
"entity.llama.angry",
"entity.llama.chest",
"entity.llama.death",
"entity.llama.eat",
"entity.llama.hurt",
"entity.llama.spit",
"entity.llama.step",
"entity.llama.swag",
"entity.magma_cube.death",
"entity.magma_cube.death_small",
"entity.magma_cube.hurt",
"entity.magma_cube.hurt_small",
"entity.magma_cube.jump",
"entity.magma_cube.squish",
"entity.magma_cube.squish_small",
"entity.minecart.inside",
"entity.minecart.riding",
"entity.mooshroom.convert",
"entity.mooshroom.eat",
"entity.mooshroom.milk",
"entity.mooshroom.shear",
"entity.mooshroom.suspicious_milk",
"entity.mule.ambient",
"entity.mule.chest",
"entity.mule.death",
"entity.mule.hurt",
"entity.ocelot.ambient",
"entity.ocelot.death",
"entity.ocelot.hurt",
"entity.painting.break",
"entity.painting.place",
"entity.panda.aggressive_ambient",
"entity.panda.ambient",
"entity.panda.bite",
"entity.panda.cant_breed",
"entity.panda.death",
"entity.panda.eat",
"entity.panda.hurt",
"entity.panda.pre_sneeze",
"entity.panda.sneeze",
"entity.panda.step",
"entity.panda.worried_ambient",
"entity.parrot.ambient",
"entity.parrot.death",
"entity.parrot.eat",
"entity.parrot.fly",
"entity.parrot.hurt",
"entity.parrot.imitate.blaze",
"entity.parrot.imitate.creeper",
"entity.parrot.imitate.drowned",
"entity.parrot.imitate.elder_guardian",
"entity.parrot.imitate.ender_dragon",
"entity.parrot.imitate.enderman",
"entity.parrot.imitate.endermite",
"entity.parrot.imitate.evoker",
"entity.parrot.imitate.ghast",
"entity.parrot.imitate.guardian",
"entity.parrot.imitate.husk",
"entity.parrot.imitate.illusioner",
"entity.parrot.imitate.magma_cube",
"entity.parrot.imitate.panda",
"entity.parrot.imitate.phantom",
"entity.parrot.imitate.pillager",
"entity.parrot.imitate.polar_bear",
"entity.parrot.imitate.ravager",
"entity.parrot.imitate.shulker",
"entity.parrot.imitate.silverfish",
"entity.parrot.imitate.skeleton",
"entity.parrot.imitate.slime",
"entity.parrot.imitate.spider",
"entity.parrot.imitate.stray",
"entity.parrot.imitate.vex",
"entity.parrot.imitate.vindicator",
"entity.parrot.imitate.witch",
"entity.parrot.imitate.wither",
"entity.parrot.imitate.wither_skeleton",
"entity.parrot.imitate.wolf",
"entity.parrot.imitate.zombie",
"entity.parrot.imitate.zombie_pigman",
"entity.parrot.imitate.zombie_villager",
"entity.parrot.step",
"entity.phantom.ambient",
"entity.phantom.bite",
"entity.phantom.death",
"entity.phantom.flap",
"entity.phantom.hurt",
"entity.phantom.swoop",
"entity.pig.ambient",
"entity.pig.death",
"entity.pig.hurt",
"entity.pig.saddle",
"entity.pig.step",
"entity.pillager.ambient",
"entity.pillager.celebrate",
"entity.pillager.death",
"entity.pillager.hurt",
"entity.player.attack.crit",
"entity.player.attack.knockback",
"entity.player.attack.nodamage",
"entity.player.attack.strong",
"entity.player.attack.sweep",
"entity.player.attack.weak",
"entity.player.big_fall",
"entity.player.breath",
"entity.player.burp",
"entity.player.death",
"entity.player.hurt",
"entity.player.hurt_drown",
"entity.player.hurt_on_fire",
"entity.player.hurt_sweet_berry_bush",
"entity.player.levelup",
"entity.player.small_fall",
"entity.player.splash",
"entity.player.splash.high_speed",
"entity.player.swim",
"entity.polar_bear.ambient",
"entity.polar_bear.ambient_baby",
"entity.polar_bear.death",
"entity.polar_bear.hurt",
"entity.polar_bear.step",
"entity.polar_bear.warning",
"entity.puffer_fish.ambient",
"entity.puffer_fish.blow_out",
"entity.puffer_fish.blow_up",
"entity.puffer_fish.death",
"entity.puffer_fish.flop",
"entity.puffer_fish.hurt",
"entity.puffer_fish.sting",
"entity.rabbit.ambient",
"entity.rabbit.attack",
"entity.rabbit.death",
"entity.rabbit.hurt",
"entity.rabbit.jump",
"entity.ravager.ambient",
"entity.ravager.attack",
"entity.ravager.celebrate",
"entity.ravager.death",
"entity.ravager.hurt",
"entity.ravager.roar",
"entity.ravager.step",
"entity.ravager.stunned",
"entity.salmon.ambient",
"entity.salmon.death",
"entity.salmon.flop",
"entity.salmon.hurt",
"entity.sheep.ambient",
"entity.sheep.death",
"entity.sheep.hurt",
"entity.sheep.shear",
"entity.sheep.step",
"entity.shulker.ambient",
"entity.shulker.close",
"entity.shulker.death",
"entity.shulker.hurt",
"entity.shulker.hurt_closed",
"entity.shulker.open",
"entity.shulker.shoot",
"entity.shulker.teleport",
"entity.shulker_bullet.hit",
"entity.shulker_bullet.hurt",
"entity.silverfish.ambient",
"entity.silverfish.death",
"entity.silverfish.hurt",
"entity.silverfish.step",
"entity.skeleton.ambient",
"entity.skeleton.death",
"entity.skeleton.hurt",
"entity.skeleton.shoot",
"entity.skeleton.step",
"entity.skeleton_horse.ambient",
"entity.skeleton_horse.ambient_water",
"entity.skeleton_horse.death",
"entity.skeleton_horse.gallop_water",
"entity.skeleton_horse.hurt",
"entity.skeleton_horse.jump_water",
"entity.skeleton_horse.step_water",
"entity.skeleton_horse.swim",
"entity.slime.attack",
"entity.slime.death",
"entity.slime.death_small",
"entity.slime.hurt",
"entity.slime.hurt_small",
"entity.slime.jump",
"entity.slime.jump_small",
"entity.slime.squish",
"entity.slime.squish_small",
"entity.snow_golem.ambient",
"entity.snow_golem.death",
"entity.snow_golem.hurt",
"entity.snow_golem.shoot",
"entity.snowball.throw",
"entity.spider.ambient",
"entity.spider.death",
"entity.spider.hurt",
"entity.spider.step",
"entity.splash_potion.break",
"entity.splash_potion.throw",
"entity.squid.ambient",
"entity.squid.death",
"entity.squid.hurt",
"entity.squid.squirt",
"entity.stray.ambient",
"entity.stray.death",
"entity.stray.hurt",
"entity.stray.step",
"entity.tnt.primed",
"entity.tropical_fish.ambient",
"entity.tropical_fish.death",
"entity.tropical_fish.flop",
"entity.tropical_fish.hurt",
"entity.turtle.ambient_land",
"entity.turtle.death",
"entity.turtle.death_baby",
"entity.turtle.egg_break",
"entity.turtle.egg_crack",
"entity.turtle.egg_hatch",
"entity.turtle.hurt",
"entity.turtle.hurt_baby",
"entity.turtle.lay_egg",
"entity.turtle.shamble",
"entity.turtle.shamble_baby",
"entity.turtle.swim",
"entity.vex.ambient",
"entity.vex.charge",
"entity.vex.death",
"entity.vex.hurt",
"entity.villager.ambient",
"entity.villager.celebrate",
"entity.villager.death",
"entity.villager.hurt",
"entity.villager.no",
"entity.villager.trade",
"entity.villager.work_armorer",
"entity.villager.work_butcher",
"entity.villager.work_cartographer",
"entity.villager.work_cleric",
"entity.villager.work_farmer",
"entity.villager.work_fisherman",
"entity.villager.work_fletcher",
"entity.villager.work_leatherworker",
"entity.villager.work_librarian",
"entity.villager.work_mason",
"entity.villager.work_shepherd",
"entity.villager.work_toolsmith",
"entity.villager.work_weaponsmith",
"entity.villager.yes",
"entity.vindicator.ambient",
"entity.vindicator.celebrate",
"entity.vindicator.death",
"entity.vindicator.hurt",
"entity.wandering_trader.ambient",
"entity.wandering_trader.death",
"entity.wandering_trader.disappeared",
"entity.wandering_trader.drink_milk",
"entity.wandering_trader.drink_potion",
"entity.wandering_trader.hurt",
"entity.wandering_trader.no",
"entity.wandering_trader.reappeared",
"entity.wandering_trader.trade",
"entity.wandering_trader.yes",
"entity.witch.ambient",
"entity.witch.celebrate",
"entity.witch.death",
"entity.witch.drink",
"entity.witch.hurt",
"entity.witch.throw",
"entity.wither.ambient",
"entity.wither.break_block",
"entity.wither.death",
"entity.wither.hurt",
"entity.wither.shoot",
"entity.wither.spawn",
"entity.wither_skeleton.ambient",
"entity.wither_skeleton.death",
"entity.wither_skeleton.hurt",
"entity.wither_skeleton.step",
"entity.wolf.ambient",
"entity.wolf.death",
"entity.wolf.growl",
"entity.wolf.howl",
"entity.wolf.hurt",
"entity.wolf.pant",
"entity.wolf.shake",
"entity.wolf.step",
"entity.wolf.whine",
"entity.zombie.ambient",
"entity.zombie.attack_iron_door",
"entity.zombie.attack_wooden_door",
"entity.zombie.break_wooden_door",
"entity.zombie.converted_to_drowned",
"entity.zombie.death",
"entity.zombie.destroy_egg",
"entity.zombie.hurt",
"entity.zombie.infect",
"entity.zombie.step",
"entity.zombie_horse.ambient",
"entity.zombie_horse.death",
"entity.zombie_horse.hurt",
"entity.zombie_pigman.ambient",
"entity.zombie_pigman.angry",
"entity.zombie_pigman.death",
"entity.zombie_pigman.hurt",
"entity.zombie_villager.ambient",
"entity.zombie_villager.converted",
"entity.zombie_villager.cure",
"entity.zombie_villager.death",
"entity.zombie_villager.hurt",
"entity.zombie_villager.step",
"event.raid.horn",
"item.armor.equip_chain",
"item.armor.equip_diamond",
"item.armor.equip_elytra",
"item.armor.equip_generic",
"item.armor.equip_gold",
"item.armor.equip_iron",
"item.armor.equip_leather",
"item.armor.equip_turtle",
"item.axe.strip",
"item.book.page_turn",
"item.book.put",
"item.bottle.empty",
"item.bottle.fill",
"item.bottle.fill_dragonbreath",
"item.bucket.empty",
"item.bucket.empty_fish",
"item.bucket.empty_lava",
"item.bucket.fill",
"item.bucket.fill_fish",
"item.bucket.fill_lava",
"item.chorus_fruit.teleport",
"item.crop.plant",
"item.crossbow.hit",
"item.crossbow.loading_end",
"item.crossbow.loading_middle",
"item.crossbow.loading_start",
"item.crossbow.quick_charge_1",
"item.crossbow.quick_charge_2",
"item.crossbow.quick_charge_3",
"item.crossbow.shoot",
"item.elytra.flying",
"item.firecharge.use",
"item.flintandsteel.use",
"item.hoe.till",
"item.honey_bottle.drink",
"item.nether_wart.plant",
"item.shield.block",
"item.shield.break",
"item.shovel.flatten",
"item.sweet_berries.pick_from_bush",
"item.totem.use",
"item.trident.hit",
"item.trident.hit_ground",
"item.trident.return",
"item.trident.riptide_1",
"item.trident.riptide_2",
"item.trident.riptide_3",
"item.trident.throw",
"item.trident.thunder",
"music.creative",
"music.credits",
"music.dragon",
"music.end",
"music.game",
"music.menu",
"music.nether",
"music.under_water",
"music_disc.11",
"music_disc.13",
"music_disc.blocks",
"music_disc.cat",
"music_disc.chirp",
"music_disc.far",
"music_disc.mall",
"music_disc.mellohi",
"music_disc.stal",
"music_disc.strad",
"music_disc.wait",
"music_disc.ward",
"ui.button.click",
"ui.cartography_table.take_result",
"ui.loom.select_pattern",
"ui.loom.take_result",
"ui.stonecutter.select_recipe",
"ui.stonecutter.take_result",
"ui.toast.challenge_complete",
"ui.toast.in",
"ui.toast.out",
"weather.rain",
"weather.rain.above"
]
}

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>viaversion-parent</artifactId>
<groupId>us.myles</groupId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<name>viaversion-jar</name>

View File

@ -6,7 +6,7 @@
<groupId>us.myles</groupId>
<artifactId>viaversion-parent</artifactId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
<packaging>pom</packaging>
<name>viaversion-parent</name>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>viaversion-parent</artifactId>
<groupId>us.myles</groupId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>viaversion-parent</artifactId>
<groupId>us.myles</groupId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>viaversion-parent</artifactId>
<groupId>us.myles</groupId>
<version>2.1.4-SNAPSHOT</version>
<version>2.1.4-19w34a</version>
</parent>
<modelVersion>4.0.0</modelVersion>