From 7a98cdd28fc2b219dcedeacc22b3921ecd228697 Mon Sep 17 00:00:00 2001 From: Myles Date: Thu, 17 Mar 2016 13:58:49 +0000 Subject: [PATCH] Remove more debug code Correct casting detector in packet wrapper. Re-order some packets Implement Plugin Message Transformers Implement Sound Transformer Implement Block Entity Transformer --- .../myles/ViaVersion2/api/PacketWrapper.java | 4 +- .../metadata/MetadataRewriter.java | 1 - .../packets/EntityPackets.java | 2 - .../packets/InventoryPackets.java | 12 ++-- .../packets/PlayerPackets.java | 53 +++++++++++++- .../packets/WorldPackets.java | 69 +++++++++++++++++-- .../types/MetadataListType.java | 1 - .../protocol1_9to1_8/types/MetadataType.java | 1 - .../ViaVersion2/api/type/types/ArrayType.java | 1 - 9 files changed, 122 insertions(+), 22 deletions(-) diff --git a/src/main/java/us/myles/ViaVersion2/api/PacketWrapper.java b/src/main/java/us/myles/ViaVersion2/api/PacketWrapper.java index c4da5f89c..eaf7fce8f 100644 --- a/src/main/java/us/myles/ViaVersion2/api/PacketWrapper.java +++ b/src/main/java/us/myles/ViaVersion2/api/PacketWrapper.java @@ -94,12 +94,12 @@ public class PacketWrapper { try { Object value = packetValue.getValue(); if (value != null) { - if (!value.getClass().equals(packetValue.getKey().getOutputClass())) { + if (!packetValue.getKey().getOutputClass().isAssignableFrom(value.getClass())) { // attempt conversion if (packetValue.getKey() instanceof TypeConverter) { value = ((TypeConverter) packetValue.getKey()).from(value); } else { - System.out.println("Possible type mismatch: " + value.getClass().getName() + " -> " + packetValue.getKey().getTypeName()); + System.out.println("Possible type mismatch: " + value.getClass().getName() + " -> " + packetValue.getKey().getOutputClass()); } } } diff --git a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/metadata/MetadataRewriter.java b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/metadata/MetadataRewriter.java index c10694a05..20c7e008e 100644 --- a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/metadata/MetadataRewriter.java +++ b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/metadata/MetadataRewriter.java @@ -135,7 +135,6 @@ public class MetadataRewriter { list.remove(entry); break; } - System.out.println("List Item: " + entry.getType().getTypeName() + " - " + entry.getValue() + " New Type: " + metaIndex.getNewType()); } else { list.remove(entry); } diff --git a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/EntityPackets.java b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/EntityPackets.java index a5b984172..6e5805993 100644 --- a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/EntityPackets.java +++ b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/EntityPackets.java @@ -82,7 +82,6 @@ public class EntityPackets { handler(new PacketHandler() { @Override public void handle(PacketWrapper wrapper) throws Exception { - System.out.println("handling holo for tp"); int entityID = wrapper.get(Type.VAR_INT, 0); if (((ViaVersionPlugin) ViaVersion.getInstance()).isHologramPatch()) { EntityTracker tracker = wrapper.user().get(EntityTracker.class); @@ -116,7 +115,6 @@ public class EntityPackets { handler(new PacketHandler() { @Override public void handle(PacketWrapper wrapper) throws Exception { - System.out.println("look move"); int entityID = wrapper.get(Type.VAR_INT, 0); if (((ViaVersionPlugin) ViaVersion.getInstance()).isHologramPatch()) { EntityTracker tracker = wrapper.user().get(EntityTracker.class); diff --git a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/InventoryPackets.java b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/InventoryPackets.java index a2ff5baf9..093403918 100644 --- a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/InventoryPackets.java +++ b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/InventoryPackets.java @@ -291,11 +291,6 @@ public class InventoryPackets { } }); - /* Packets which do not have any field remapping or handlers */ - - protocol.registerIncoming(State.PLAY, 0x0F, 0x05); // Confirm Transaction Packet - protocol.registerIncoming(State.PLAY, 0x11, 0x06); // Enchant Item Packet - // Held Item Change Packet protocol.registerIncoming(State.PLAY, 0x09, 0x17, new PacketRemapper() { @Override @@ -313,5 +308,12 @@ public class InventoryPackets { }); } }); + + /* Packets which do not have any field remapping or handlers */ + + protocol.registerIncoming(State.PLAY, 0x0F, 0x05); // Confirm Transaction Packet + protocol.registerIncoming(State.PLAY, 0x11, 0x06); // Enchant Item Packet + + } } diff --git a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/PlayerPackets.java b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/PlayerPackets.java index 9c7402e77..61c336861 100644 --- a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/PlayerPackets.java +++ b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/PlayerPackets.java @@ -221,6 +221,23 @@ public class PlayerPackets { }); } }); + // Packet Plugin Message Outgoing + protocol.registerOutgoing(State.PLAY, 0x3F, 0x18, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.STRING); // 0 - Channel Name + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + String name = wrapper.get(Type.STRING, 0); + if(name.equalsIgnoreCase("MC|BOpen")){ + wrapper.passthrough(Type.REMAINING_BYTES); // This is so ugly, :( + wrapper.write(Type.VAR_INT, 0); + } + } + }); + } + }); /* Packets which do not have any field remapping or handlers */ @@ -359,6 +376,39 @@ public class PlayerPackets { } }); + // Packet Plugin Message Incoming + protocol.registerIncoming(State.PLAY, 0x17, 0x09, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.STRING); // 0 - Channel Name + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + String name = wrapper.get(Type.STRING, 0); + if(name.equalsIgnoreCase("MC|BSign")){ + Item item = wrapper.passthrough(Type.ITEM); + if(item != null){ + item.setId((short) Material.WRITTEN_BOOK.getId()); + } + } + if(name.equalsIgnoreCase("MC|AutoCmd")){ + wrapper.set(Type.STRING, 0, "MC|AdvCdm"); + wrapper.write(Type.BYTE, (byte) 0); + wrapper.passthrough(Type.INT); // X + wrapper.passthrough(Type.INT); // Y + wrapper.passthrough(Type.INT); // Z + wrapper.passthrough(Type.STRING); // Command + wrapper.passthrough(Type.BOOLEAN); // Flag + wrapper.clearInputBuffer(); + } + if(name.equalsIgnoreCase("MC|AdvCmd")){ + wrapper.set(Type.STRING, 0, "MC|AdvCdm"); + } + } + }); + } + }); + /* Packets which do not have any field remapping or handlers */ protocol.registerIncoming(State.PLAY, 0x01, 0x02); // Chat Message Packet @@ -373,8 +423,5 @@ public class PlayerPackets { protocol.registerIncoming(State.PLAY, 0x05, 0x0E, new PlayerMovementMapper()); // Player Look Packet protocol.registerIncoming(State.PLAY, 0x03, 0x0F, new PlayerMovementMapper()); // Player Packet - // TODO Plugin Channels :( - protocol.registerIncoming(State.PLAY, 0x17, 0x09); // plugin message incoming - protocol.registerOutgoing(State.PLAY, 0x3F, 0x18); // plugin message outgoing } } diff --git a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/WorldPackets.java b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/WorldPackets.java index 68026dc4c..a7c98b726 100644 --- a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/WorldPackets.java +++ b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/packets/WorldPackets.java @@ -1,9 +1,14 @@ package us.myles.ViaVersion2.api.protocol1_9to1_8.packets; +import org.spacehq.opennbt.tag.builtin.CompoundTag; +import org.spacehq.opennbt.tag.builtin.StringTag; +import us.myles.ViaVersion.CancelException; import us.myles.ViaVersion.ViaVersionPlugin; import us.myles.ViaVersion.api.ViaVersion; import us.myles.ViaVersion.chunks.Chunk; import us.myles.ViaVersion.packets.State; +import us.myles.ViaVersion.sounds.SoundEffect; +import us.myles.ViaVersion.util.PacketUtil; import us.myles.ViaVersion2.api.PacketWrapper; import us.myles.ViaVersion2.api.item.Item; import us.myles.ViaVersion2.api.protocol.Protocol; @@ -37,11 +42,17 @@ public class WorldPackets { map(Type.INT); // 0 - Effect ID // Everything else get's written through - // TODO: Effect canceller patch handler(new PacketHandler() { @Override public void handle(PacketWrapper wrapper) throws Exception { - wrapper.cancel(); + int id = wrapper.get(Type.INT, 0); + if (id >= 1000 && id < 2000 && id != 1005) { // Sound Effect + wrapper.cancel(); + } + if (id == 1005) { // Fix jukebox + id = 1010; + } + wrapper.set(Type.INT, 0, id); } }); } @@ -55,11 +66,24 @@ public class WorldPackets { // 1 - Sound Category ID // Everything else get's written through - // TODO: Sound Effect translator patch handler(new PacketHandler() { @Override public void handle(PacketWrapper wrapper) throws Exception { - wrapper.cancel(); + String name = wrapper.get(Type.STRING, 0); + + SoundEffect effect = SoundEffect.getByName(name); + int catid = 0; + String newname = name; + if (effect != null) { + if (effect.isBreaksound()) { + wrapper.cancel(); + return; + } + catid = effect.getCategory().getId(); + newname = effect.getNewName(); + } + wrapper.set(Type.STRING, 0, newname); + wrapper.write(Type.VAR_INT, catid); // Write Category ID } }); } @@ -86,11 +110,44 @@ public class WorldPackets { } }); + // Update Block Entity Packet + protocol.registerOutgoing(State.PLAY, 0x35, 0x09, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.POSITION); // 0 - Block Position + map(Type.UNSIGNED_BYTE); // 1 - Action + map(Type.NBT); // 2 - NBT (Might not be present) + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int action = wrapper.get(Type.UNSIGNED_BYTE, 0); + if (action == 1) { // Update Spawner + CompoundTag tag = wrapper.get(Type.NBT, 0); + if (tag != null) { + if (tag.contains("EntityId")) { + String entity = (String) tag.get("EntityId").getValue(); + CompoundTag spawn = new CompoundTag("SpawnData"); + spawn.put(new StringTag("id", entity)); + tag.put(spawn); + } else { // EntityID does not exist + CompoundTag spawn = new CompoundTag("SpawnData"); + spawn.put(new StringTag("id", "AreaEffectCloud")); //Make spawners show up as empty when no EntityId is given. + tag.put(spawn); + } + } + } + if (action == 2) { // Update Command Block + // To prevent window issues don't send updates + wrapper.cancel(); + } + } + }); + } + }); + /* Packets which do not have any field remapping or handlers */ protocol.registerOutgoing(State.PLAY, 0x25, 0x08); // Block Break Animation Packet - protocol.registerOutgoing(State.PLAY, 0x35, 0x09); // Update Block Entity Packet - // TODO: Update_Block_Entity actually implement protocol.registerOutgoing(State.PLAY, 0x24, 0x0A); // Block Action Packet protocol.registerOutgoing(State.PLAY, 0x23, 0x0B); // Block Change Packet protocol.registerOutgoing(State.PLAY, 0x22, 0x10); // Multi Block Change Packet diff --git a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataListType.java b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataListType.java index 0c586be41..8e8a1deb9 100644 --- a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataListType.java +++ b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataListType.java @@ -31,7 +31,6 @@ public class MetadataListType extends Type> { public void write(ByteBuf buffer, List object) throws Exception { for (Metadata m : object) { Protocol1_9TO1_8.METADATA.write(buffer, m); - System.out.println("Writing meta data: " + m.getType().getTypeName() + " - " + m.getId() + " - " + m.getTypeID()); } // Write end of list Protocol1_9TO1_8.METADATA.write(buffer, null); diff --git a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataType.java b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataType.java index c6983cc2b..41324867d 100644 --- a/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataType.java +++ b/src/main/java/us/myles/ViaVersion2/api/protocol1_9to1_8/types/MetadataType.java @@ -26,7 +26,6 @@ public class MetadataType extends Type { public void write(ByteBuf buffer, Metadata object) throws Exception { if (object == null) { buffer.writeByte(255); - System.out.println("writing null :)"); } else { buffer.writeByte(object.getId()); buffer.writeByte(object.getTypeID()); diff --git a/src/main/java/us/myles/ViaVersion2/api/type/types/ArrayType.java b/src/main/java/us/myles/ViaVersion2/api/type/types/ArrayType.java index f2ce3be6f..c5a7e961a 100644 --- a/src/main/java/us/myles/ViaVersion2/api/type/types/ArrayType.java +++ b/src/main/java/us/myles/ViaVersion2/api/type/types/ArrayType.java @@ -18,7 +18,6 @@ public class ArrayType extends Type { int amount = Type.VAR_INT.read(buffer); T[] array = (T[]) Array.newInstance(elementType.getOutputClass(), amount); - System.out.println("READING ARRAY " + array.length); for (int i = 0; i < amount; i++) { array[i] = elementType.read(buffer); }