diff --git a/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java b/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java index 3b2e0cc1e..7748dd334 100644 --- a/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java +++ b/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java @@ -5,12 +5,12 @@ import com.google.common.collect.Sets; import org.bukkit.Bukkit; import us.myles.ViaVersion.api.Pair; import us.myles.ViaVersion.protocols.base.BaseProtocol; +import us.myles.ViaVersion.protocols.protocol1_10to1_9_3.Protocol1_10To1_9_3_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; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8; import us.myles.ViaVersion.protocols.protocol1_9to1_9_1.Protocol1_9TO1_9_1; -import us.myles.ViaVersion.protocols.protocolsnapshotto1_9_3.ProtocolSnapshotTo1_9_3_4; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -34,7 +34,7 @@ public class ProtocolRegistry { // Only supported for 1.9.4 server to 1.9 (nothing else) registerProtocol(new Protocol1_9TO1_9_1(), Arrays.asList(ProtocolVersion.v1_9.getId()), ProtocolVersion.v1_9_2.getId()); registerProtocol(new Protocol1_9_1_2TO1_9_3_4(), Arrays.asList(ProtocolVersion.v1_9_1.getId(), ProtocolVersion.v1_9_2.getId()), ProtocolVersion.v1_9_3.getId()); - registerProtocol(new ProtocolSnapshotTo1_9_3_4(), Collections.singletonList(ProtocolVersion.SNAPSHOT.getId()), ProtocolVersion.v1_9_3.getId()); + registerProtocol(new Protocol1_10To1_9_3_4(), Collections.singletonList(ProtocolVersion.SNAPSHOT.getId()), ProtocolVersion.v1_9_3.getId()); } diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/Protocol1_10To1_9_3_4.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/Protocol1_10To1_9_3_4.java new file mode 100644 index 000000000..5c83e35fc --- /dev/null +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/Protocol1_10To1_9_3_4.java @@ -0,0 +1,163 @@ +package us.myles.ViaVersion.protocols.protocol1_10to1_9_3; + +import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +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.remapper.ValueTransformer; +import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.packets.State; +import us.myles.ViaVersion.protocols.protocol1_10to1_9_3.storage.ResourcePackTracker; +import us.myles.ViaVersion.protocols.protocol1_10to1_9_3.types.MetaListSnapshotType; +import us.myles.ViaVersion.protocols.protocol1_10to1_9_3.types.MetaSnapshotType; + +import java.util.List; + +public class Protocol1_10To1_9_3_4 extends Protocol { + public static final Type> METADATA_LIST = new MetaListSnapshotType(); + public static final Type METADATA = new MetaSnapshotType(); + public static ValueTransformer toNewPitch = new ValueTransformer(Type.FLOAT) { + @Override + public Float transform(PacketWrapper wrapper, Short inputValue) throws Exception { + return inputValue / 63.5F; + + } + }; + + @Override + protected void registerPackets() { + // Named sound effect + registerOutgoing(State.PLAY, 0x19, 0x19, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.STRING); // 0 - Sound name + map(Type.VAR_INT); // 1 - Sound Category + map(Type.INT); // 2 - x + map(Type.INT); // 3 - y + map(Type.INT); // 4 - z + map(Type.FLOAT); // 5 - Volume + map(Type.UNSIGNED_BYTE, toNewPitch); // 6 - Pitch + } + }); + + // Sound effect + registerOutgoing(State.PLAY, 0x46, 0x46, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // 0 - Sound name + map(Type.VAR_INT); // 1 - Sound Category + map(Type.INT); // 2 - x + map(Type.INT); // 3 - y + map(Type.INT); // 4 - z + map(Type.FLOAT); // 5 - Volume + map(Type.UNSIGNED_BYTE, toNewPitch); // 6 - Pitch + + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int id = wrapper.get(Type.VAR_INT, 0); + wrapper.set(Type.VAR_INT, 0, getNewSoundId(id)); + } + }); + } + }); + + // Metadata packet + registerOutgoing(State.PLAY, 0x39, 0x39, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // 0 - Entity ID + map(METADATA_LIST); // 1 - Metadata list + } + }); + + // Spawn Mob + registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // 0 - Entity id + map(Type.UUID); // 1 - UUID + map(Type.UNSIGNED_BYTE); // 2 - Entity Type + map(Type.DOUBLE); // 3 - X + map(Type.DOUBLE); // 4 - Y + map(Type.DOUBLE); // 5 - Z + map(Type.BYTE); // 6 - Yaw + map(Type.BYTE); // 7 - Pitch + map(Type.BYTE); // 8 - Head Pitch + map(Type.SHORT); // 9 - Velocity X + map(Type.SHORT); // 10 - Velocity Y + map(Type.SHORT); // 11 - Velocity Z + map(METADATA_LIST); // 12 - Metadata + } + }); + + // Spawn Player + registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // 0 - Entity ID + map(Type.UUID); // 1 - Player UUID + map(Type.DOUBLE); // 2 - X + map(Type.DOUBLE); // 3 - Y + map(Type.DOUBLE); // 4 - Z + map(Type.BYTE); // 5 - Yaw + map(Type.BYTE); // 6 - Pitch + map(METADATA_LIST); // 7 - Metadata list + } + }); + + // Packet Send ResourcePack + registerOutgoing(State.PLAY, 0x32, 0x32, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.STRING); // 0 - URL + map(Type.STRING); // 1 - Hash + + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + ResourcePackTracker tracker = wrapper.user().get(ResourcePackTracker.class); + tracker.setLastHash(wrapper.get(Type.STRING, 1)); // Store the hash for resourcepack status + } + }); + } + }); + + // Packet ResourcePack status + registerIncoming(State.PLAY, 0x16, 0x16, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + ResourcePackTracker tracker = wrapper.user().get(ResourcePackTracker.class); + wrapper.write(Type.STRING, tracker.getLastHash()); + wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_INT)); + } + }); + } + }); + } + + public int getNewSoundId(int id) { //TODO Make it better, suggestions are welcome. It's ugly and hardcoded now. + int newId = id; + if (id >= 24) //Blame the enchantment table sound + newId += 1; + if (id >= 248) //Blame the husk + newId += 4; + if (id >= 296) //Blame the polar bear + newId += 6; + if (id >= 354) //Blame the stray + newId += 4; + if (id >= 372) //Blame the wither skeleton + newId += 4; + return newId; + } + + @Override + public void init(UserConnection userConnection) { + userConnection.put(new ResourcePackTracker(userConnection)); + } +} diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/storage/ResourcePackTracker.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/storage/ResourcePackTracker.java similarity index 83% rename from src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/storage/ResourcePackTracker.java rename to src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/storage/ResourcePackTracker.java index c72e7eae5..d1fef3f43 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/storage/ResourcePackTracker.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/storage/ResourcePackTracker.java @@ -1,4 +1,4 @@ -package us.myles.ViaVersion.protocols.protocolsnapshotto1_9_3.storage; +package us.myles.ViaVersion.protocols.protocol1_10to1_9_3.storage; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/types/MetaListSnapshotType.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/types/MetaListSnapshotType.java similarity index 65% rename from src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/types/MetaListSnapshotType.java rename to src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/types/MetaListSnapshotType.java index ebd0a7a1d..debd1a70c 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/types/MetaListSnapshotType.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/types/MetaListSnapshotType.java @@ -1,11 +1,11 @@ -package us.myles.ViaVersion.protocols.protocolsnapshotto1_9_3.types; +package us.myles.ViaVersion.protocols.protocol1_10to1_9_3.types; import io.netty.buffer.ByteBuf; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.minecraft.MetaListTypeTemplate; +import us.myles.ViaVersion.protocols.protocol1_10to1_9_3.Protocol1_10To1_9_3_4; import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType; -import us.myles.ViaVersion.protocols.protocolsnapshotto1_9_3.ProtocolSnapshotTo1_9_3_4; import java.util.ArrayList; import java.util.List; @@ -17,7 +17,7 @@ public class MetaListSnapshotType extends MetaListTypeTemplate { List list = new ArrayList<>(); Metadata meta; do { - meta = ProtocolSnapshotTo1_9_3_4.METADATA.read(buffer); + meta = Protocol1_10To1_9_3_4.METADATA.read(buffer); if (meta != null) list.add(meta); } while (meta != null); @@ -31,11 +31,11 @@ public class MetaListSnapshotType extends MetaListTypeTemplate { if (m.getId() >= 5) m.setId(m.getId() + 1); if (m.getId() == 4) - ProtocolSnapshotTo1_9_3_4.METADATA.write(buffer, new Metadata(5, NewType.Boolean.getTypeID(), Type.BOOLEAN, false)); // No gravity metadata - ProtocolSnapshotTo1_9_3_4.METADATA.write(buffer, m); + Protocol1_10To1_9_3_4.METADATA.write(buffer, new Metadata(5, NewType.Boolean.getTypeID(), Type.BOOLEAN, false)); // No gravity metadata + Protocol1_10To1_9_3_4.METADATA.write(buffer, m); } // Write end of list - ProtocolSnapshotTo1_9_3_4.METADATA.write(buffer, null); + Protocol1_10To1_9_3_4.METADATA.write(buffer, null); } } diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/types/MetaSnapshotType.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/types/MetaSnapshotType.java similarity index 93% rename from src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/types/MetaSnapshotType.java rename to src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/types/MetaSnapshotType.java index ca5b41430..a73e9d36f 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_9_3/types/MetaSnapshotType.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_10to1_9_3/types/MetaSnapshotType.java @@ -1,4 +1,4 @@ -package us.myles.ViaVersion.protocols.protocolsnapshotto1_9_3.types; +package us.myles.ViaVersion.protocols.protocol1_10to1_9_3.types; import io.netty.buffer.ByteBuf; import us.myles.ViaVersion.api.minecraft.metadata.Metadata;