void translate(Class extends P> clazz, P packet, GeyserSession session) { - try { - if (MAP.containsKey(clazz)) { - ((PacketTranslator
) MAP.get(clazz)).translate(packet, session); + public
boolean translate(Class extends P> clazz, P packet, GeyserSession session) { + if (!session.getUpstream().isClosed() && !session.isClosed()) { + try { + if (MAP.containsKey(clazz)) { + ((PacketTranslator
) MAP.get(clazz)).translate(packet, session);
+ return true;
+ }
+ } catch (Throwable ex) {
+ GeyserLogger.DEFAULT.error("Could not translate packet " + packet.getClass().getSimpleName(), ex);
+ ex.printStackTrace();
}
- } catch (NullPointerException ex) {
- GeyserLogger.DEFAULT.debug("Could not translate packet " + packet.getClass().getSimpleName());
- ex.printStackTrace();
}
+ return false;
}
}
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java b/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java
index 7481f2fa0..242bcda4b 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java
@@ -34,6 +34,7 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.Serv
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.spawn.*;
import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerDisplayScoreboardPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerScoreboardObjectivePacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerTeamPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerUpdateScorePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerSetSlotPacket;
@@ -52,14 +53,12 @@ import org.geysermc.connector.network.translators.inventory.InventoryTranslator;
import org.geysermc.connector.network.translators.item.ItemTranslator;
import org.geysermc.connector.network.translators.java.*;
import org.geysermc.connector.network.translators.java.entity.*;
-import org.geysermc.connector.network.translators.java.entity.player.JavaPlayerActionAckTranslator;
-import org.geysermc.connector.network.translators.java.entity.player.JavaPlayerHealthTranslator;
-import org.geysermc.connector.network.translators.java.entity.player.JavaPlayerPositionRotationTranslator;
-import org.geysermc.connector.network.translators.java.entity.player.JavaPlayerSetExperienceTranslator;
+import org.geysermc.connector.network.translators.java.entity.player.*;
import org.geysermc.connector.network.translators.java.entity.spawn.*;
import org.geysermc.connector.network.translators.java.inventory.OpenWindowPacketTranslator;
import org.geysermc.connector.network.translators.java.scoreboard.JavaDisplayScoreboardTranslator;
import org.geysermc.connector.network.translators.java.scoreboard.JavaScoreboardObjectiveTranslator;
+import org.geysermc.connector.network.translators.java.scoreboard.JavaTeamTranslator;
import org.geysermc.connector.network.translators.java.scoreboard.JavaUpdateScoreTranslator;
import org.geysermc.connector.network.translators.java.window.JavaOpenWindowTranslator;
import org.geysermc.connector.network.translators.java.window.JavaSetSlotTranslator;
@@ -115,6 +114,7 @@ public class TranslatorsInit {
Registry.registerJava(ServerEntityRotationPacket.class, new JavaEntityRotationTranslator());
Registry.registerJava(ServerEntityHeadLookPacket.class, new JavaEntityHeadLookTranslator());
Registry.registerJava(ServerEntityMetadataPacket.class, new JavaEntityMetadataTranslator());
+ Registry.registerJava(ServerBossBarPacket.class, new JavaBossBarTranslator());
Registry.registerJava(ServerSpawnExpOrbPacket.class, new JavaSpawnExpOrbTranslator());
Registry.registerJava(ServerSpawnGlobalEntityPacket.class, new JavaSpawnGlobalEntityTranslator());
@@ -138,6 +138,7 @@ public class TranslatorsInit {
Registry.registerJava(ServerScoreboardObjectivePacket.class, new JavaScoreboardObjectiveTranslator());
Registry.registerJava(ServerDisplayScoreboardPacket.class, new JavaDisplayScoreboardTranslator());
Registry.registerJava(ServerUpdateScorePacket.class, new JavaUpdateScoreTranslator());
+ Registry.registerJava(ServerTeamPacket.class, new JavaTeamTranslator());
Registry.registerJava(ServerBlockChangePacket.class, new JavaBlockChangeTranslator());
Registry.registerJava(ServerMultiBlockChangePacket.class, new JavaMultiBlockChangeTranslator());
@@ -146,11 +147,12 @@ public class TranslatorsInit {
Registry.registerBedrock(AnimatePacket.class, new BedrockAnimateTranslator());
Registry.registerBedrock(CommandRequestPacket.class, new BedrockCommandRequestTranslator());
- Registry.registerBedrock(TextPacket.class, new BedrockTextTranslator());
- Registry.registerBedrock(MobEquipmentPacket.class, new BedrockMobEquipmentTranslator());
- Registry.registerBedrock(PlayerActionPacket.class, new BedrockActionTranslator());
- Registry.registerBedrock(MovePlayerPacket.class, new BedrockMovePlayerTranslator());
Registry.registerBedrock(InventoryTransactionPacket.class, new BedrockInventoryTransactionTranslator());
+ Registry.registerBedrock(MobEquipmentPacket.class, new BedrockMobEquipmentTranslator());
+ Registry.registerBedrock(MovePlayerPacket.class, new BedrockMovePlayerTranslator());
+ Registry.registerBedrock(PlayerActionPacket.class, new BedrockActionTranslator());
+ Registry.registerBedrock(SetLocalPlayerAsInitializedPacket.class, new BedrockPlayerInitializedTranslator());
+ Registry.registerBedrock(TextPacket.class, new BedrockTextTranslator());
itemTranslator = new ItemTranslator();
blockTranslator = new BlockTranslator();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockActionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockActionTranslator.java
index fdab51ba6..b8382b8ce 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockActionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockActionTranslator.java
@@ -25,7 +25,6 @@
package org.geysermc.connector.network.translators.bedrock;
-import com.flowpowered.math.vector.Vector3i;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.data.game.entity.player.Hand;
import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerAction;
@@ -34,6 +33,7 @@ import com.github.steveice10.mc.protocol.data.game.world.block.BlockFace;
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerActionPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPlaceBlockPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerStatePacket;
+import com.nukkitx.math.vector.Vector3i;
import com.nukkitx.protocol.bedrock.packet.PlayerActionPacket;
import org.geysermc.connector.entity.Entity;
import org.geysermc.connector.network.session.GeyserSession;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInteractTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInteractTranslator.java
index 2fad8c219..9b2060183 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInteractTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInteractTranslator.java
@@ -25,21 +25,11 @@
package org.geysermc.connector.network.translators.bedrock;
-import com.flowpowered.math.vector.Vector3f;
-import com.flowpowered.math.vector.Vector3i;
-import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.data.game.entity.player.Hand;
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
-import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerAction;
-import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerState;
-import com.github.steveice10.mc.protocol.data.game.world.block.BlockFace;
-import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerActionPacket;
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerInteractEntityPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPlaceBlockPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerStatePacket;
+import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.packet.InteractPacket;
-import com.nukkitx.protocol.bedrock.packet.PlayerActionPacket;
-import org.geysermc.connector.entity.Entity;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.PacketTranslator;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java
index d74bb8337..e4ab1b1d3 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java
@@ -25,39 +25,58 @@
package org.geysermc.connector.network.translators.bedrock;
-import com.flowpowered.math.vector.Vector3f;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
+import com.nukkitx.math.vector.Vector3f;
+import com.nukkitx.protocol.bedrock.packet.MoveEntityAbsolutePacket;
import com.nukkitx.protocol.bedrock.packet.MovePlayerPacket;
import com.nukkitx.protocol.bedrock.packet.SetEntityDataPacket;
import org.geysermc.connector.entity.Entity;
+import org.geysermc.connector.entity.PlayerEntity;
import org.geysermc.connector.entity.type.EntityType;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.PacketTranslator;
import org.geysermc.connector.network.translators.item.BedrockItem;
public class BedrockMovePlayerTranslator extends PacketTranslator
+ * Just like 1.8 but it doesn't care about which entity
+ */
+ private void addBossEntity(GeyserSession session, long entityId) {
+ AddEntityPacket addEntityPacket = new AddEntityPacket();
+ addEntityPacket.setUniqueEntityId(entityId);
+ addEntityPacket.setRuntimeEntityId(entityId);
+ addEntityPacket.setIdentifier("minecraft:creeper");
+ addEntityPacket.setEntityType(33);
+ addEntityPacket.setPosition(session.getPlayerEntity().getPosition());
+ addEntityPacket.setRotation(Vector3f.ZERO);
+ addEntityPacket.setMotion(Vector3f.ZERO);
+ addEntityPacket.getMetadata().put(EntityData.SCALE, 0.01F); // scale = 0 doesn't work?
+
+ session.getUpstream().sendPacket(addEntityPacket);
+ }
+
+ private void removeBossEntity(GeyserSession session, long entityId) {
+ RemoveEntityPacket removeEntityPacket = new RemoveEntityPacket();
+ removeEntityPacket.setUniqueEntityId(entityId);
+
+ session.getUpstream().sendPacket(removeEntityPacket);
+ }
+}
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java
index cc5838c90..e604e20a3 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java
@@ -43,12 +43,16 @@ public class JavaChatTranslator extends PacketTranslator
+ * Only used in {@link Objective Objective}
+ */
+ UPDATE
+}
diff --git a/connector/src/main/java/org/geysermc/connector/utils/GeyserUtils.java b/connector/src/main/java/org/geysermc/connector/utils/GeyserUtils.java
deleted file mode 100644
index 13a188205..000000000
--- a/connector/src/main/java/org/geysermc/connector/utils/GeyserUtils.java
+++ /dev/null
@@ -1,662 +0,0 @@
-package org.geysermc.connector.utils;
-
-import com.flowpowered.math.vector.Vector2i;
-import com.flowpowered.math.vector.Vector3d;
-import com.flowpowered.math.vector.Vector3i;
-import io.netty.buffer.ByteBuf;
-import io.netty.handler.codec.DecoderException;
-
-import java.lang.reflect.Array;
-import java.text.MessageFormat;
-import java.util.List;
-import java.util.UUID;
-import java.util.function.*;
-
-public class GeyserUtils {
-
- public static final int FLAG_RUNTIME = 1;
-
- public static final int GLOBAL_PALETTE_BITS_PER_BLOCK = 14;
-
- public static final int SECTION_COUNT_BLOCKS = 16;
-
- public static final int SECTION_COUNT_LIGHT = 18;
-
- public static final int BLOCKS_IN_SECTION = 16 * 16 * 16;
-
- public static final int LIGHT_DATA_LENGTH = BLOCKS_IN_SECTION / 2;
-
- public static final int EMPTY_SUBCHUNK_BYTES = BLOCKS_IN_SECTION / 8;
-
- public static final int SUBCHUNK_VERSION = 8;
-
- public static void writeEmpty(ByteBuf to) {
-
- to.writeByte(storageHeader(1));
-
- to.writeZero(EMPTY_SUBCHUNK_BYTES);
-
- }
-
-
-
- protected static final int storageHeader(int bitsPerBlock) {
-
- return (bitsPerBlock << 1) | FLAG_RUNTIME;
-
- }
-
- public static void writeEmptySubChunk(ByteBuf out) {
-
- out.writeBytes(new byte[4096 + 4096]);
-
- }
-
- public static void skipPosition(ByteBuf from) {
- from.skipBytes(Long.BYTES);
- }
-
- public static Vector3d readPosition(ByteBuf from) {
- long l = from.readLong();
- return new Vector3d(
- (int) (l >> 38), (int) (l & 0xFFF), (int) ((l << 26) >> 38)
- );
- }
-
- public static void readPEPosition(ByteBuf from) {
- readSVarInt(from);
- readVarInt(from);
- readSVarInt(from);
- }
-
- public static Vector3d readLegacyPositionI(ByteBuf from) {
- return new Vector3d(from.readInt(), from.readInt(), from.readInt());
- }
-
- public static void writePosition(ByteBuf to, Vector3i position) {
- to.writeLong(((position.getX() & 0x3FFFFFFL) << 38) | ((position.getZ() & 0x3FFFFFFL) << 12) | (position.getY() & 0xFFFL));
- }
-
- public static void writeLegacyPositionL(ByteBuf to, Vector3d position) {
- to.writeLong((((int) position.getX() & 0x3FFFFFFL) << 38) | (((int) position.getY() & 0xFFFL) << 26) | ((int) position.getZ() & 0x3FFFFFFL));
- }
-
- public static void writePEPosition(ByteBuf to, Vector3d position) {
- writeSVarInt(to, (int) position.getX());
- writeVarInt(to, (int) position.getY());
- writeSVarInt(to, (int) position.getZ());
- }
-
- public static void writeLegacyPositionB(ByteBuf to, Vector3d position) {
- to.writeInt((int) position.getX());
- to.writeByte((int) position.getY());
- to.writeInt((int) position.getZ());
- }
-
- public static void writeLegacyPositionS(ByteBuf to, Vector3d position) {
- to.writeInt((int) position.getX());
- to.writeShort((int) position.getY());
- to.writeInt((int) position.getZ());
- }
-
- public static void writeLegacyPositionI(ByteBuf to, Vector3d position) {
- to.writeInt((int) position.getX());
- to.writeInt((int) position.getY());
- to.writeInt((int) position.getZ());
- }
-
- public static Vector2i readIntChunkCoord(ByteBuf from) {
- return new Vector2i(from.readInt(), from.readInt());
- }
-
- public static Vector2i readVarIntChunkCoord(ByteBuf from) {
- return new Vector2i(readVarInt(from), readVarInt(from));
- }
-
- public static void writeIntChunkCoord(ByteBuf to, Vector2i chunk) {
- to.writeInt(chunk.getX());
- to.writeInt(chunk.getY());
- }
-
- public static Vector2i readPEChunkCoord(ByteBuf from) {
- return new Vector2i(readSVarInt(from), readSVarInt(from));
- }
-
- public static void writePEChunkCoord(ByteBuf to, Vector2i chunk) {
- writeSVarInt(to, chunk.getX());
- writeSVarInt(to, chunk.getY());
- }
-
- public static int readLocalCoord(ByteBuf from) {
- return from.readUnsignedShort();
- }
-
- public static void writeLocalCoord(ByteBuf to, int coord) {
- to.writeShort(coord);
- }
-
- public static void writeVarIntChunkCoord(ByteBuf to, Vector2i chunk) {
- writeVarInt(to, chunk.getX());
- writeVarInt(to, chunk.getY());
- }
-
-
-
- public static final int MAX_LENGTH = 5;
-
-
-
- public static void writeFixedSizeVarInt(ByteBuf to, int i) {
-
- int writerIndex = to.writerIndex();
-
- while ((i & 0xFFFFFF80) != 0x0) {
-
- to.writeByte(i | 0x80);
-
- i >>>= 7;
-
- }
-
- int paddingBytes = MAX_LENGTH - (to.writerIndex() - writerIndex) - 1;
-
- if (paddingBytes == 0) {
-
- to.writeByte(i);
-
- } else {
-
- to.writeByte(i | 0x80);
-
- while (--paddingBytes > 0) {
-
- to.writeByte(0x80);
-
- }
-
- to.writeByte(0);
-
- }
-
- }
-
-
-
- public static int readVarInt(ByteBuf from) {
-
- int value = 0;
-
- int length = 0;
-
- byte part;
-
- do {
-
- part = from.readByte();
-
- value |= (part & 0x7F) << (length++ * 7);
-
- if (length > MAX_LENGTH) {
-
- throw new DecoderException("VarInt too big");
-
- }
-
- } while (part < 0);
-
- return value;
-
- }
-
-
-
- public static void writeVarInt(ByteBuf to, int i) {
-
- while ((i & 0xFFFFFF80) != 0x0) {
-
- to.writeByte(i | 0x80);
-
- i >>>= 7;
-
- }
-
- to.writeByte(i);
-
- }
-
-
-
- public static int readSVarInt(ByteBuf from) {
-
- int varint = readVarInt(from);
-
- return (varint >> 1) ^ -(varint & 1);
-
- }
-
-
-
- public static void writeSVarInt(ByteBuf to, int varint) {
-
- writeVarInt(to, (varint << 1) ^ (varint >> 31));
-
- }
-
-
-
- public static long readVarLong(ByteBuf from) {
-
- long varlong = 0L;
-
- int length = 0;
-
- byte part;
-
- do {
-
- part = from.readByte();
-
- varlong |= (part & 0x7F) << (length++ * 7);
-
- if (length > 10) {
-
- throw new RuntimeException("VarLong too big");
-
- }
-
- } while ((part & 0x80) == 0x80);
-
- return varlong;
-
- }
-
-
-
- public static void writeVarLong(ByteBuf to, long varlong) {
-
- while ((varlong & 0xFFFFFFFFFFFFFF80L) != 0x0L) {
-
- to.writeByte((int) (varlong & 0x7FL) | 0x80);
-
- varlong >>>= 7;
-
- }
-
- to.writeByte((int) varlong);
-
- }
-
-
-
- public static long readSVarLong(ByteBuf from) {
-
- long varlong = readVarLong(from);
-
- return (varlong >> 1) ^ -(varlong & 1);
-
- }
-
-
-
- public static void writeSVarLong(ByteBuf to, long varlong) {
-
- writeVarLong(to, (varlong << 1) ^ (varlong >> 63));
-
- }
-
-
- public static ByteBuf readShortByteArraySlice(ByteBuf from, int limit) {
-
- int length = from.readShort();
-
- checkLimit(length, limit);
-
- return from.readSlice(length);
-
- }
-
-
-
- @SuppressWarnings("unchecked")
-
- public static