From 07b02f98071823d485bb6ccd7ba35b019e732d75 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sat, 28 Feb 2026 15:26:36 +0100 Subject: [PATCH 1/2] Improve GameRule API Co-authored-by: Jake Potrebic --- .../src/main/java/org/bukkit/GameRule.java | 8 +++++++ paper-api/src/main/java/org/bukkit/World.java | 10 +++++---- .../org/bukkit/craftbukkit/CraftGameRule.java | 14 ++++++++++++ .../org/bukkit/craftbukkit/CraftWorld.java | 22 ++----------------- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/GameRule.java b/paper-api/src/main/java/org/bukkit/GameRule.java index 032c64831f79..a9b9b12e4b62 100644 --- a/paper-api/src/main/java/org/bukkit/GameRule.java +++ b/paper-api/src/main/java/org/bukkit/GameRule.java @@ -488,6 +488,14 @@ private static UnaryOperator inverseBool() { @NotNull public abstract Class getType(); + /** + * Get the default value of this rule. + * + * @return the default value + */ + @NotNull + public abstract T getDefaultValue(); + /** * Get a {@link GameRule} by its name. * diff --git a/paper-api/src/main/java/org/bukkit/World.java b/paper-api/src/main/java/org/bukkit/World.java index b202bdb84bae..1e417bbcd498 100644 --- a/paper-api/src/main/java/org/bukkit/World.java +++ b/paper-api/src/main/java/org/bukkit/World.java @@ -3799,8 +3799,7 @@ default void playSound(@NotNull Entity entity, @NotNull String sound, float volu * @param the GameRule's type * @return the current value */ - @Nullable - public T getGameRuleValue(@NotNull GameRule rule); + public @NotNull T getGameRuleValue(@NotNull GameRule rule); /** * Get the default value for a given {@link GameRule}. This value is not @@ -3809,9 +3808,12 @@ default void playSound(@NotNull Entity entity, @NotNull String sound, float volu * @param rule the rule to return a default value for * @param the type of GameRule * @return the default value + * @deprecated use {@link GameRule#getDefaultValue()} instead */ - @Nullable - public T getGameRuleDefault(@NotNull GameRule rule); + @Deprecated(since = "1.21.11") + default @NotNull T getGameRuleDefault(@NotNull GameRule rule) { + return rule.getDefaultValue(); + } /** * Set the given {@link GameRule}'s new value. diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java index 5d42203a9079..7f444764964d 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java @@ -76,11 +76,25 @@ public Class getType() { }; } + @Override + public T getDefaultValue() { + return shimLegacyValue(this.getHandle().defaultValue(), this); + } + @Override public String translationKey() { return this.getHandle().getDescriptionId(); } + @SuppressWarnings({"unchecked", "rawtypes"}) + public static T shimLegacyValue(T value, GameRule rule){ + if (rule instanceof CraftGameRule.LegacyGameRuleWrapper wrapper) { + return (T) wrapper.getToLegacyFromModern().apply(value); + } + + return value; + } + public static class LegacyGameRuleWrapper extends CraftGameRule { private final Class typeOverride; diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index ebc65e3338c6..9b6e3722f8ec 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -1694,30 +1694,12 @@ public boolean isGameRule(String rule) { return this.getHandle().getGameRules().rules.has(CraftGameRule.bukkitToMinecraft(bukkit)); } - public static T shimLegacyValue(T value, org.bukkit.GameRule gameRule){ - //noinspection rawtypes unchecked - if (gameRule instanceof CraftGameRule.LegacyGameRuleWrapper legacyGameRuleWrapper) { - //noinspection unchecked - return (T) legacyGameRuleWrapper.getToLegacyFromModern().apply(value); - } - - return value; - } - @Override - public @Nullable T getGameRuleValue(org.bukkit.@NotNull GameRule rule) { + public @NotNull T getGameRuleValue(org.bukkit.@NotNull GameRule rule) { Preconditions.checkArgument(rule != null, "GameRule cannot be null"); T value = this.getHandle().getGameRules().get(CraftGameRule.bukkitToMinecraft(rule)); - return shimLegacyValue(value, rule); - } - - @Override - public @Nullable T getGameRuleDefault(org.bukkit.@NotNull GameRule rule) { - Preconditions.checkArgument(rule != null, "GameRule cannot be null"); - T value = CraftGameRule.bukkitToMinecraft(rule).defaultValue(); - - return shimLegacyValue(value, rule); + return CraftGameRule.shimLegacyValue(value, rule); } @Override From 5b67eaa6d17a2f435c44853d926ba36d7ff1fae6 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Mon, 2 Mar 2026 23:16:35 +0100 Subject: [PATCH 2/2] fix owen format --- .../src/main/java/org/bukkit/craftbukkit/CraftGameRule.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java index 7f444764964d..0ea033b61e01 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java @@ -87,11 +87,10 @@ public String translationKey() { } @SuppressWarnings({"unchecked", "rawtypes"}) - public static T shimLegacyValue(T value, GameRule rule){ - if (rule instanceof CraftGameRule.LegacyGameRuleWrapper wrapper) { + public static T shimLegacyValue(T value, GameRule rule) { + if (rule instanceof LegacyGameRuleWrapper wrapper) { return (T) wrapper.getToLegacyFromModern().apply(value); } - return value; }