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..0ea033b61e01 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,24 @@ 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 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