From 0bdc2d0bb333808c8f7265d0233ef40a5610cf32 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 22 Jun 2020 18:41:04 +0200 Subject: [PATCH] wip many more outgoing and incoming packets --- .../login/PacketEncryptionKeyRequest.java | 4 ++++ .../login/PacketEncryptionResponse.java | 7 ++++++ .../serverbound/play/PacketChatMessage.java | 1 + .../serverbound/play/PacketClickWindow.java | 1 + .../play/PacketClientSettings.java | 6 ++++- .../serverbound/play/PacketClientStatus.java | 3 +++ .../play/PacketCloseWindowSending.java | 1 + .../play/PacketConfirmTransaction.java | 1 + .../play/PacketCreativeInventoryAction.java | 1 + .../serverbound/play/PacketEnchantItem.java | 1 + .../play/PacketHeldItemChangeSending.java | 7 +++--- .../play/PacketKeepAliveResponse.java | 3 +++ .../play/PacketPlayerAbilitiesSending.java | 1 + .../play/PacketPlayerBlockPlacement.java | 9 +++++++ .../serverbound/play/PacketPlayerDigging.java | 10 +++++++- ...acketPlayerPositionAndRotationSending.java | 19 +++++++++++++++ .../play/PacketPlayerPositionSending.java | 15 ++++++++++++ .../play/PacketPlayerRotationSending.java | 1 + .../serverbound/play/PacketSteerVehicle.java | 12 ++++++++++ .../play/PacketTabCompleteSending.java | 18 ++++++++++++++ .../play/PacketUpdateSignSending.java | 13 +++++++--- .../serverbound/play/PacketUseEntity.java | 24 ++++++++++++++++++- .../protocol/protocol/OutByteBuffer.java | 3 +-- 23 files changed, 150 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/login/PacketEncryptionKeyRequest.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/login/PacketEncryptionKeyRequest.java index f024380c3..1121be682 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/login/PacketEncryptionKeyRequest.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/login/PacketEncryptionKeyRequest.java @@ -32,6 +32,10 @@ public class PacketEncryptionKeyRequest implements ClientboundPacket { publicKey = buffer.readBytes(buffer.readShort()); // read length, then the bytes verifyToken = buffer.readBytes(buffer.readShort()); // read length, then the bytes break; + case VERSION_1_8: + serverId = buffer.readString(); + publicKey = buffer.readBytes(buffer.readVarInt()); // read length, then the bytes + verifyToken = buffer.readBytes(buffer.readVarInt()); // read length, then the bytes } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/login/PacketEncryptionResponse.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/login/PacketEncryptionResponse.java index b41b46320..ff03586d1 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/login/PacketEncryptionResponse.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/login/PacketEncryptionResponse.java @@ -51,6 +51,13 @@ public class PacketEncryptionResponse implements ServerboundPacket { buffer.writeBytes(secret); buffer.writeShort((short) token.length); buffer.writeBytes(token); + break; + case VERSION_1_8: + buffer.writeVarInt(secret.length); + buffer.writeBytes(secret); + buffer.writeVarInt(token.length); + buffer.writeBytes(token); + break; } //buffer.writeString(username); return buffer; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketChatMessage.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketChatMessage.java index 44e297ead..277f9251a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketChatMessage.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketChatMessage.java @@ -34,6 +34,7 @@ public class PacketChatMessage implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CHAT_MESSAGE)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeString(message); break; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClickWindow.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClickWindow.java index e4218df8d..4444ce533 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClickWindow.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClickWindow.java @@ -44,6 +44,7 @@ public class PacketClickWindow implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CLICK_WINDOW)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeByte(windowId); buffer.writeShort(slot); buffer.writeByte(action.getButton()); diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java index 49b72465a..c8cccefe2 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java @@ -38,11 +38,15 @@ public class PacketClientSettings implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CLIENT_SETTINGS)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeString(locale.getName()); // locale buffer.writeByte(renderDistance); // render Distance buffer.writeByte((byte) 0x00); // chat settings (nobody uses them) buffer.writeBoolean(true); // chat colors - buffer.writeByte((byte) Difficulty.NORMAL.getId()); // difficulty + //skip this if not 1.7.10 + if (v == ProtocolVersion.VERSION_1_7_10) { + buffer.writeByte((byte) Difficulty.NORMAL.getId()); // difficulty + } buffer.writeBoolean(true); // cape break; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java index 5ec6fce88..35527f2d9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java @@ -36,6 +36,9 @@ public class PacketClientStatus implements ServerboundPacket { case VERSION_1_7_10: buffer.writeByte((byte) status.getId()); break; + case VERSION_1_8: + buffer.writeVarInt((byte) status.getId()); + break; } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCloseWindowSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCloseWindowSending.java index d53396d8d..f0abf52e0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCloseWindowSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCloseWindowSending.java @@ -34,6 +34,7 @@ public class PacketCloseWindowSending implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CLOSE_WINDOW)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeByte(windowId); break; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketConfirmTransaction.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketConfirmTransaction.java index 1792169ac..b4fa17d42 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketConfirmTransaction.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketConfirmTransaction.java @@ -38,6 +38,7 @@ public class PacketConfirmTransaction implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_WINDOW_CONFIRMATION)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeByte(windowId); buffer.writeShort(actionNumber); buffer.writeBoolean(accepted); diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCreativeInventoryAction.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCreativeInventoryAction.java index 9f88d564c..53866d687 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCreativeInventoryAction.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketCreativeInventoryAction.java @@ -37,6 +37,7 @@ public class PacketCreativeInventoryAction implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CREATIVE_INVENTORY_ACTION)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeShort(slot); buffer.writeSlot(v, clickedItem); break; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketEnchantItem.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketEnchantItem.java index 667aeb71d..20bd6b7ca 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketEnchantItem.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketEnchantItem.java @@ -36,6 +36,7 @@ public class PacketEnchantItem implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CLICK_WINDOW_BUTTON)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeByte(windowId); buffer.writeByte(buttonId); break; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketHeldItemChangeSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketHeldItemChangeSending.java index 9c715d29c..2ceade4e3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketHeldItemChangeSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketHeldItemChangeSending.java @@ -21,9 +21,9 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; public class PacketHeldItemChangeSending implements ServerboundPacket { - private final byte slot; + private final short slot; - public PacketHeldItemChangeSending(byte slot) { + public PacketHeldItemChangeSending(short slot) { this.slot = slot; log(); } @@ -39,7 +39,8 @@ public class PacketHeldItemChangeSending implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_HELD_ITEM_CHANGE)); switch (v) { case VERSION_1_7_10: - buffer.writeByte(slot); + case VERSION_1_8: + buffer.writeShort(slot); break; } return buffer; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java index 9f36b130d..9c6a9357f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java @@ -36,6 +36,9 @@ public class PacketKeepAliveResponse implements ServerboundPacket { case VERSION_1_7_10: buffer.writeInteger(id); break; + case VERSION_1_8: + buffer.writeVarInt(id); + break; } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java index accd4ac5e..c538c73a1 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java @@ -53,6 +53,7 @@ public class PacketPlayerAbilitiesSending implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CLIENT_SETTINGS)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: byte flags = 0; if (creative) { flags |= 0b1; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java index eb2d72a22..2e7609259 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java @@ -50,6 +50,15 @@ public class PacketPlayerBlockPlacement implements ServerboundPacket { buffer.writeByte(direction); buffer.writeSlot(v, item); + buffer.writeByte(cursorX); + buffer.writeByte(cursorY); + buffer.writeByte(cursorZ); + break; + case VERSION_1_8: + buffer.writePosition(position); + buffer.writeByte(direction); + buffer.writeSlot(v, item); + buffer.writeByte(cursorX); buffer.writeByte(cursorY); buffer.writeByte(cursorZ); diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerDigging.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerDigging.java index 3588501d6..97f426e4e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerDigging.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerDigging.java @@ -48,7 +48,15 @@ public class PacketPlayerDigging implements ServerboundPacket { buffer.writeBlockPositionByte(position); } buffer.writeByte(face); - + break; + case VERSION_1_8: + buffer.writeByte((byte) status.getId()); + if (position == null) { + buffer.writeLong(0L); + } else { + buffer.writePosition(position); + } + buffer.writeByte(face); break; } return buffer; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionAndRotationSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionAndRotationSending.java index 6d611997a..281afd156 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionAndRotationSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionAndRotationSending.java @@ -39,6 +39,17 @@ public class PacketPlayerPositionAndRotationSending implements ServerboundPacket log(); } + public PacketPlayerPositionAndRotationSending(double x, double feetY, double z, float yaw, float pitch, boolean onGround) { + this.x = x; + this.feetY = feetY; + this.headY = feetY - 1.62F; + this.z = z; + this.yaw = yaw; + this.pitch = pitch; + this.onGround = onGround; + log(); + } + @Override public OutPacketBuffer write(ProtocolVersion v) { @@ -53,6 +64,14 @@ public class PacketPlayerPositionAndRotationSending implements ServerboundPacket buffer.writeFloat(pitch); buffer.writeBoolean(onGround); break; + case VERSION_1_8: + buffer.writeDouble(x); + buffer.writeDouble(feetY); + buffer.writeDouble(z); + buffer.writeFloat(yaw); + buffer.writeFloat(pitch); + buffer.writeBoolean(onGround); + break; } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionSending.java index 09a50d874..d410246e8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerPositionSending.java @@ -35,6 +35,15 @@ public class PacketPlayerPositionSending implements ServerboundPacket { log(); } + public PacketPlayerPositionSending(double x, double feetY, double z, boolean onGround) { + this.x = x; + this.feetY = feetY; + this.headY = feetY - 1.62F; + this.z = z; + this.onGround = onGround; + log(); + } + @Override public OutPacketBuffer write(ProtocolVersion v) { @@ -47,6 +56,12 @@ public class PacketPlayerPositionSending implements ServerboundPacket { buffer.writeDouble(z); buffer.writeBoolean(onGround); break; + case VERSION_1_8: + buffer.writeDouble(x); + buffer.writeDouble(feetY); + buffer.writeDouble(z); + buffer.writeBoolean(onGround); + break; } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerRotationSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerRotationSending.java index e181586e8..d0fa73cc5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerRotationSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerRotationSending.java @@ -37,6 +37,7 @@ public class PacketPlayerRotationSending implements ServerboundPacket { OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_PLAYER_ROTATION)); switch (v) { case VERSION_1_7_10: + case VERSION_1_8: buffer.writeFloat(yaw); buffer.writeFloat(pitch); buffer.writeBoolean(onGround); diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketSteerVehicle.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketSteerVehicle.java index 1578fbe37..8042aa2bd 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketSteerVehicle.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketSteerVehicle.java @@ -45,6 +45,18 @@ public class PacketSteerVehicle implements ServerboundPacket { buffer.writeBoolean(jump); buffer.writeBoolean(unmount); break; + case VERSION_1_8: + buffer.writeFloat(sideways); + buffer.writeFloat(forward); + byte flags = 0; + if (jump) { + flags |= 0x1; + } + if (unmount) { + flags |= 0x2; + } + buffer.writeByte(flags); + break; } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketTabCompleteSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketTabCompleteSending.java index 880362ad3..4e2eea296 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketTabCompleteSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketTabCompleteSending.java @@ -13,6 +13,7 @@ package de.bixilon.minosoft.protocol.packets.serverbound.play; +import de.bixilon.minosoft.game.datatypes.world.BlockPosition; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.packets.ServerboundPacket; import de.bixilon.minosoft.protocol.protocol.OutPacketBuffer; @@ -21,9 +22,17 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; public class PacketTabCompleteSending implements ServerboundPacket { final String text; + final BlockPosition position; public PacketTabCompleteSending(String text) { this.text = text; + position = null; + log(); + } + + public PacketTabCompleteSending(String text, BlockPosition position) { + this.text = text; + this.position = position; log(); } @@ -34,6 +43,15 @@ public class PacketTabCompleteSending implements ServerboundPacket { case VERSION_1_7_10: buffer.writeString(text); break; + case VERSION_1_8: + buffer.writeString(text); + if (position == null) { + buffer.writeBoolean(false); + } else { + buffer.writeBoolean(true); + buffer.writePosition(position); + } + break; } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUpdateSignSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUpdateSignSending.java index 6e8dd897f..e3a41f4fa 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUpdateSignSending.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUpdateSignSending.java @@ -13,6 +13,7 @@ package de.bixilon.minosoft.protocol.packets.serverbound.play; +import de.bixilon.minosoft.game.datatypes.TextComponent; import de.bixilon.minosoft.game.datatypes.world.BlockPosition; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.packets.ServerboundPacket; @@ -22,9 +23,9 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; public class PacketUpdateSignSending implements ServerboundPacket { final BlockPosition position; - final String[] lines; + final TextComponent[] lines; - public PacketUpdateSignSending(BlockPosition position, String[] lines) { + public PacketUpdateSignSending(BlockPosition position, TextComponent[] lines) { this.position = position; this.lines = lines; log(); @@ -38,7 +39,13 @@ public class PacketUpdateSignSending implements ServerboundPacket { case VERSION_1_7_10: buffer.writeBlockPositionByte(position); for (int i = 0; i < 4; i++) { - buffer.writeString(lines[i]); + buffer.writeString(lines[i].getRawMessage()); + } + break; + case VERSION_1_8: + buffer.writeBlockPositionByte(position); + for (int i = 0; i < 4; i++) { + buffer.writeChatComponent(lines[i]); } break; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseEntity.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseEntity.java index d176b961e..378e664d9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseEntity.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseEntity.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.packets.serverbound.play; import de.bixilon.minosoft.game.datatypes.entities.Entity; +import de.bixilon.minosoft.game.datatypes.entities.Location; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.packets.ServerboundPacket; import de.bixilon.minosoft.protocol.protocol.OutPacketBuffer; @@ -23,16 +24,26 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; public class PacketUseEntity implements ServerboundPacket { final int entityId; final Click click; + final Location location; public PacketUseEntity(Entity entity, Click click) { this.entityId = entity.getId(); this.click = click; + location = null; log(); } public PacketUseEntity(int entityId, Click click) { this.entityId = entityId; this.click = click; + location = null; + log(); + } + + public PacketUseEntity(int entityId, Click click, Location location) { + this.entityId = entityId; + this.click = click; + this.location = location; log(); } @@ -45,6 +56,16 @@ public class PacketUseEntity implements ServerboundPacket { buffer.writeInteger(entityId); buffer.writeByte((byte) click.getId()); break; + case VERSION_1_8: + buffer.writeInteger(entityId); + buffer.writeByte((byte) click.getId()); + if (click == Click.INTERACT_AT) { + // position + buffer.writeFloat((float) location.getX()); + buffer.writeFloat((float) location.getY()); + buffer.writeFloat((float) location.getZ()); + } + break; } return buffer; } @@ -56,7 +77,8 @@ public class PacketUseEntity implements ServerboundPacket { public enum Click { RIGHT(0), - LEFT(1); + LEFT(1), + INTERACT_AT(2); final int id; diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java index 250644bfb..02ed7bcab 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.protocol; import de.bixilon.minosoft.game.datatypes.TextComponent; -import de.bixilon.minosoft.game.datatypes.entities.Location; import de.bixilon.minosoft.game.datatypes.inventory.Slot; import de.bixilon.minosoft.game.datatypes.world.BlockPosition; import de.bixilon.minosoft.nbt.tag.CompoundTag; @@ -154,7 +153,7 @@ public class OutByteBuffer { writeString(j.toString()); } - public void writePosition(Location location) { + public void writePosition(BlockPosition location) { writeLong((((long) location.getX() & 0x3FFFFFF) << 38) | (((long) location.getZ() & 0x3FFFFFF) << 12) | ((long) location.getY() & 0xFFF)); }