From b8a3c6dab9981412a4350231be4f48f602a85118 Mon Sep 17 00:00:00 2001 From: chris Date: Sun, 26 Oct 2025 01:08:24 +0200 Subject: [PATCH 01/19] Improve error message handling for web requests (#5927) * Improve error message handling Avoid https://github.com/GeyserMC/Geyser/issues/5832 * Update core/src/main/java/org/geysermc/geyser/util/WebUtils.java Co-authored-by: rtm516 * rename variable --------- Co-authored-by: rtm516 --- .../java/org/geysermc/geyser/GeyserImpl.java | 6 ++- .../geyser/item/parser/ItemStackParser.java | 1 - .../org/geysermc/geyser/util/WebUtils.java | 40 ++++++++++++++----- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 24d923949..86d80ee75 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -216,7 +216,11 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { public void initialize() { // Setup encryption early so we don't start if we can't auth - EncryptionUtils.getMojangPublicKey(); + try { + EncryptionUtils.getMojangPublicKey(); + } catch (Throwable e) { + throw new RuntimeException("Cannot setup authentication! Are you offline? ", e); + } long startupTime = System.currentTimeMillis(); diff --git a/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java b/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java index 2ee35f3b5..1504fe911 100644 --- a/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java +++ b/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java @@ -74,7 +74,6 @@ import java.util.function.Function; */ // Lots of unchecked casting happens here. It should all be handled properly. @SuppressWarnings("unchecked") -// TODO only log some things once (like was done in vault translator) public final class ItemStackParser { private static final Map, DataComponentParser> PARSERS = new Reference2ObjectOpenHashMap<>(); diff --git a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java index 41925b809..382c65fba 100644 --- a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java @@ -76,7 +76,7 @@ public class WebUtils { con.setRequestProperty("User-Agent", getUserAgent()); // Otherwise Java 8 fails on checking updates con.setConnectTimeout(10000); con.setReadTimeout(10000); - + checkResponseCode(con); return connectionToString(con); } catch (UnknownHostException e) { throw new IllegalStateException("Unable to resolve requested url (%s)! Are you offline?".formatted(reqURL), e); @@ -94,6 +94,7 @@ public class WebUtils { con.setRequestProperty("User-Agent", getUserAgent()); con.setConnectTimeout(10000); con.setReadTimeout(10000); + checkResponseCode(con); return GeyserImpl.JSON_MAPPER.readTree(con.getInputStream()); } @@ -107,6 +108,7 @@ public class WebUtils { try { HttpURLConnection con = (HttpURLConnection) new URL(reqURL).openConnection(); con.setRequestProperty("User-Agent", getUserAgent()); + checkResponseCode(con); InputStream in = con.getInputStream(); Files.copy(in, Paths.get(fileLocation), StandardCopyOption.REPLACE_EXISTING); } catch (Exception e) { @@ -270,24 +272,38 @@ public class WebUtils { } /** - * Get the string output from the passed {@link HttpURLConnection} - * - * @param con The connection to get the string from - * @return The body of the returned page - * @throws IOException If the request fails + * Gets the string output from the passed {@link HttpURLConnection}, + * or logs the error message. */ private static String connectionToString(HttpURLConnection con) throws IOException { + checkResponseCode(con); + return inputStreamToString(con.getInputStream(), con::disconnect); + } + + /** + * Throws an exception if there is an error stream to avoid further issues + */ + private static void checkResponseCode(HttpURLConnection con) throws IOException { // Send the request (we dont use this but its required for getErrorStream() to work) con.getResponseCode(); // Read the error message if there is one if not just read normally - InputStream inputStream = con.getErrorStream(); - if (inputStream == null) { - inputStream = con.getInputStream(); + InputStream errorStream = con.getErrorStream(); + if (errorStream != null) { + throw new IOException(inputStreamToString(errorStream, null)); } + } + /** + * Get the string output from the passed {@link InputStream} + * + * @param stream The input stream to get the string from + * @return The body of the returned page + * @throws IOException If the request fails + */ + private static String inputStreamToString(InputStream stream, @Nullable Runnable onFinish) throws IOException { StringBuilder content = new StringBuilder(); - try (BufferedReader in = new BufferedReader(new InputStreamReader(inputStream))) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(stream))) { String inputLine; while ((inputLine = in.readLine()) != null) { @@ -295,7 +311,9 @@ public class WebUtils { content.append("\n"); } - con.disconnect(); + if (onFinish != null) { + onFinish.run(); + } } return content.toString(); From 59edd3a21e37c84a3b706a52174d44525d384ea0 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Sun, 26 Oct 2025 19:01:56 +0100 Subject: [PATCH 02/19] Bump adventure dependency --- .../org/geysermc/geyser/item/hashing/ComponentHasher.java | 1 + gradle/libs.versions.toml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java index 913312e8e..d4d9dac52 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java @@ -165,6 +165,7 @@ public interface ComponentHasher { } else if (component instanceof NBTComponent nbt) { return NBT_COMPONENT.hash(nbt, encoder); } + // TODO support object component hashing! throw new IllegalStateException("Unimplemented component hasher: " + component); }; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d356a6316..c13fa62b9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,9 +14,9 @@ protocol-common = "3.0.0.Beta8-20250929.213851-8" protocol-codec = "3.0.0.Beta8-20250929.213851-8" raknet = "1.0.0.CR3-20250811.214335-20" minecraftauth = "4.1.1" -mcprotocollib = "1.21.9-20251020.140136-16" -adventure = "4.24.0" -adventure-platform = "4.3.0" +mcprotocollib = "1.21.9-20251026.124736-17" +adventure = "4.25.0" +adventure-platform = "4.4.1" junit = "5.9.2" checkerframework = "3.19.0" log4j = "2.20.0" From 75f3f2c6ce57e32e31eed2a8dbcbcec01bbf9ce6 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Sun, 26 Oct 2025 19:24:22 +0100 Subject: [PATCH 03/19] Fix: right-click events for custom skulls Resolves https://github.com/GeyserMC/Geyser/issues/5923 --- .../org/geysermc/geyser/translator/item/ItemTranslator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 9d3ca3696..488db4c66 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -530,10 +530,10 @@ public final class ItemTranslator { } if (mapping.getJavaItem().equals(Items.PLAYER_HEAD)) { - /*CustomSkull customSkull = getCustomSkull(itemStack.getComponent(DataComponentTypes.PROFILE)); + CustomSkull customSkull = getCustomSkull(itemStack.getComponent(DataComponentTypes.PROFILE)); if (customSkull != null) { itemDefinition = session.getItemMappings().getCustomBlockItemDefinitions().get(customSkull.getCustomBlockData()); - }*/ // TODO + } } ItemDefinition definition = CustomItemTranslator.getCustomItem(itemStack.getComponents(), mapping); From 7375b748d75e174cc33cf8db2621f7f04b75378f Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Sun, 26 Oct 2025 19:39:14 +0100 Subject: [PATCH 04/19] Make real container check less strict Closes https://github.com/GeyserMC/Geyser/issues/5912 --- .../geysermc/geyser/inventory/holder/BlockInventoryHolder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index 7b57540f9..fa385224f 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -162,7 +162,7 @@ public class BlockInventoryHolder extends InventoryHolder { * a block to hold the inventory that's wildly out of range. */ protected boolean checkInteractionPosition(GeyserSession session) { - return session.getLastInteractionPlayerPosition().equals(session.getPlayerEntity().getPosition()); + return session.getLastInteractionPlayerPosition().distance(session.getPlayerEntity().getPosition()) < 2; } /** From 38893a947659e484c969591a3bad0ec3aef1b1c8 Mon Sep 17 00:00:00 2001 From: Eclipse Date: Mon, 27 Oct 2025 23:40:17 +0000 Subject: [PATCH 05/19] Implement hashers for new object component type (#5935) * Implement hashers for new object component type * Remove extra whitespace --- .../geyser/item/hashing/ComponentHasher.java | 27 ++++++- .../geyser/item/hashing/MapBuilder.java | 28 ++++++++ .../geyser/item/hashing/MinecraftHasher.java | 10 ++- .../geyser/item/hashing/RegistryHasher.java | 2 +- .../item/hashing/data/ConsumeEffectType.java | 6 +- .../item/hashing/data/ObjectContentsType.java | 70 +++++++++++++++++++ 6 files changed, 135 insertions(+), 8 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/item/hashing/data/ObjectContentsType.java diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java index d4d9dac52..2bb487afa 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/ComponentHasher.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.item.hashing; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.KeybindComponent; import net.kyori.adventure.text.NBTComponent; +import net.kyori.adventure.text.ObjectComponent; import net.kyori.adventure.text.ScoreComponent; import net.kyori.adventure.text.SelectorComponent; import net.kyori.adventure.text.TextComponent; @@ -39,6 +40,9 @@ import net.kyori.adventure.text.format.ShadowColor; import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.object.ObjectContents; +import net.kyori.adventure.text.object.PlayerHeadObjectContents; +import org.geysermc.geyser.item.hashing.data.ObjectContentsType; import java.util.function.Supplier; @@ -54,6 +58,17 @@ public interface ComponentHasher { } }); + MinecraftHasher PROFILE_PROPERTY = MinecraftHasher.mapBuilder(builder -> builder + .accept("name", MinecraftHasher.STRING, PlayerHeadObjectContents.ProfileProperty::name) + .accept("value", MinecraftHasher.STRING, PlayerHeadObjectContents.ProfileProperty::value) + .accept("signature", MinecraftHasher.STRING, PlayerHeadObjectContents.ProfileProperty::signature)); + + MinecraftHasher RESOLVABLE_PROFILE = MinecraftHasher.mapBuilder(builder -> builder + .optionalNullable("name", MinecraftHasher.STRING, PlayerHeadObjectContents::name) + .optionalNullable("id", MinecraftHasher.UUID, PlayerHeadObjectContents::id) + .optionalList("properties", PROFILE_PROPERTY, PlayerHeadObjectContents::profileProperties) + .optionalNullable("texture", MinecraftHasher.KEY, PlayerHeadObjectContents::texture)); + MinecraftHasher NAMED_COLOR = MinecraftHasher.STRING.cast(NamedTextColor::toString); MinecraftHasher DIRECT_COLOR = MinecraftHasher.STRING.cast(TextColor::asHexString); @@ -151,6 +166,13 @@ public interface ComponentHasher { .optional("interpret", MinecraftHasher.BOOL, NBTComponent::interpret, false) .optionalNullable("separator", COMPONENT, NBTComponent::separator)); // TODO source key, needs kyori update? + MinecraftHasher OBJECT_CONTENTS_TYPE = MinecraftHasher.fromEnum(ObjectContentsType::getName); + + MapBuilder OBJECT_CONTENTS = MapBuilder.dispatch("object", OBJECT_CONTENTS_TYPE, ObjectContentsType::fromContents, ObjectContentsType::mapBuilder); + + MinecraftHasher OBJECT_COMPONENT = component(builder -> builder + .accept(OBJECT_CONTENTS, ObjectComponent::contents)); + MinecraftHasher ACTUAL_COMPONENT = (component, encoder) -> { if (component instanceof TextComponent text) { return TEXT_COMPONENT.hash(text, encoder); @@ -164,9 +186,10 @@ public interface ComponentHasher { return SELECTOR_COMPONENT.hash(selector, encoder); } else if (component instanceof NBTComponent nbt) { return NBT_COMPONENT.hash(nbt, encoder); + } else if (component instanceof ObjectComponent object) { + return OBJECT_COMPONENT.hash(object, encoder); } - // TODO support object component hashing! - throw new IllegalStateException("Unimplemented component hasher: " + component); + throw new UnsupportedOperationException("Unimplemented component hasher: " + component); }; private static MinecraftHasher component(MapBuilder componentBuilder) { diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/MapBuilder.java b/core/src/main/java/org/geysermc/geyser/item/hashing/MapBuilder.java index 84d180ff6..5f66c4268 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/MapBuilder.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/MapBuilder.java @@ -57,6 +57,34 @@ public interface MapBuilder extends UnaryOperator> { return builder -> builder; } + /** + * Delegates to {@link MapBuilder#dispatch(String, MinecraftHasher, Function, Function)}, uses {@code "type"} as the {@code typeKey}. + * + * @see MapBuilder#dispatch(String, MinecraftHasher, Function, Function) + */ + static MapBuilder dispatch(MinecraftHasher typeHasher, Function typeExtractor, Function> hashDispatch) { + return dispatch("type", typeHasher, typeExtractor, hashDispatch); + } + + /** + * Creates a map builder that dispatches a {@link Type} from a {@link Dispatched} using {@code typeExtractor}, puts this as the {@code typeKey} key in the map using the given {@code typeHasher}, + * and uses a {@link MapBuilder} provided by {@code mapDispatch} to build the rest of the map. + * + *

This can be used to create map builders that build an abstract type or interface into a map with different keys depending on the type.

+ * + * @param typeKey the key to store the {@link Type} in. + * @param typeHasher the hasher used to encode the {@link Type}. + * @param typeExtractor the function that extracts a {@link Type} from a {@link Dispatched}. + * @param mapDispatch the function that provides a {@link MapBuilder} based on a {@link Type}. + * @param the type of the {@code typeKey}. + * @param the type of the new map builder. + */ + static MapBuilder dispatch(String typeKey, MinecraftHasher typeHasher, Function typeExtractor, Function> mapDispatch) { + return builder -> builder + .accept(typeKey, typeHasher, typeExtractor) + .accept(typeExtractor, mapDispatch); + } + /** * Returns a function that creates a map builder from an NBT map. The builder simply adds all keys from the NBT map. * diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java index b23f8dba3..9ae55bb2d 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/MinecraftHasher.java @@ -216,6 +216,8 @@ public interface MinecraftHasher { * Delegates to {@link MinecraftHasher#dispatch(String, Function, Function)}, uses {@code "type"} as the {@code typeKey}. * * @see MinecraftHasher#dispatch(String, Function, Function) + * @see MapBuilder#dispatch(MinecraftHasher, Function, Function) + * @see MapBuilder#dispatch(String, MinecraftHasher, Function, Function) */ default MinecraftHasher dispatch(Function typeExtractor, Function> hashDispatch) { return dispatch("type", typeExtractor, hashDispatch); @@ -227,15 +229,17 @@ public interface MinecraftHasher { * *

This can be used to create hashers that hash an abstract type or interface into a map with different keys depending on the type.

* + *

Internally this simply delegates to and wraps {@link MapBuilder#dispatch(String, MinecraftHasher, Function, Function)} in {@link MinecraftHasher#mapBuilder(MapBuilder)}, + * using {@code this} as {@code typeHasher}.

+ * * @param typeKey the key to store the {@link Type} in. * @param typeExtractor the function that extracts a {@link Type} from a {@link Dispatched}. * @param mapDispatch the function that provides a {@link MapBuilder} based on a {@link Type}. * @param the type of the new hasher. + * @see MapBuilder#dispatch(String, MinecraftHasher, Function, Function) */ default MinecraftHasher dispatch(String typeKey, Function typeExtractor, Function> mapDispatch) { - return mapBuilder(builder -> builder - .accept(typeKey, this, typeExtractor) - .accept(typeExtractor, mapDispatch)); + return mapBuilder(MapBuilder.dispatch(typeKey, this, typeExtractor, mapDispatch)); } /** diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java index 6b7d0bb21..f25d43480 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/RegistryHasher.java @@ -304,7 +304,7 @@ public interface RegistryHasher extends MinecraftHasher { MinecraftHasher CONSUME_EFFECT_TYPE = enumRegistry(); - MinecraftHasher CONSUME_EFFECT = CONSUME_EFFECT_TYPE.dispatch(ConsumeEffectType::fromEffect, type -> type.getBuilder().cast()); + MinecraftHasher CONSUME_EFFECT = CONSUME_EFFECT_TYPE.dispatch(ConsumeEffectType::fromEffect, ConsumeEffectType::mapBuilder); MinecraftHasher SUSPICIOUS_STEW_EFFECT = MinecraftHasher.mapBuilder(builder -> builder .accept("id", EFFECT_ID, SuspiciousStewEffect::getMobEffectId) diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/data/ConsumeEffectType.java b/core/src/main/java/org/geysermc/geyser/item/hashing/data/ConsumeEffectType.java index 74872a25e..6c03ff3e0 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/data/ConsumeEffectType.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/data/ConsumeEffectType.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.item.hashing.data; -import lombok.Getter; import org.geysermc.geyser.item.hashing.MapBuilder; import org.geysermc.geyser.item.hashing.MinecraftHasher; import org.geysermc.geyser.item.hashing.RegistryHasher; @@ -44,7 +43,6 @@ public enum ConsumeEffectType { .accept("sound", RegistryHasher.SOUND_EVENT, ConsumeEffect.PlaySound::sound)); private final Class clazz; - @Getter private final MapBuilder builder; ConsumeEffectType(Class clazz) { @@ -57,6 +55,10 @@ public enum ConsumeEffectType { this.builder = builder; } + public MapBuilder mapBuilder() { + return builder.cast(); + } + public static ConsumeEffectType fromEffect(ConsumeEffect effect) { Class clazz = effect.getClass(); for (ConsumeEffectType type : values()) { diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/data/ObjectContentsType.java b/core/src/main/java/org/geysermc/geyser/item/hashing/data/ObjectContentsType.java new file mode 100644 index 000000000..63d769f5e --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/data/ObjectContentsType.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2025 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.item.hashing.data; + +import lombok.Getter; +import net.kyori.adventure.text.object.ObjectContents; +import net.kyori.adventure.text.object.PlayerHeadObjectContents; +import net.kyori.adventure.text.object.SpriteObjectContents; +import org.geysermc.geyser.item.hashing.ComponentHasher; +import org.geysermc.geyser.item.hashing.MapBuilder; +import org.geysermc.geyser.item.hashing.MinecraftHasher; + +import java.util.function.Function; + +public enum ObjectContentsType { + ATLAS("atlas", SpriteObjectContents.class, + builder -> builder + .optional("atlas", MinecraftHasher.KEY, SpriteObjectContents::atlas, SpriteObjectContents.DEFAULT_ATLAS) + .accept("sprite", MinecraftHasher.KEY, SpriteObjectContents::sprite)), + PLAYER("player", PlayerHeadObjectContents.class, + builder -> builder + .accept("player", ComponentHasher.RESOLVABLE_PROFILE, Function.identity()) + .optional("hat", MinecraftHasher.BOOL, PlayerHeadObjectContents::hat, true)); + + @Getter + private final String name; + private final MapBuilder builder; + + @SuppressWarnings("unused") // So Java knows what T we are talking about + ObjectContentsType(String name, Class clazz, MapBuilder builder) { + this.name = name; + this.builder = builder; + } + + public MapBuilder mapBuilder() { + return builder.cast(); + } + + public static ObjectContentsType fromContents(ObjectContents contents) { + if (contents instanceof SpriteObjectContents) { + return ATLAS; + } else if (contents instanceof PlayerHeadObjectContents) { + return PLAYER; + } + throw new UnsupportedOperationException("Don't know how to hash object contents of type " + contents.getClass()); + } +} From 29d77ff64103ecc155b908b204105756e5fa91a5 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 28 Oct 2025 15:33:32 +0100 Subject: [PATCH 06/19] Support 1.21.120 (#5936) * Initial work on 1.21.120 support * Version item components, update creative items * Global api changes --- README.md | 2 +- .../geysermc/geyser/network/GameProtocol.java | 2 + .../geyser/network/LoggingPacketHandler.java | 10 - .../populator/BlockRegistryPopulator.java | 3 + .../populator/ItemRegistryPopulator.java | 16 +- .../geyser/session/GeyserSession.java | 2 + .../geyser/skin/FloodgateSkinUploader.java | 21 +- .../java/JavaLoginFinishedTranslator.java | 3 +- .../geyser/util/LoginEncryptionUtils.java | 10 +- .../bedrock/creative_items.1_21_120.json | 9516 +++++++++++++ ...nents.nbt => item_components.1_21_100.nbt} | Bin .../bedrock/item_components.1_21_110.nbt | Bin 0 -> 14404 bytes .../bedrock/item_components.1_21_120.nbt | Bin 0 -> 14752 bytes .../bedrock/item_components.1_21_90.nbt | Bin 0 -> 14404 bytes .../bedrock/item_components.1_21_93.nbt | Bin 0 -> 14404 bytes .../bedrock/runtime_item_states.1_21_120.json | 11330 ++++++++++++++++ gradle/libs.versions.toml | 6 +- 17 files changed, 20887 insertions(+), 34 deletions(-) create mode 100644 core/src/main/resources/bedrock/creative_items.1_21_120.json rename core/src/main/resources/bedrock/{item_components.nbt => item_components.1_21_100.nbt} (100%) create mode 100644 core/src/main/resources/bedrock/item_components.1_21_110.nbt create mode 100644 core/src/main/resources/bedrock/item_components.1_21_120.nbt create mode 100644 core/src/main/resources/bedrock/item_components.1_21_90.nbt create mode 100644 core/src/main/resources/bedrock/item_components.1_21_93.nbt create mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_21_120.json diff --git a/README.md b/README.md index 1b1e7b380..56dc74761 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.21.90 - 1.21.114 and Minecraft Java 1.21.9 - 1.21.10. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.90 - 1.21.120 and Minecraft Java 1.21.9 - 1.21.10. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index a6679c1fd..80737a5a5 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -33,6 +33,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; +import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.api.util.MinecraftVersion; import org.geysermc.geyser.impl.MinecraftVersionImpl; @@ -87,6 +88,7 @@ public final class GameProtocol { register(Bedrock_v819.CODEC, "1.21.93", "1.21.94"); register(Bedrock_v827.CODEC, "1.21.100", "1.21.101"); register(Bedrock_v844.CODEC, "1.21.111", "1.21.112", "1.21.113", "1.21.114"); + register(Bedrock_v859.CODEC, "1.21.120"); MinecraftVersion latestBedrock = SUPPORTED_BEDROCK_VERSIONS.get(SUPPORTED_BEDROCK_VERSIONS.size() - 1); DEFAULT_BEDROCK_VERSION = latestBedrock.versionString(); diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 39c3f5aa9..8fc409a24 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -125,11 +125,6 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } - @Override - public PacketSignal handle(CraftingEventPacket packet) { - return defaultHandler(packet); - } - @Override public PacketSignal handle(EntityEventPacket packet) { return defaultHandler(packet); @@ -165,11 +160,6 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } - @Override - public PacketSignal handle(ItemFrameDropItemPacket packet) { - return defaultHandler(packet); - } - @Override public PacketSignal handle(LabTablePacket packet) { return defaultHandler(packet); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index a8aa29106..f287a4a7a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -33,6 +33,7 @@ import com.google.common.collect.Interners; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -47,6 +48,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; +import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -124,6 +126,7 @@ public final class BlockRegistryPopulator { .put(ObjectIntPair.of("1_21_90", Bedrock_v819.CODEC.getProtocolVersion()), Conversion827_819::remapBlock) .put(ObjectIntPair.of("1_21_100", Bedrock_v827.CODEC.getProtocolVersion()), Conversion844_827::remapBlock) .put(ObjectIntPair.of("1_21_110", Bedrock_v844.CODEC.getProtocolVersion()), tag -> tag) + .put(ObjectIntPair.of("1_21_110", Bedrock_v859.CODEC.getProtocolVersion()), tag -> tag) .build(); // We can keep this strong as nothing should be garbage collected diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index f90673389..5fb3590e2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -49,6 +49,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; +import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; @@ -196,6 +197,7 @@ public class ItemRegistryPopulator { paletteVersions.add(new PaletteVersion("1_21_93", Bedrock_v819.CODEC.getProtocolVersion(), eightOneNineFallbacks, Conversion844_827::remapItem)); paletteVersions.add(new PaletteVersion("1_21_100", Bedrock_v827.CODEC.getProtocolVersion(), eightTwoSevenFallbacks, Conversion844_827::remapItem)); paletteVersions.add(new PaletteVersion("1_21_110", Bedrock_v844.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_120", Bedrock_v859.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -209,13 +211,6 @@ public class ItemRegistryPopulator { throw new AssertionError("Unable to load Java runtime item IDs", e); } - NbtMap vanillaComponents; - try (InputStream stream = bootstrap.getResourceOrThrow("bedrock/item_components.nbt")) { - vanillaComponents = (NbtMap) NbtUtils.createGZIPReader(stream, true, true).readTag(); - } catch (Exception e) { - throw new AssertionError("Unable to load Bedrock item components", e); - } - boolean customItemsAllowed = GeyserImpl.getInstance().getConfig().isAddNonBedrockItems(); // List values here is important compared to HashSet - we need to preserve the order of what's given to us @@ -242,6 +237,13 @@ public class ItemRegistryPopulator { throw new AssertionError("Unable to load Bedrock runtime item IDs", e); } + NbtMap vanillaComponents; + try (InputStream stream = bootstrap.getResourceOrThrow("bedrock/item_components.%s.nbt".formatted(palette.version()))) { + vanillaComponents = (NbtMap) NbtUtils.createGZIPReader(stream, true, true).readTag(); + } catch (Exception e) { + throw new AssertionError("Unable to load Bedrock item components", e); + } + // Used for custom items int nextFreeBedrockId = 0; Int2ObjectMap registry = new Int2ObjectOpenHashMap<>(); diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index e6f88ba9e..fdac156b6 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -274,6 +274,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { */ @Setter private List certChainData; + @Setter + private String token; @NonNull @Setter diff --git a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java index 4e4f52914..68c5d7b74 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java @@ -190,15 +190,22 @@ public final class FloodgateSkinUploader { }; } - public void uploadSkin(List chainData, String clientData) { - if (chainData == null || clientData == null) { + public void uploadSkin(GeyserSession session) { + List chainData = session.getCertChainData(); + String token = session.getToken(); + String clientData = session.getClientData().getOriginalString(); + if ((chainData == null && token == null) || clientData == null) { return; } ObjectNode node = JACKSON.createObjectNode(); - ArrayNode chainDataNode = JACKSON.createArrayNode(); - chainData.forEach(chainDataNode::add); - node.set("chain_data", chainDataNode); + if (chainData != null) { + ArrayNode chainDataNode = JACKSON.createArrayNode(); + chainData.forEach(chainDataNode::add); + node.set("chain_data", chainDataNode); + } else { + node.put("token", token); + } node.put("client_data", clientData); // The reason why I don't like Jackson @@ -218,7 +225,7 @@ public final class FloodgateSkinUploader { } private void reconnectLater(GeyserImpl geyser) { - // we ca only reconnect when the thread pool is open + // we can only reconnect when the thread pool is open if (geyser.getScheduledThread().isShutdown() || closed) { logger.info("The skin uploader has been closed"); return; @@ -241,4 +248,4 @@ public final class FloodgateSkinUploader { client.close(); } } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java index 36c1ef197..2ce99e119 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java @@ -66,11 +66,12 @@ public class JavaLoginFinishedTranslator extends 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 Date: Tue, 28 Oct 2025 19:09:38 +0100 Subject: [PATCH 07/19] Use old auth certificate chain to fix skin uploading --- .../geyser/network/CodecProcessor.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index 7f308da2e..252657569 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -42,6 +42,11 @@ import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipment import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventoryContentSerializer_v748; import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventorySlotSerializer_v748; import org.cloudburstmc.protocol.bedrock.codec.v776.serializer.BossEventSerializer_v776; +import org.cloudburstmc.protocol.bedrock.codec.v818.serializer.LoginSerializer_v818; +import org.cloudburstmc.protocol.bedrock.data.auth.AuthPayload; +import org.cloudburstmc.protocol.bedrock.data.auth.AuthType; +import org.cloudburstmc.protocol.bedrock.data.auth.CertificateChainPayload; +import org.cloudburstmc.protocol.bedrock.data.auth.TokenPayload; import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket; @@ -59,6 +64,7 @@ import org.cloudburstmc.protocol.bedrock.packet.GameTestRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.cloudburstmc.protocol.bedrock.packet.LabTablePacket; +import org.cloudburstmc.protocol.bedrock.packet.LoginPacket; import org.cloudburstmc.protocol.bedrock.packet.MapCreateLockedCopyPacket; import org.cloudburstmc.protocol.bedrock.packet.MapInfoRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket; @@ -83,7 +89,13 @@ import org.cloudburstmc.protocol.bedrock.packet.SettingsCommandPacket; import org.cloudburstmc.protocol.bedrock.packet.SimpleEventPacket; import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.SubClientLoginPacket; +import org.cloudburstmc.protocol.common.util.Preconditions; import org.cloudburstmc.protocol.common.util.VarInts; +import org.jose4j.json.JsonUtil; +import org.jose4j.lang.JoseException; + +import java.util.List; +import java.util.Map; /** * Processes the Bedrock codec to remove or modify unused or unsafe packets and fields. @@ -242,6 +254,38 @@ class CodecProcessor { } }; + private static final BedrockPacketSerializer LOGIN_PACKET_BEDROCK_PACKET_SERIALIZER = new LoginSerializer_v818() { + + @Override + protected AuthPayload readAuthJwt(String authJwt) { + try { + Map payload = JsonUtil.parseJson(authJwt); + Preconditions.checkArgument(payload.containsKey("AuthenticationType"), "Missing AuthenticationType in JWT"); + int authTypeOrdinal = ((Number)payload.get("AuthenticationType")).intValue(); + if (authTypeOrdinal >= 0 && authTypeOrdinal < AuthType.values().length - 1) { + AuthType authType = AuthType.values()[authTypeOrdinal + 1]; + if (payload.containsKey("Certificate") && payload.get("Certificate") instanceof String certJson && !certJson.isEmpty()) { + Map certData = JsonUtil.parseJson(certJson); + if (certData.containsKey("chain") && certData.get("chain") instanceof List) { + List chain = (List)certData.get("chain"); + return new CertificateChainPayload(chain, authType); + } else { + throw new IllegalArgumentException("Invalid Certificate chain in JWT"); + } + } else if (payload.containsKey("Token") && payload.get("Token") instanceof String token && !token.isEmpty()) { + return new TokenPayload(token, authType); + } else { + throw new IllegalArgumentException("Invalid AuthPayload in JWT"); + } + } else { + throw new IllegalArgumentException("Invalid AuthenticationType ordinal: " + authTypeOrdinal); + } + } catch (JoseException e) { + throw new IllegalArgumentException("Failed to parse auth payload", e); + } + } + }; + @SuppressWarnings("unchecked") static BedrockCodec processCodec(BedrockCodec codec) { BedrockPacketSerializer bossEventSerializer; @@ -305,6 +349,11 @@ class CodecProcessor { .updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER); } + // TODO remove once global api is updated + if (codec.getProtocolVersion() >= 818) { + codecBuilder.updateSerializer(LoginPacket.class, LOGIN_PACKET_BEDROCK_PACKET_SERIALIZER); + } + if (!Boolean.getBoolean("Geyser.ReceiptPackets")) { codecBuilder.updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER); codecBuilder.updateSerializer(PurchaseReceiptPacket.class, IGNORED_SERIALIZER); From d8058766cc10071f7bd3cadce836fa8e42b3cf18 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Tue, 28 Oct 2025 20:53:24 +0100 Subject: [PATCH 08/19] Fix: Entity property min/max being flipped --- .../java/org/geysermc/geyser/entity/EntityDefinitions.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 fbe8b7883..8b9a54c0c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -1272,7 +1272,7 @@ public final class EntityDefinitions { if (propertyId.vanilla()) { throw new IllegalArgumentException("Cannot register custom property in vanilla namespace! " + propertyId); } - FloatProperty property = new FloatProperty(propertyId, min, max, defaultValue); + FloatProperty property = new FloatProperty(propertyId, max, min, defaultValue); registerProperty(identifier, property); return property; } @@ -1284,7 +1284,7 @@ public final class EntityDefinitions { if (propertyId.vanilla()) { throw new IllegalArgumentException("Cannot register custom property in vanilla namespace! " + propertyId); } - IntProperty property = new IntProperty(propertyId, min, max, defaultValue); + IntProperty property = new IntProperty(propertyId, max, min, defaultValue); registerProperty(identifier, property); return property; } From 9d5e1cbcb3f317f1732dd2b78a3c834b9d47454e Mon Sep 17 00:00:00 2001 From: KabanFriends <45000995+KabanFriends@users.noreply.github.com> Date: Wed, 29 Oct 2025 05:36:14 +0900 Subject: [PATCH 09/19] Fix incorrect priority range validation message in PriorityOption (#5939) --- .../org/geysermc/geyser/api/pack/option/PriorityOption.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java b/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java index f1f91e9a9..07db2e741 100644 --- a/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java +++ b/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java @@ -52,7 +52,7 @@ public interface PriorityOption extends ResourcePackOption { */ static PriorityOption priority(int priority) { if (priority < -100 || priority > 100) { - throw new IllegalArgumentException("Priority must be between 0 and 10 inclusive!"); + throw new IllegalArgumentException("Priority must be between -100 and 100 inclusive!"); } return GeyserApi.api().provider(PriorityOption.class, priority); } From dc322cba0a8f03bc787aa53c90c28720ff7acdae Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Wed, 29 Oct 2025 12:53:21 +0100 Subject: [PATCH 10/19] Update gradle to 9.2.0 --- .../geyser.platform-conventions.gradle.kts | 2 +- .../geyser.publish-conventions.gradle.kts | 6 ------ .../kotlin/geyser.shadow-conventions.gradle.kts | 8 ++++++-- core/build.gradle.kts | 4 +++- gradle/libs.versions.toml | 6 +++--- gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) delete mode 100644 gradle/wrapper/gradle-wrapper.jar diff --git a/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts index 7a342783b..8f269437d 100644 --- a/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts @@ -11,7 +11,7 @@ tasks { "id" to "geyser", "name" to "Geyser", "version" to project.version, - "description" to project.description, + "description" to project.description as String, "url" to "https://geysermc.org", "author" to "GeyserMC" ) diff --git a/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts index eca587721..036ee803c 100644 --- a/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts @@ -7,9 +7,3 @@ indra { publishSnapshotsTo("geysermc", "https://repo.opencollab.dev/maven-snapshots") publishReleasesTo("geysermc", "https://repo.opencollab.dev/maven-releases") } - -publishing { - // skip shadow jar from publishing. Workaround for https://github.com/johnrengelman/shadow/issues/651 - val javaComponent = project.components["java"] as AdhocComponentWithVariants - javaComponent.withVariantsFromConfiguration(configurations["shadowRuntimeElements"]) { skip() } -} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts index c160e5ec6..675df5158 100644 --- a/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts @@ -2,7 +2,11 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id("geyser.base-conventions") - id("com.github.johnrengelman.shadow") + id("com.gradleup.shadow") +} + +shadow { + addShadowVariantIntoJavaComponent = false } tasks { @@ -33,4 +37,4 @@ tasks { named("build") { dependsOn(shadowJar) } -} \ No newline at end of file +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 5c7f34499..63c516224 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -59,8 +59,10 @@ dependencies { } // Test + testImplementation(platform("org.junit:junit-bom:6.0.0")) testImplementation(libs.junit) testImplementation(libs.mockito) + testRuntimeOnly("org.junit.platform:junit-platform-launcher") // Annotation Processors compileOnly(projects.ap) @@ -108,7 +110,7 @@ fun isDevBuild(branch: String, repository: String): Boolean { return branch != "master" || repository.equals("https://github.com/GeyserMC/Geyser", ignoreCase = true).not() } -inner class GitInfo { +class GitInfo { val branch: String val commit: String val commitAbbrev: String diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 19e9b2607..8c08804d0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ minecraftauth = "4.1.1" mcprotocollib = "1.21.9-20251026.124736-17" adventure = "4.25.0" adventure-platform = "4.4.1" -junit = "5.9.2" +junit = "6.0.0" checkerframework = "3.19.0" log4j = "2.20.0" jline = "3.21.0" @@ -47,7 +47,7 @@ runvelocityversion = "3.4.0-SNAPSHOT" # plugin versions indra = "3.1.3" -shadow = "8.1.1" +shadow = "9.2.2" architectury-plugin = "3.4-SNAPSHOT" architectury-loom = "1.11-SNAPSHOT" minotaur = "2.8.7" @@ -149,7 +149,7 @@ mockito = { module = "org.mockito:mockito-core", version.ref = "mockito" } # plugins lombok = { group = "io.freefair.gradle", name = "lombok-plugin", version.ref = "lombok" } indra = { group = "net.kyori", name = "indra-common", version.ref = "indra" } -shadow = { group = "com.github.johnrengelman", name = "shadow", version.ref = "shadow" } +shadow = { group = "com.gradleup.shadow", name = "com.gradleup.shadow.gradle.plugin", version.ref = "shadow" } architectury-plugin = { group = "architectury-plugin", name = "architectury-plugin.gradle.plugin", version.ref = "architectury-plugin" } architectury-loom = { group = "dev.architectury.loom", name = "dev.architectury.loom.gradle.plugin", version.ref = "architectury-loom" } minotaur = { group = "com.modrinth.minotaur", name = "Minotaur", version.ref = "minotaur" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index a4b76b9530d66f5e68d973ea569d8e19de379189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4081da47..2e1113280 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 27cd53ead886e4b2bd43809a365474066661805b Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Wed, 29 Oct 2025 21:20:58 +0100 Subject: [PATCH 11/19] Re-add gradle wrapper jar --- gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 45633 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 12 ++++-------- gradlew.bat | 3 +-- 4 files changed, 6 insertions(+), 11 deletions(-) create mode 100644 gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f8e1ee3125fe0768e9a76ee977ac089eb657005e GIT binary patch literal 45633 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�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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e1113280..bad7c2462 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6d6..adff685a0 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -173,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -206,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9d21a2183..c4bdd3ab8 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell From e1e8b6734b27e9b2394b8b6b9d6b4ccd9fc0dc53 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Wed, 29 Oct 2025 22:33:12 +0100 Subject: [PATCH 12/19] More leniency for obsidian block breaking --- .../org/geysermc/geyser/session/cache/BlockBreakHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java index 041f76c03..7bd1d7518 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java @@ -515,7 +515,7 @@ public class BlockBreakHandler { protected boolean mayBreak(float progress, boolean bedrockDestroyed) { // We're tolerant here to account for e.g. obsidian breaking speeds not matching 1:1 :( - return (serverSideBlockBreaking && progress >= 1.0F) || (bedrockDestroyed && progress >= 0.7F); + return (serverSideBlockBreaking && progress >= 1.0F) || (bedrockDestroyed && progress >= 0.65F); } protected void destroyBlock(BlockState state, Vector3i vector, Direction direction, boolean instamine) { From 17247f2c33493a2ed822af0d803744e9d35e4c51 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Thu, 30 Oct 2025 02:19:42 +0100 Subject: [PATCH 13/19] Revert gradle/shadow update, for now This reverts commit dc322cba0a8f03bc787aa53c90c28720ff7acdae and 27cd53ead886e4b2bd43809a365474066661805b. --- .../geyser.platform-conventions.gradle.kts | 2 +- .../geyser.publish-conventions.gradle.kts | 6 ++++++ .../geyser.shadow-conventions.gradle.kts | 8 ++------ core/build.gradle.kts | 4 +--- gradle/libs.versions.toml | 6 +++--- gradle/wrapper/gradle-wrapper.jar | Bin 45633 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 12 ++++++++---- gradlew.bat | 3 ++- 9 files changed, 24 insertions(+), 19 deletions(-) diff --git a/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts index 8f269437d..7a342783b 100644 --- a/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.platform-conventions.gradle.kts @@ -11,7 +11,7 @@ tasks { "id" to "geyser", "name" to "Geyser", "version" to project.version, - "description" to project.description as String, + "description" to project.description, "url" to "https://geysermc.org", "author" to "GeyserMC" ) diff --git a/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts index 036ee803c..eca587721 100644 --- a/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.publish-conventions.gradle.kts @@ -7,3 +7,9 @@ indra { publishSnapshotsTo("geysermc", "https://repo.opencollab.dev/maven-snapshots") publishReleasesTo("geysermc", "https://repo.opencollab.dev/maven-releases") } + +publishing { + // skip shadow jar from publishing. Workaround for https://github.com/johnrengelman/shadow/issues/651 + val javaComponent = project.components["java"] as AdhocComponentWithVariants + javaComponent.withVariantsFromConfiguration(configurations["shadowRuntimeElements"]) { skip() } +} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts index 675df5158..c160e5ec6 100644 --- a/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.shadow-conventions.gradle.kts @@ -2,11 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id("geyser.base-conventions") - id("com.gradleup.shadow") -} - -shadow { - addShadowVariantIntoJavaComponent = false + id("com.github.johnrengelman.shadow") } tasks { @@ -37,4 +33,4 @@ tasks { named("build") { dependsOn(shadowJar) } -} +} \ No newline at end of file diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 63c516224..5c7f34499 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -59,10 +59,8 @@ dependencies { } // Test - testImplementation(platform("org.junit:junit-bom:6.0.0")) testImplementation(libs.junit) testImplementation(libs.mockito) - testRuntimeOnly("org.junit.platform:junit-platform-launcher") // Annotation Processors compileOnly(projects.ap) @@ -110,7 +108,7 @@ fun isDevBuild(branch: String, repository: String): Boolean { return branch != "master" || repository.equals("https://github.com/GeyserMC/Geyser", ignoreCase = true).not() } -class GitInfo { +inner class GitInfo { val branch: String val commit: String val commitAbbrev: String diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8c08804d0..19e9b2607 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ minecraftauth = "4.1.1" mcprotocollib = "1.21.9-20251026.124736-17" adventure = "4.25.0" adventure-platform = "4.4.1" -junit = "6.0.0" +junit = "5.9.2" checkerframework = "3.19.0" log4j = "2.20.0" jline = "3.21.0" @@ -47,7 +47,7 @@ runvelocityversion = "3.4.0-SNAPSHOT" # plugin versions indra = "3.1.3" -shadow = "9.2.2" +shadow = "8.1.1" architectury-plugin = "3.4-SNAPSHOT" architectury-loom = "1.11-SNAPSHOT" minotaur = "2.8.7" @@ -149,7 +149,7 @@ mockito = { module = "org.mockito:mockito-core", version.ref = "mockito" } # plugins lombok = { group = "io.freefair.gradle", name = "lombok-plugin", version.ref = "lombok" } indra = { group = "net.kyori", name = "indra-common", version.ref = "indra" } -shadow = { group = "com.gradleup.shadow", name = "com.gradleup.shadow.gradle.plugin", version.ref = "shadow" } +shadow = { group = "com.github.johnrengelman", name = "shadow", version.ref = "shadow" } architectury-plugin = { group = "architectury-plugin", name = "architectury-plugin.gradle.plugin", version.ref = "architectury-plugin" } architectury-loom = { group = "dev.architectury.loom", name = "dev.architectury.loom.gradle.plugin", version.ref = "architectury-loom" } minotaur = { group = "com.modrinth.minotaur", name = "Minotaur", version.ref = "minotaur" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f8e1ee3125fe0768e9a76ee977ac089eb657005e..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 35498 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 }= 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 F{{RkpxF!Gq delta 37538 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 /dev/null && printf '%s\n' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -114,6 +115,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -171,6 +173,7 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -203,14 +206,15 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index c4bdd3ab8..9d21a2183 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,10 +70,11 @@ goto fail :execute @rem Setup the command line +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell From 36a5980e54abdad5c4fd1548202e27794d16b8ba Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Thu, 30 Oct 2025 02:34:47 +0100 Subject: [PATCH 14/19] Bump MCPL to resolve copper chest open animations Co-authored-by: oryxel1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 19e9b2607..c9ed339a9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-common = "3.0.0.Beta10-20251014.180344-2" protocol-codec = "3.0.0.Beta10-20251014.180344-2" raknet = "1.0.0.CR3-20250811.214335-20" minecraftauth = "4.1.1" -mcprotocollib = "1.21.9-20251026.124736-17" +mcprotocollib = "1.21.9-20251029.184056-18" adventure = "4.25.0" adventure-platform = "4.4.1" junit = "5.9.2" From a5db5104b790da6779fcc64217f5d67ab823835f Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Sat, 1 Nov 2025 19:40:11 +0700 Subject: [PATCH 15/19] Fixes for Custom entity properties API (#5949) * Fixes * Further fixes * let's not talk about this one --------- Co-authored-by: onebeastchris --- .../geyser/entity/EntityDefinition.java | 2 +- .../geyser/entity/EntityDefinitions.java | 2 +- .../properties/GeyserEntityProperties.java | 18 +++++++++++------- .../entity/properties/type/EnumProperty.java | 3 ++- .../entity/properties/type/FloatProperty.java | 5 +++-- .../entity/properties/type/IntProperty.java | 5 +++-- .../geysermc/geyser/entity/type/Entity.java | 2 +- 7 files changed, 22 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java index 1cc529a07..f720eefd3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -161,7 +161,7 @@ public record EntityDefinition(EntityFactory factory, Entit if (identifier == null && type != null) { identifier = "minecraft:" + type.name().toLowerCase(Locale.ROOT); } - GeyserEntityProperties registeredProperties = propertiesBuilder == null ? null : propertiesBuilder.build(); + GeyserEntityProperties registeredProperties = propertiesBuilder == null ? new GeyserEntityProperties() : propertiesBuilder.build(); EntityDefinition definition = new EntityDefinition<>(factory, type, identifier, width, height, offset, registeredProperties, translators); if (register && definition.entityType() != null) { Registries.ENTITY_DEFINITIONS.get().putIfAbsent(definition.entityType(), definition); 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 8b9a54c0c..a0eec8983 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -1339,7 +1339,7 @@ public final class EntityDefinitions { }); for (var definition : Registries.ENTITY_DEFINITIONS.get().values()) { - if (definition.registeredProperties() != null) { + if (!definition.registeredProperties().isEmpty()) { Registries.BEDROCK_ENTITY_PROPERTIES.get().add(definition.registeredProperties().toNbtMap(definition.identifier())); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java index fa9439998..e738ce57b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java @@ -50,13 +50,8 @@ public class GeyserEntityProperties { private final static Pattern ENTITY_PROPERTY_PATTERN = Pattern.compile("^[a-z0-9_.:-]*:[a-z0-9_.:-]*$"); - private final ObjectArrayList> properties; - private final Object2IntMap propertyIndices; - - private GeyserEntityProperties() { - this.properties = new ObjectArrayList<>(); - this.propertyIndices = new Object2IntOpenHashMap<>(); - } + private ObjectArrayList> properties; + private Object2IntMap propertyIndices; public NbtMap toNbtMap(String entityType) { NbtMapBuilder mapBuilder = NbtMap.builder(); @@ -75,6 +70,11 @@ public class GeyserEntityProperties { throw new IllegalStateException("Cannot add properties outside the GeyserDefineEntityProperties event!"); } + if (properties == null || propertyIndices == null) { + this.properties = new ObjectArrayList<>(0); + this.propertyIndices = new Object2IntOpenHashMap<>(0); + } + if (this.properties.size() > 32) { throw new IllegalArgumentException("Cannot register more than 32 properties for entity type " + entityType); } @@ -97,6 +97,10 @@ public class GeyserEntityProperties { return properties; } + public boolean isEmpty() { + return properties == null || properties.isEmpty(); + } + public int getPropertyIndex(String name) { return propertyIndices.getOrDefault(name, -1); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java index 42fbb6a81..234c3097d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/EnumProperty.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.properties.type; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.entity.property.type.GeyserEnumEntityProperty; import org.geysermc.geyser.api.util.Identifier; @@ -35,7 +36,7 @@ import java.util.Locale; public record EnumProperty>( Identifier identifier, Class enumClass, - E defaultValue + @NonNull E defaultValue ) implements AbstractEnumProperty, GeyserEnumEntityProperty { public EnumProperty { diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java index 16997dc8a..8afc23676 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/FloatProperty.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.properties.type; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.entity.FloatEntityProperty; import org.geysermc.geyser.api.entity.property.type.GeyserFloatEntityProperty; @@ -34,7 +35,7 @@ public record FloatProperty( Identifier identifier, float max, float min, - Float defaultValue + @Nullable Float defaultValue ) implements PropertyType, GeyserFloatEntityProperty { public FloatProperty { @@ -42,7 +43,7 @@ public record FloatProperty( throw new IllegalArgumentException("Cannot create float entity property (%s) with a minimum value (%s) greater than maximum (%s)!" .formatted(identifier, min, max)); } - if (defaultValue < min || defaultValue > max) { + if (defaultValue != null && (defaultValue < min || defaultValue > max)) { throw new IllegalArgumentException("Cannot create float entity property (%s) with a default value (%s) outside of the range (%s - %s)!" .formatted(identifier, defaultValue, min, max)); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java b/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java index 966277696..2e5a0c518 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/type/IntProperty.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.properties.type; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.entity.IntEntityProperty; import org.geysermc.geyser.GeyserImpl; @@ -35,7 +36,7 @@ public record IntProperty( Identifier identifier, int max, int min, - Integer defaultValue + @Nullable Integer defaultValue ) implements PropertyType, GeyserIntEntityProperty { public IntProperty { @@ -43,7 +44,7 @@ public record IntProperty( throw new IllegalArgumentException("Cannot create int entity property (%s) with a minimum value (%s) greater than maximum (%s)!" .formatted(identifier, min, max)); } - if (defaultValue < min || defaultValue > max) { + if (defaultValue != null && (defaultValue < min || defaultValue > max)) { throw new IllegalArgumentException("Cannot create int entity property (%s) with a default value (%s) outside of the range (%s - %s)!" .formatted(identifier, defaultValue, min, max)); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java index 8f07aa296..b64446bea 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java @@ -167,7 +167,7 @@ public class Entity implements GeyserEntity { this.valid = false; - this.propertyManager = definition.registeredProperties() == null ? null : new GeyserEntityPropertyManager(definition.registeredProperties()); + this.propertyManager = definition.registeredProperties().isEmpty() ? null : new GeyserEntityPropertyManager(definition.registeredProperties()); setPosition(position); setAirSupply(getMaxAir()); From d5b0091108aa852a5359cddb81310a9649c90c52 Mon Sep 17 00:00:00 2001 From: oryxel Date: Sun, 2 Nov 2025 17:34:45 +0700 Subject: [PATCH 16/19] Fix: ground status for client-predicted vehicles (#5957) Co-authored-by: oryxel1 --- .../level/physics/CollisionManager.java | 2 +- .../BedrockPlayerAuthInputTranslator.java | 26 +++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java index 65e882e55..822ed9b3b 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java @@ -352,7 +352,7 @@ public class CollisionManager { return vector.getX() * vector.getX() + vector.getZ() * vector.getZ(); } - private Vector3d correctMovementForCollisions(Vector3d movement, BoundingBox boundingBox, boolean checkWorld, boolean walkOnLava) { + public Vector3d correctMovementForCollisions(Vector3d movement, BoundingBox boundingBox, boolean checkWorld, boolean walkOnLava) { double movementX = movement.getX(); double movementY = movement.getY(); double movementZ = movement.getZ(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index 7708631c6..9e70f3339 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input; import org.cloudburstmc.math.GenericMath; import org.cloudburstmc.math.vector.Vector2f; +import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.InputMode; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; @@ -40,6 +41,7 @@ import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; import org.geysermc.geyser.entity.type.living.animal.horse.LlamaEntity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.entity.vehicle.ClientVehicle; +import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -270,11 +272,31 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator Date: Sun, 2 Nov 2025 18:17:56 +0700 Subject: [PATCH 17/19] Fix: don't lock jumping input for minecart (#5959) * Don't lock jumping for minecart. --- .../org/geysermc/geyser/entity/type/MinecartEntity.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java index 1f69d34e7..906219678 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java @@ -210,6 +210,13 @@ public class MinecartEntity extends Entity implements Tickable { return Vector3f.from(0, getYaw(), 0); } + @Override + public boolean doesJumpDismount() { + // This is a little bit misleading because jumping is literally the only way to dismount for Touch users. + // Therefore, do this so we won't lock jumping to let Touch user able to dismount. + return false; + } + @Override protected InteractiveTag testInteraction(Hand hand) { if (definition == EntityDefinitions.CHEST_MINECART || definition == EntityDefinitions.HOPPER_MINECART) { From 73e67fc7a94227e9684a6471d165d9ac29b805b0 Mon Sep 17 00:00:00 2001 From: chris Date: Sun, 2 Nov 2025 13:52:26 +0100 Subject: [PATCH 18/19] Fix GeyserDefineEntityPropertiesEvent#properties() NPE (#5960) * Fix GeyserDefineEntityPropertiesEvent#properties() NPE * This is cleaner --- .../geyser/entity/properties/GeyserEntityProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java index e738ce57b..5d9563f3a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java +++ b/core/src/main/java/org/geysermc/geyser/entity/properties/GeyserEntityProperties.java @@ -94,7 +94,7 @@ public class GeyserEntityProperties { } public @NonNull List> getProperties() { - return properties; + return properties == null ? List.of() : properties; } public boolean isEmpty() { From 04880238296cc86214668231ca926599b2559286 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Sat, 8 Nov 2025 23:01:42 +0100 Subject: [PATCH 19/19] Fix: Critical / Enchanted critical hit particles --- .../protocol/java/entity/JavaAnimateTranslator.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java index fee41139d..a917a3c29 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java @@ -85,8 +85,12 @@ public class JavaAnimateTranslator extends PacketTranslator animatePacket.setAction(AnimatePacket.Action.CRITICAL_HIT); + case CRITICAL_HIT -> { + animatePacket.setData(55); + animatePacket.setAction(AnimatePacket.Action.CRITICAL_HIT); + } case ENCHANTMENT_CRITICAL_HIT -> { + animatePacket.setData(15); animatePacket.setAction(AnimatePacket.Action.MAGIC_CRITICAL_HIT); // Unsure if this does anything // Spawn custom particle