diff --git a/pom.xml b/pom.xml index 89a236b..25c0467 100644 --- a/pom.xml +++ b/pom.xml @@ -80,12 +80,12 @@ org.geysermc connector - 1.0-SNAPSHOT + 1.0.0 com.nukkitx.protocol - bedrock-v390 - 2.5.6 + bedrock-v407 + 2.6.0-SNAPSHOT net.minecrell diff --git a/src/main/java/org/geysermc/connect/MasterServer.java b/src/main/java/org/geysermc/connect/MasterServer.java index a7b5dc3..099bc57 100644 --- a/src/main/java/org/geysermc/connect/MasterServer.java +++ b/src/main/java/org/geysermc/connect/MasterServer.java @@ -28,6 +28,7 @@ package org.geysermc.connect; import com.nukkitx.protocol.bedrock.*; import com.nukkitx.protocol.bedrock.v390.Bedrock_v390; +import com.nukkitx.protocol.bedrock.v407.Bedrock_v407; import lombok.Getter; import lombok.Setter; import org.geysermc.connect.utils.Server; @@ -49,7 +50,7 @@ import java.util.concurrent.ScheduledExecutorService; public class MasterServer { - public static final BedrockPacketCodec CODEC = Bedrock_v390.V390_CODEC; + public static final BedrockPacketCodec CODEC = Bedrock_v407.V407_CODEC; private final Timer timer; private BedrockServer bdServer; diff --git a/src/main/java/org/geysermc/connect/PacketHandler.java b/src/main/java/org/geysermc/connect/PacketHandler.java index bf7882c..e5be6e3 100644 --- a/src/main/java/org/geysermc/connect/PacketHandler.java +++ b/src/main/java/org/geysermc/connect/PacketHandler.java @@ -34,7 +34,7 @@ import com.nimbusds.jose.JWSObject; import com.nimbusds.jose.crypto.factories.DefaultJWSVerifierFactory; import com.nukkitx.network.util.DisconnectReason; import com.nukkitx.protocol.bedrock.BedrockServerSession; -import com.nukkitx.protocol.bedrock.data.Attribute; +import com.nukkitx.protocol.bedrock.data.AttributeData; import com.nukkitx.protocol.bedrock.handler.BedrockPacketHandler; import com.nukkitx.protocol.bedrock.packet.*; import com.nukkitx.protocol.bedrock.util.EncryptionUtils; @@ -89,9 +89,9 @@ public class PacketHandler implements BedrockPacketHandler { if (protocol != MasterServer.CODEC.getProtocolVersion()) { PlayStatusPacket status = new PlayStatusPacket(); if (protocol > MasterServer.CODEC.getProtocolVersion()) { - status.setStatus(PlayStatusPacket.Status.FAILED_SERVER); + status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_SERVER_OLD); } else { - status.setStatus(PlayStatusPacket.Status.FAILED_CLIENT); + status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_CLIENT_OLD); } session.sendPacket(status); } @@ -254,7 +254,7 @@ public class PacketHandler implements BedrockPacketHandler { // This is to fix a bug in the client where it doesn't load form images UpdateAttributesPacket updateAttributesPacket = new UpdateAttributesPacket(); updateAttributesPacket.setRuntimeEntityId(1); - List attributes = new ArrayList<>(); + List attributes = new ArrayList<>(); attributes.add(AttributeUtils.getBedrockAttribute(AttributeType.EXPERIENCE_LEVEL.getAttribute(0f))); updateAttributesPacket.setAttributes(attributes); diff --git a/src/main/java/org/geysermc/connect/proxy/GeyserProxyBootstrap.java b/src/main/java/org/geysermc/connect/proxy/GeyserProxyBootstrap.java index 29e5fca..dc0e0f2 100644 --- a/src/main/java/org/geysermc/connect/proxy/GeyserProxyBootstrap.java +++ b/src/main/java/org/geysermc/connect/proxy/GeyserProxyBootstrap.java @@ -28,11 +28,12 @@ package org.geysermc.connect.proxy; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import org.geysermc.common.PlatformType; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.bootstrap.GeyserBootstrap; import org.geysermc.connector.command.CommandManager; +import org.geysermc.connector.common.PlatformType; import org.geysermc.connector.configuration.GeyserConfiguration; +import org.geysermc.connector.dump.BootstrapDumpInfo; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connect.GeyserConnectConfig; @@ -43,6 +44,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.stream.Collectors; public class GeyserProxyBootstrap implements GeyserBootstrap { @@ -115,5 +118,15 @@ public class GeyserProxyBootstrap implements GeyserBootstrap { public IGeyserPingPassthrough getGeyserPingPassthrough() { return geyserPingPassthrough; } + + @Override + public Path getConfigFolder() { + return Paths.get(System.getProperty("user.dir")); + } + + @Override + public BootstrapDumpInfo getDumpInfo() { + return new BootstrapDumpInfo(); + } } diff --git a/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java b/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java index 2b233f2..f9f8e47 100644 --- a/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java +++ b/src/main/java/org/geysermc/connect/proxy/GeyserProxySession.java @@ -27,8 +27,8 @@ package org.geysermc.connect.proxy; import com.nukkitx.protocol.bedrock.BedrockServerSession; -import org.geysermc.common.AuthType; import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.common.AuthType; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connect.MasterServer; import org.geysermc.connect.utils.Player; diff --git a/src/main/java/org/geysermc/connect/proxy/GeyserProxyUpstreamPacketHandler.java b/src/main/java/org/geysermc/connect/proxy/GeyserProxyUpstreamPacketHandler.java index 89cef9c..a512c9d 100644 --- a/src/main/java/org/geysermc/connect/proxy/GeyserProxyUpstreamPacketHandler.java +++ b/src/main/java/org/geysermc/connect/proxy/GeyserProxyUpstreamPacketHandler.java @@ -27,10 +27,10 @@ package org.geysermc.connect.proxy; import com.nukkitx.protocol.bedrock.packet.SetLocalPlayerAsInitializedPacket; -import org.geysermc.common.AuthType; import org.geysermc.connect.MasterServer; import org.geysermc.connect.utils.Player; import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.common.AuthType; import org.geysermc.connector.network.UpstreamPacketHandler; import org.geysermc.connector.network.session.GeyserSession; diff --git a/src/main/java/org/geysermc/connect/utils/Logger.java b/src/main/java/org/geysermc/connect/utils/Logger.java index 882c53d..a2f28ef 100644 --- a/src/main/java/org/geysermc/connect/utils/Logger.java +++ b/src/main/java/org/geysermc/connect/utils/Logger.java @@ -29,9 +29,9 @@ package org.geysermc.connect.utils; import lombok.extern.log4j.Log4j2; import net.minecrell.terminalconsole.SimpleTerminalConsole; import org.apache.logging.log4j.core.config.Configurator; -import org.geysermc.common.ChatColor; import org.geysermc.connector.GeyserLogger; import org.geysermc.connect.MasterServer; +import org.geysermc.connector.common.ChatColor; @Log4j2 public class Logger extends SimpleTerminalConsole implements GeyserLogger { diff --git a/src/main/java/org/geysermc/connect/utils/PalleteManger.java b/src/main/java/org/geysermc/connect/utils/PalleteManger.java index ca5be80..012122b 100644 --- a/src/main/java/org/geysermc/connect/utils/PalleteManger.java +++ b/src/main/java/org/geysermc/connect/utils/PalleteManger.java @@ -26,12 +26,7 @@ package org.geysermc.connect.utils; -import com.nukkitx.nbt.CompoundTagBuilder; -import com.nukkitx.nbt.NbtUtils; -import com.nukkitx.nbt.stream.NBTInputStream; -import com.nukkitx.nbt.stream.NBTOutputStream; -import com.nukkitx.nbt.tag.CompoundTag; -import com.nukkitx.nbt.tag.ListTag; +import com.nukkitx.nbt.*; import org.geysermc.connector.utils.FileUtils; import java.io.ByteArrayOutputStream; @@ -43,18 +38,18 @@ import java.io.InputStream; */ public class PalleteManger { - public static final ListTag BLOCK_PALLETE; - public static final CompoundTag BIOMES_PALLETE; + public static final NbtList BLOCK_PALLETE; + public static final NbtMap BIOMES_PALLETE; public static final byte[] EMPTY_LEVEL_CHUNK_DATA; - private static final com.nukkitx.nbt.tag.CompoundTag EMPTY_TAG = CompoundTagBuilder.builder().buildRootTag(); + private static final NbtMap EMPTY_TAG = NbtMap.EMPTY; static { /* Load block palette */ InputStream stream = FileUtils.getResource("bedrock/runtime_block_states.dat"); try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream)) { - BLOCK_PALLETE = (ListTag) nbtInputStream.readTag(); + BLOCK_PALLETE = (NbtList) nbtInputStream.readTag(); } catch (Exception e) { throw new AssertionError("Unable to get blocks from runtime block states", e); } @@ -63,7 +58,7 @@ public class PalleteManger { stream = FileUtils.getResource("bedrock/biome_definitions.dat"); try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream)){ - BIOMES_PALLETE = (CompoundTag) nbtInputStream.readTag(); + BIOMES_PALLETE = (NbtMap) nbtInputStream.readTag(); } catch (Exception e) { throw new AssertionError("Failed to get biomes from biome definitions", e); } @@ -73,11 +68,11 @@ public class PalleteManger { outputStream.write(new byte[258]); // Biomes + Border Size + Extra Data Size try (NBTOutputStream nbtOutputStream = NbtUtils.createNetworkWriter(outputStream)) { - nbtOutputStream.write(EMPTY_TAG); + nbtOutputStream.writeTag(EMPTY_TAG); } EMPTY_LEVEL_CHUNK_DATA = outputStream.toByteArray(); - }catch (IOException e) { + } catch (IOException e) { throw new AssertionError("Unable to generate empty level chunk data"); } } diff --git a/src/main/java/org/geysermc/connect/utils/Player.java b/src/main/java/org/geysermc/connect/utils/Player.java index 109da61..2d2be8c 100644 --- a/src/main/java/org/geysermc/connect/utils/Player.java +++ b/src/main/java/org/geysermc/connect/utils/Player.java @@ -31,9 +31,9 @@ import com.nukkitx.math.vector.Vector2f; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.protocol.bedrock.BedrockServerSession; -import com.nukkitx.protocol.bedrock.data.Attribute; import com.nukkitx.protocol.bedrock.data.GamePublishSetting; import com.nukkitx.protocol.bedrock.data.GameRuleData; +import com.nukkitx.protocol.bedrock.data.GameType; import com.nukkitx.protocol.bedrock.data.PlayerPermission; import com.nukkitx.protocol.bedrock.packet.*; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; @@ -44,8 +44,6 @@ import org.geysermc.common.window.FormWindow; import org.geysermc.connect.MasterServer; import org.geysermc.connect.ui.FormID; import org.geysermc.connect.ui.UIHandler; -import org.geysermc.connector.entity.attribute.AttributeType; -import org.geysermc.connector.utils.AttributeUtils; import java.util.ArrayList; import java.util.List; @@ -90,18 +88,18 @@ public class Player { StartGamePacket startGamePacket = new StartGamePacket(); startGamePacket.setUniqueEntityId(1); startGamePacket.setRuntimeEntityId(1); - startGamePacket.setPlayerGamemode(0); + startGamePacket.setPlayerGameType(GameType.CREATIVE); startGamePacket.setPlayerPosition(Vector3f.from(0, 64 + 2, 0)); startGamePacket.setRotation(Vector2f.ONE); startGamePacket.setSeed(-1); startGamePacket.setDimensionId(2); startGamePacket.setGeneratorId(1); - startGamePacket.setLevelGamemode(1); + startGamePacket.setLevelGameType(GameType.CREATIVE); startGamePacket.setDifficulty(0); startGamePacket.setDefaultSpawn(Vector3i.ZERO); startGamePacket.setAchievementsDisabled(true); - startGamePacket.setTime(-1); + startGamePacket.setCurrentTick(-1); startGamePacket.setEduEditionOffers(0); startGamePacket.setEduFeaturesEnabled(false); startGamePacket.setRainLevel(0); @@ -126,7 +124,7 @@ public class Player { startGamePacket.setWorldTemplateOptionLocked(false); startGamePacket.setLevelId(""); - startGamePacket.setWorldName("GeyserMulti"); + startGamePacket.setLevelName("GeyserMulti"); startGamePacket.setPremiumWorldTemplateId(""); startGamePacket.setCurrentTick(0); startGamePacket.setEnchantmentSeed(0); @@ -146,7 +144,7 @@ public class Player { // Send the biomes BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); - biomeDefinitionListPacket.setTag(PalleteManger.BIOMES_PALLETE); + biomeDefinitionListPacket.setDefinitions(PalleteManger.BIOMES_PALLETE); session.sendPacket(biomeDefinitionListPacket); // Let the client know the player can spawn @@ -179,7 +177,7 @@ public class Player { // This packet is used to fix the image loading bug NetworkStackLatencyPacket networkStackLatencyPacket = new NetworkStackLatencyPacket(); - networkStackLatencyPacket.setSendBack(true); + networkStackLatencyPacket.setFromServer(true); networkStackLatencyPacket.setTimestamp(System.currentTimeMillis()); session.sendPacket(networkStackLatencyPacket); } diff --git a/src/main/resources/biome_definitions.dat b/src/main/resources/biome_definitions.dat index b8c6df4..6d72cc9 100644 Binary files a/src/main/resources/biome_definitions.dat and b/src/main/resources/biome_definitions.dat differ diff --git a/src/main/resources/runtime_block_states.dat b/src/main/resources/runtime_block_states.dat index 2732f6a..feeeda6 100644 Binary files a/src/main/resources/runtime_block_states.dat and b/src/main/resources/runtime_block_states.dat differ