Skip to content

Commit 0c79f00

Browse files
Improve GameRule API (#13668)
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
1 parent 144a7c7 commit 0c79f00

File tree

4 files changed

+29
-24
lines changed

4 files changed

+29
-24
lines changed

paper-api/src/main/java/org/bukkit/GameRule.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,14 @@ private static UnaryOperator<Boolean> inverseBool() {
488488
@NotNull
489489
public abstract Class<T> getType();
490490

491+
/**
492+
* Get the default value of this rule.
493+
*
494+
* @return the default value
495+
*/
496+
@NotNull
497+
public abstract T getDefaultValue();
498+
491499
/**
492500
* Get a {@link GameRule} by its name.
493501
*

paper-api/src/main/java/org/bukkit/World.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3802,8 +3802,7 @@ default void playSound(@NotNull Entity entity, @NotNull String sound, float volu
38023802
* @param <T> the GameRule's type
38033803
* @return the current value
38043804
*/
3805-
@Nullable
3806-
public <T> T getGameRuleValue(@NotNull GameRule<T> rule);
3805+
public @NotNull <T> T getGameRuleValue(@NotNull GameRule<T> rule);
38073806

38083807
/**
38093808
* Get the default value for a given {@link GameRule}. This value is not
@@ -3812,9 +3811,12 @@ default void playSound(@NotNull Entity entity, @NotNull String sound, float volu
38123811
* @param rule the rule to return a default value for
38133812
* @param <T> the type of GameRule
38143813
* @return the default value
3814+
* @deprecated use {@link GameRule#getDefaultValue()} instead
38153815
*/
3816-
@Nullable
3817-
public <T> T getGameRuleDefault(@NotNull GameRule<T> rule);
3816+
@Deprecated(since = "26.1.2")
3817+
default <T> @NotNull T getGameRuleDefault(@NotNull GameRule<T> rule) {
3818+
return rule.getDefaultValue();
3819+
}
38183820

38193821
/**
38203822
* Set the given {@link GameRule}'s new value.

paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,24 @@ public Class<T> getType() {
7676
};
7777
}
7878

79+
@Override
80+
public T getDefaultValue() {
81+
return shimLegacyValue(this.getHandle().defaultValue(), this);
82+
}
83+
7984
@Override
8085
public String translationKey() {
8186
return this.getHandle().getDescriptionId();
8287
}
8388

89+
@SuppressWarnings({"unchecked", "rawtypes"})
90+
public static <T> T shimLegacyValue(T value, GameRule<?> rule) {
91+
if (rule instanceof LegacyGameRuleWrapper wrapper) {
92+
return (T) wrapper.getToLegacyFromModern().apply(value);
93+
}
94+
return value;
95+
}
96+
8497
public static class LegacyGameRuleWrapper<LEGACY, MODERN> extends CraftGameRule<LEGACY> {
8598

8699
private final Class<LEGACY> typeOverride;

paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1688,30 +1688,12 @@ public boolean isGameRule(String rule) {
16881688
return this.getHandle().getGameRules().rules.has(CraftGameRule.bukkitToMinecraft(bukkit));
16891689
}
16901690

1691-
public static <T> T shimLegacyValue(T value, org.bukkit.GameRule<?> gameRule){
1692-
//noinspection rawtypes unchecked
1693-
if (gameRule instanceof CraftGameRule.LegacyGameRuleWrapper legacyGameRuleWrapper) {
1694-
//noinspection unchecked
1695-
return (T) legacyGameRuleWrapper.getToLegacyFromModern().apply(value);
1696-
}
1697-
1698-
return value;
1699-
}
1700-
17011691
@Override
1702-
public <T> @Nullable T getGameRuleValue(org.bukkit.@NotNull GameRule<T> rule) {
1692+
public <T> @NotNull T getGameRuleValue(org.bukkit.@NotNull GameRule<T> rule) {
17031693
Preconditions.checkArgument(rule != null, "GameRule cannot be null");
17041694

17051695
T value = this.getHandle().getGameRules().get(CraftGameRule.bukkitToMinecraft(rule));
1706-
return shimLegacyValue(value, rule);
1707-
}
1708-
1709-
@Override
1710-
public <T> @Nullable T getGameRuleDefault(org.bukkit.@NotNull GameRule<T> rule) {
1711-
Preconditions.checkArgument(rule != null, "GameRule cannot be null");
1712-
T value = CraftGameRule.bukkitToMinecraft(rule).defaultValue();
1713-
1714-
return shimLegacyValue(value, rule);
1696+
return CraftGameRule.shimLegacyValue(value, rule);
17151697
}
17161698

17171699
@Override

0 commit comments

Comments
 (0)