From b3f1c64249b576a75643ed05fcba3d9bb52478c3 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Fri, 10 Mar 2023 20:51:51 -0500 Subject: [PATCH] Base changes for Java 1.19.4 support --- core/build.gradle.kts | 4 --- .../geyser/entity/EntityDefinitions.java | 2 +- .../type/living/monster/EndermanEntity.java | 10 +++----- .../geyser/level/physics/Direction.java | 20 +++++++-------- .../java/JavaUpdateRecipesTranslator.java | 4 +-- .../entity/JavaSetPassengersTranslator.java | 10 ++++++++ .../player/JavaPlayerPositionTranslator.java | 25 ------------------- .../java/level/JavaBlockEventTranslator.java | 10 ++++---- .../java/level/JavaLevelEventTranslator.java | 2 +- gradle/libs.versions.toml | 4 +-- 10 files changed, 32 insertions(+), 59 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 4265a9c35..9ba399674 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -31,10 +31,6 @@ dependencies { exclude("com.github.GeyserMC", "mcauthlib") } - api(libs.packetlib) { - exclude("io.netty", "netty-all") - } - implementation(libs.raknet) { exclude("io.netty", "*"); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java index b97e23847..3271a962f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -486,7 +486,7 @@ public final class EntityDefinitions { ENDERMAN = EntityDefinition.inherited(EndermanEntity::new, mobEntityBase) .type(EntityType.ENDERMAN) .height(2.9f).width(0.6f) - .addTranslator(MetadataType.BLOCK_STATE, EndermanEntity::setCarriedBlock) + .addTranslator(MetadataType.OPTIONAL_BLOCK_STATE, EndermanEntity::setCarriedBlock) .addTranslator(MetadataType.BOOLEAN, EndermanEntity::setScreaming) .addTranslator(MetadataType.BOOLEAN, EndermanEntity::setAngry) .build(); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java index 04b46997d..1d1f61af1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.monster; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.OptionalIntMetadataType; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.data.entity.EntityData; @@ -45,13 +46,8 @@ public class EndermanEntity extends MonsterEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - public void setCarriedBlock(EntityMetadata entityMetadata) { - int bedrockBlockId; - if (entityMetadata.getValue().isPresent()) { - bedrockBlockId = session.getBlockMappings().getBedrockBlockId(entityMetadata.getValue().getAsInt()); - } else { - bedrockBlockId = session.getBlockMappings().getBedrockAirId(); - } + public void setCarriedBlock(IntEntityMetadata entityMetadata) { + int bedrockBlockId = session.getBlockMappings().getBedrockBlockId(entityMetadata.getPrimitiveValue());; dirtyMetadata.put(EntityData.CARRIED_BLOCK, bedrockBlockId); } diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java index 48c50bc69..95c0cd119 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java @@ -25,19 +25,18 @@ package org.geysermc.geyser.level.physics; -import com.github.steveice10.mc.protocol.data.game.level.block.value.PistonValue; import com.nukkitx.math.vector.Vector3i; import lombok.Getter; import javax.annotation.Nonnull; public enum Direction { - DOWN(1, Vector3i.from(0, -1, 0), Axis.Y, PistonValue.DOWN), - UP(0, Vector3i.UNIT_Y, Axis.Y, PistonValue.UP), - NORTH(3, Vector3i.from(0, 0, -1), Axis.Z, PistonValue.NORTH), - SOUTH(2, Vector3i.UNIT_Z, Axis.Z, PistonValue.SOUTH), - WEST(5, Vector3i.from(-1, 0, 0), Axis.X, PistonValue.WEST), - EAST(4, Vector3i.UNIT_X, Axis.X, PistonValue.EAST); + DOWN(1, Vector3i.from(0, -1, 0), Axis.Y, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.DOWN), + UP(0, Vector3i.UNIT_Y, Axis.Y, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.UP), + NORTH(3, Vector3i.from(0, 0, -1), Axis.Z, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.NORTH), + SOUTH(2, Vector3i.UNIT_Z, Axis.Z, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.SOUTH), + WEST(5, Vector3i.from(-1, 0, 0), Axis.X, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.WEST), + EAST(4, Vector3i.UNIT_X, Axis.X, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.EAST); public static final Direction[] VALUES = values(); @@ -46,10 +45,9 @@ public enum Direction { private final Vector3i unitVector; @Getter private final Axis axis; - @Getter - private final PistonValue pistonValue; + private final com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue; - Direction(int reversedId, Vector3i unitVector, Axis axis, PistonValue pistonValue) { + Direction(int reversedId, Vector3i unitVector, Axis axis, com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue) { this.reversedId = reversedId; this.unitVector = unitVector; this.axis = axis; @@ -69,7 +67,7 @@ public enum Direction { } @Nonnull - public static Direction fromPistonValue(PistonValue pistonValue) { + public static Direction fromPistonValue(com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue) { for (Direction direction : VALUES) { if (direction.pistonValue == pistonValue) { return direction; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index 6159e9dd5..9923c0a16 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -29,9 +29,9 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.mc.protocol.data.game.recipe.Ingredient; import com.github.steveice10.mc.protocol.data.game.recipe.Recipe; import com.github.steveice10.mc.protocol.data.game.recipe.RecipeType; +import com.github.steveice10.mc.protocol.data.game.recipe.data.LegacyUpgradeRecipeData; import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapedRecipeData; import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapelessRecipeData; -import com.github.steveice10.mc.protocol.data.game.recipe.data.SmithingRecipeData; import com.github.steveice10.mc.protocol.data.game.recipe.data.StoneCuttingRecipeData; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket; import com.nukkitx.protocol.bedrock.data.inventory.CraftingData; @@ -137,7 +137,7 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator { // Required to translate these as of 1.18.10, or else they cannot be crafted - SmithingRecipeData recipeData = (SmithingRecipeData) recipe.getData(); + LegacyUpgradeRecipeData recipeData = (LegacyUpgradeRecipeData) recipe.getData(); ItemData output = ItemTranslator.translateToBedrock(session, recipeData.getResult()); for (ItemStack base : recipeData.getBase().getOptions()) { ItemDescriptorWithCount bedrockBase = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, base)); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java index 63985d9ae..8fa528cb7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java @@ -91,6 +91,16 @@ public class JavaSetPassengersTranslator extends PacketTranslator 1)); // Force an update to the passenger metadata passenger.updateBedrockMetadata(); + + if (passenger == session.getPlayerEntity()) { + //TODO test + if (session.getMountVehicleScheduledFuture() != null) { + // Cancel this task as it is now unnecessary. + // Note that this isn't present in JavaSetPassengersTranslator as that code is not called for players + // as of Java 1.19.3, but the scheduled future checks for the vehicle being null anyway. + session.getMountVehicleScheduledFuture().cancel(false); + } + } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index 5f182805e..ff745a546 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -30,20 +30,16 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket; import com.nukkitx.math.vector.Vector3f; -import com.nukkitx.protocol.bedrock.data.entity.EntityLinkData; import com.nukkitx.protocol.bedrock.packet.ChunkRadiusUpdatedPacket; import com.nukkitx.protocol.bedrock.packet.MovePlayerPacket; import com.nukkitx.protocol.bedrock.packet.RespawnPacket; -import com.nukkitx.protocol.bedrock.packet.SetEntityLinkPacket; import org.geysermc.geyser.entity.EntityDefinitions; -import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.TeleportCache; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.ChunkUtils; -import org.geysermc.geyser.util.EntityUtils; @Translator(packet = ClientboundPlayerPositionPacket.class) public class JavaPlayerPositionTranslator extends PacketTranslator { @@ -101,27 +97,6 @@ public class JavaPlayerPositionTranslator extends PacketTranslator 1); - entity.updateBedrockMetadata(); - - if (session.getMountVehicleScheduledFuture() != null) { - // Cancel this task as it is now unnecessary. - // Note that this isn't present in JavaSetPassengersTranslator as that code is not called for players - // as of Java 1.19.3, but the scheduled future checks for the vehicle being null anyway. - session.getMountVehicleScheduledFuture().cancel(false); - } - } - // If coordinates are relative, then add to the existing coordinate double newX = packet.getX() + (packet.getRelative().contains(PositionElement.X) ? entity.getPosition().getX() : 0); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java index 8824f88c4..4d35db562 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java @@ -57,13 +57,13 @@ public class JavaBlockEventTranslator extends PacketTranslator { data = 4; pos = pos.add(0, -0.9f, 0); diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8858edc68..d83aaa8f4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,8 +11,7 @@ websocket = "1.5.1" protocol = "2.9.17-20230217.002312-1" raknet = "1.6.28-20220125.214016-6" mcauthlib = "d9d773e" -mcprotocollib = "1.19.3-20230107.194116-10" -packetlib = "3.0.1" +mcprotocollib = "1.19.4-SNAPSHOT" adventure = "4.12.0-20220629.025215-9" adventure-platform = "4.1.2" junit = "5.9.2" @@ -84,7 +83,6 @@ gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" } junit = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit" } mcauthlib = { group = "com.github.GeyserMC", name = "MCAuthLib", version.ref = "mcauthlib" } mcprotocollib = { group = "com.github.steveice10", name = "mcprotocollib", version.ref = "mcprotocollib" } -packetlib = { group = "com.github.steveice10", name = "packetlib", version.ref = "packetlib" } protocol = { group = "com.nukkitx.protocol", name = "bedrock-v567", version.ref = "protocol" } raknet = { group = "com.nukkitx.network", name = "raknet", version.ref = "raknet" } sponge-api = { group = "org.spongepowered", name = "spongeapi", version.ref = "sponge" }