From bd5f44b477af33e715022b48a32002063c9ea1ca Mon Sep 17 00:00:00 2001 From: HugoDaBosss Date: Sat, 5 Mar 2016 01:21:37 +0100 Subject: [PATCH 1/2] Fixed spawners showing the correct mob --- .../transformers/OutgoingTransformer.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java index 31aab67c9..ba4618a3b 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java @@ -1,12 +1,19 @@ package us.myles.ViaVersion.transformers; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufInputStream; +import io.netty.buffer.ByteBufOutputStream; + import org.bukkit.entity.EntityType; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.spacehq.mc.protocol.data.game.chunk.Column; import org.spacehq.mc.protocol.util.NetUtil; +import org.spacehq.opennbt.NBTIO; +import org.spacehq.opennbt.tag.builtin.CompoundTag; +import org.spacehq.opennbt.tag.builtin.StringTag; + import us.myles.ViaVersion.CancelException; import us.myles.ViaVersion.ConnectionInfo; import us.myles.ViaVersion.ViaVersionPlugin; @@ -20,6 +27,8 @@ import us.myles.ViaVersion.util.EntityUtil; import us.myles.ViaVersion.util.PacketUtil; import us.myles.ViaVersion.util.ReflectionUtil; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.IOException; import java.util.*; @@ -545,6 +554,32 @@ public class OutgoingTransformer { output.writeBytes(input); return; } + if (packet == PacketType.PLAY_UPDATE_BLOCK_ENTITY) { + long[] pos = PacketUtil.readBlockPosition(input); + int action = input.readUnsignedByte(); + if(action == 1) { // update spawner + try { + DataInputStream stream = new DataInputStream(new ByteBufInputStream(input)); + CompoundTag tag = (CompoundTag) NBTIO.readTag(stream); + String entity = (String) tag.get("EntityId").getValue(); + CompoundTag spawn = new CompoundTag("SpawnData"); + spawn.put(new StringTag("id", entity)); + tag.put(spawn); + PacketUtil.writeBlockPosition(output, pos[0], pos[1], pos[2]); + output.writeByte(action); + DataOutputStream out = new DataOutputStream(new ByteBufOutputStream(output)); + NBTIO.writeTag(out, tag); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return; + } + PacketUtil.writeBlockPosition(output, pos[0], pos[1], pos[2]); + output.writeByte(action); + output.writeBytes(input, input.readableBytes()); + return; + } if (packet == PacketType.PLAY_CHUNK_DATA) { // We need to catch unloading chunk packets as defined by wiki.vg // To unload chunks, send this packet with Ground-Up Continuous=true and no 16^3 chunks (eg. Primary Bit Mask=0) From a42526bb88bc7e85125bd9952f9baecac6c3d3dc Mon Sep 17 00:00:00 2001 From: HugoDaBosss Date: Sat, 5 Mar 2016 01:24:15 +0100 Subject: [PATCH 2/2] Small formatting --- .../transformers/OutgoingTransformer.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java index ba4618a3b..d7e809851 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java @@ -560,25 +560,24 @@ public class OutgoingTransformer { if(action == 1) { // update spawner try { DataInputStream stream = new DataInputStream(new ByteBufInputStream(input)); - CompoundTag tag = (CompoundTag) NBTIO.readTag(stream); - String entity = (String) tag.get("EntityId").getValue(); - CompoundTag spawn = new CompoundTag("SpawnData"); - spawn.put(new StringTag("id", entity)); - tag.put(spawn); - PacketUtil.writeBlockPosition(output, pos[0], pos[1], pos[2]); - output.writeByte(action); - DataOutputStream out = new DataOutputStream(new ByteBufOutputStream(output)); - NBTIO.writeTag(out, tag); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + CompoundTag tag = (CompoundTag) NBTIO.readTag(stream); + String entity = (String) tag.get("EntityId").getValue(); + CompoundTag spawn = new CompoundTag("SpawnData"); + spawn.put(new StringTag("id", entity)); + tag.put(spawn); + PacketUtil.writeBlockPosition(output, pos[0], pos[1], pos[2]); + output.writeByte(action); + DataOutputStream out = new DataOutputStream(new ByteBufOutputStream(output)); + NBTIO.writeTag(out, tag); + } catch (IOException e) { + e.printStackTrace(); + } return; } PacketUtil.writeBlockPosition(output, pos[0], pos[1], pos[2]); - output.writeByte(action); - output.writeBytes(input, input.readableBytes()); - return; + output.writeByte(action); + output.writeBytes(input, input.readableBytes()); + return; } if (packet == PacketType.PLAY_CHUNK_DATA) { // We need to catch unloading chunk packets as defined by wiki.vg