Skip to content

Commit 07b02f9

Browse files
Improve GameRule API
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
1 parent 3f5728e commit 07b02f9

4 files changed

Lines changed: 30 additions & 24 deletions

File tree

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
@@ -3799,8 +3799,7 @@ default void playSound(@NotNull Entity entity, @NotNull String sound, float volu
37993799
* @param <T> the GameRule's type
38003800
* @return the current value
38013801
*/
3802-
@Nullable
3803-
public <T> T getGameRuleValue(@NotNull GameRule<T> rule);
3802+
public @NotNull <T> T getGameRuleValue(@NotNull GameRule<T> rule);
38043803

38053804
/**
38063805
* 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
38093808
* @param rule the rule to return a default value for
38103809
* @param <T> the type of GameRule
38113810
* @return the default value
3811+
* @deprecated use {@link GameRule#getDefaultValue()} instead
38123812
*/
3813-
@Nullable
3814-
public <T> T getGameRuleDefault(@NotNull GameRule<T> rule);
3813+
@Deprecated(since = "1.21.11")
3814+
default <T> @NotNull T getGameRuleDefault(@NotNull GameRule<T> rule) {
3815+
return rule.getDefaultValue();
3816+
}
38153817

38163818
/**
38173819
* Set the given {@link GameRule}'s new value.

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,25 @@ 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 CraftGameRule.LegacyGameRuleWrapper wrapper) {
92+
return (T) wrapper.getToLegacyFromModern().apply(value);
93+
}
94+
95+
return value;
96+
}
97+
8498
public static class LegacyGameRuleWrapper<LEGACY, MODERN> extends CraftGameRule<LEGACY> {
8599

86100
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
@@ -1694,30 +1694,12 @@ public boolean isGameRule(String rule) {
16941694
return this.getHandle().getGameRules().rules.has(CraftGameRule.bukkitToMinecraft(bukkit));
16951695
}
16961696

1697-
public static <T> T shimLegacyValue(T value, org.bukkit.GameRule<?> gameRule){
1698-
//noinspection rawtypes unchecked
1699-
if (gameRule instanceof CraftGameRule.LegacyGameRuleWrapper legacyGameRuleWrapper) {
1700-
//noinspection unchecked
1701-
return (T) legacyGameRuleWrapper.getToLegacyFromModern().apply(value);
1702-
}
1703-
1704-
return value;
1705-
}
1706-
17071697
@Override
1708-
public <T> @Nullable T getGameRuleValue(org.bukkit.@NotNull GameRule<T> rule) {
1698+
public <T> @NotNull T getGameRuleValue(org.bukkit.@NotNull GameRule<T> rule) {
17091699
Preconditions.checkArgument(rule != null, "GameRule cannot be null");
17101700

17111701
T value = this.getHandle().getGameRules().get(CraftGameRule.bukkitToMinecraft(rule));
1712-
return shimLegacyValue(value, rule);
1713-
}
1714-
1715-
@Override
1716-
public <T> @Nullable T getGameRuleDefault(org.bukkit.@NotNull GameRule<T> rule) {
1717-
Preconditions.checkArgument(rule != null, "GameRule cannot be null");
1718-
T value = CraftGameRule.bukkitToMinecraft(rule).defaultValue();
1719-
1720-
return shimLegacyValue(value, rule);
1702+
return CraftGameRule.shimLegacyValue(value, rule);
17211703
}
17221704

17231705
@Override

0 commit comments

Comments
 (0)