aboutsummaryrefslogtreecommitdiffhomepage
path: root/patch-remap/mache-vineflower/net/minecraft/world/level/GameRules.java.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patch-remap/mache-vineflower/net/minecraft/world/level/GameRules.java.patch')
-rw-r--r--patch-remap/mache-vineflower/net/minecraft/world/level/GameRules.java.patch737
1 files changed, 737 insertions, 0 deletions
diff --git a/patch-remap/mache-vineflower/net/minecraft/world/level/GameRules.java.patch b/patch-remap/mache-vineflower/net/minecraft/world/level/GameRules.java.patch
new file mode 100644
index 0000000000..6318c19005
--- /dev/null
+++ b/patch-remap/mache-vineflower/net/minecraft/world/level/GameRules.java.patch
@@ -0,0 +1,737 @@
+--- a/net/minecraft/world/level/GameRules.java
++++ b/net/minecraft/world/level/GameRules.java
+@@ -10,8 +10,11 @@
+ import com.mojang.logging.LogUtils;
+ import com.mojang.serialization.DynamicLike;
+ import java.util.Comparator;
++import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Map.Entry;
++import java.util.Objects;
++import java.util.Optional;
+ import java.util.function.BiConsumer;
+ import java.util.function.Function;
+ import java.util.function.Supplier;
+@@ -26,182 +29,100 @@
+ import org.slf4j.Logger;
+
+ public class GameRules {
++
+ public static final int DEFAULT_RANDOM_TICK_SPEED = 3;
+ static final Logger LOGGER = LogUtils.getLogger();
+- private static final Map<GameRules.Key<?>, GameRules.Type<?>> GAME_RULE_TYPES = Maps.newTreeMap(Comparator.comparing(entry -> entry.id));
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DOFIRETICK = register(
+- "doFireTick", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_MOBGRIEFING = register(
+- "mobGriefing", GameRules.Category.MOBS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_KEEPINVENTORY = register(
+- "keepInventory", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DOMOBSPAWNING = register(
+- "doMobSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DOMOBLOOT = register(
+- "doMobLoot", GameRules.Category.DROPS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_PROJECTILESCANBREAKBLOCKS = register(
+- "projectilesCanBreakBlocks", GameRules.Category.DROPS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DOBLOCKDROPS = register(
+- "doTileDrops", GameRules.Category.DROPS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DOENTITYDROPS = register(
+- "doEntityDrops", GameRules.Category.DROPS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_COMMANDBLOCKOUTPUT = register(
+- "commandBlockOutput", GameRules.Category.CHAT, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_NATURAL_REGENERATION = register(
+- "naturalRegeneration", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DAYLIGHT = register(
+- "doDaylightCycle", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_LOGADMINCOMMANDS = register(
+- "logAdminCommands", GameRules.Category.CHAT, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_SHOWDEATHMESSAGES = register(
+- "showDeathMessages", GameRules.Category.CHAT, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_RANDOMTICKING = register(
+- "randomTickSpeed", GameRules.Category.UPDATES, GameRules.IntegerValue.create(3)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_SENDCOMMANDFEEDBACK = register(
+- "sendCommandFeedback", GameRules.Category.CHAT, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_REDUCEDDEBUGINFO = register(
+- "reducedDebugInfo", GameRules.Category.MISC, GameRules.BooleanValue.create(false, (server, value) -> {
+- byte b = (byte)(value.get() ? 22 : 23);
+-
+- for (ServerPlayer serverPlayer : server.getPlayerList().getPlayers()) {
+- serverPlayer.connection.send(new ClientboundEntityEventPacket(serverPlayer, b));
+- }
+- })
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_SPECTATORSGENERATECHUNKS = register(
+- "spectatorsGenerateChunks", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_SPAWN_RADIUS = register(
+- "spawnRadius", GameRules.Category.PLAYER, GameRules.IntegerValue.create(10)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DISABLE_ELYTRA_MOVEMENT_CHECK = register(
+- "disableElytraMovementCheck", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_MAX_ENTITY_CRAMMING = register(
+- "maxEntityCramming", GameRules.Category.MOBS, GameRules.IntegerValue.create(24)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_WEATHER_CYCLE = register(
+- "doWeatherCycle", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_LIMITED_CRAFTING = register(
+- "doLimitedCrafting", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false, (server, value) -> {
+- for (ServerPlayer serverPlayer : server.getPlayerList().getPlayers()) {
+- serverPlayer.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.LIMITED_CRAFTING, value.get() ? 1.0F : 0.0F));
+- }
+- })
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_MAX_COMMAND_CHAIN_LENGTH = register(
+- "maxCommandChainLength", GameRules.Category.MISC, GameRules.IntegerValue.create(65536)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_MAX_COMMAND_FORK_COUNT = register(
+- "maxCommandForkCount", GameRules.Category.MISC, GameRules.IntegerValue.create(65536)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_COMMAND_MODIFICATION_BLOCK_LIMIT = register(
+- "commandModificationBlockLimit", GameRules.Category.MISC, GameRules.IntegerValue.create(32768)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_ANNOUNCE_ADVANCEMENTS = register(
+- "announceAdvancements", GameRules.Category.CHAT, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DISABLE_RAIDS = register(
+- "disableRaids", GameRules.Category.MOBS, GameRules.BooleanValue.create(false)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DOINSOMNIA = register(
+- "doInsomnia", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_IMMEDIATE_RESPAWN = register(
+- "doImmediateRespawn", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false, (minecraftServer, booleanValue) -> {
+- for (ServerPlayer serverPlayer : minecraftServer.getPlayerList().getPlayers()) {
+- serverPlayer.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.IMMEDIATE_RESPAWN, booleanValue.get() ? 1.0F : 0.0F));
+- }
+- })
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_PLAYERS_NETHER_PORTAL_DEFAULT_DELAY = register(
+- "playersNetherPortalDefaultDelay", GameRules.Category.PLAYER, GameRules.IntegerValue.create(80)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_PLAYERS_NETHER_PORTAL_CREATIVE_DELAY = register(
+- "playersNetherPortalCreativeDelay", GameRules.Category.PLAYER, GameRules.IntegerValue.create(1)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DROWNING_DAMAGE = register(
+- "drowningDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_FALL_DAMAGE = register(
+- "fallDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_FIRE_DAMAGE = register(
+- "fireDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_FREEZE_DAMAGE = register(
+- "freezeDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_PATROL_SPAWNING = register(
+- "doPatrolSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_TRADER_SPAWNING = register(
+- "doTraderSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_WARDEN_SPAWNING = register(
+- "doWardenSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_FORGIVE_DEAD_PLAYERS = register(
+- "forgiveDeadPlayers", GameRules.Category.MOBS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_UNIVERSAL_ANGER = register(
+- "universalAnger", GameRules.Category.MOBS, GameRules.BooleanValue.create(false)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_PLAYERS_SLEEPING_PERCENTAGE = register(
+- "playersSleepingPercentage", GameRules.Category.PLAYER, GameRules.IntegerValue.create(100)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_BLOCK_EXPLOSION_DROP_DECAY = register(
+- "blockExplosionDropDecay", GameRules.Category.DROPS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_MOB_EXPLOSION_DROP_DECAY = register(
+- "mobExplosionDropDecay", GameRules.Category.DROPS, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_TNT_EXPLOSION_DROP_DECAY = register(
+- "tntExplosionDropDecay", GameRules.Category.DROPS, GameRules.BooleanValue.create(false)
+- );
+- public static final GameRules.Key<GameRules.IntegerValue> RULE_SNOW_ACCUMULATION_HEIGHT = register(
+- "snowAccumulationHeight", GameRules.Category.UPDATES, GameRules.IntegerValue.create(1)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_WATER_SOURCE_CONVERSION = register(
+- "waterSourceConversion", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_LAVA_SOURCE_CONVERSION = register(
+- "lavaSourceConversion", GameRules.Category.UPDATES, GameRules.BooleanValue.create(false)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_GLOBAL_SOUND_EVENTS = register(
+- "globalSoundEvents", GameRules.Category.MISC, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_VINES_SPREAD = register(
+- "doVinesSpread", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true)
+- );
+- public static final GameRules.Key<GameRules.BooleanValue> RULE_ENDER_PEARLS_VANISH_ON_DEATH = register(
+- "enderPearlsVanishOnDeath", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true)
+- );
++ private static final Map<GameRules.Key<?>, GameRules.Type<?>> GAME_RULE_TYPES = Maps.newTreeMap(Comparator.comparing((gamerules_gamerulekey) -> {
++ return gamerules_gamerulekey.id;
++ }));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DOFIRETICK = register("doFireTick", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_MOBGRIEFING = register("mobGriefing", GameRules.Category.MOBS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_KEEPINVENTORY = register("keepInventory", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DOMOBSPAWNING = register("doMobSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DOMOBLOOT = register("doMobLoot", GameRules.Category.DROPS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_PROJECTILESCANBREAKBLOCKS = register("projectilesCanBreakBlocks", GameRules.Category.DROPS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DOBLOCKDROPS = register("doTileDrops", GameRules.Category.DROPS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DOENTITYDROPS = register("doEntityDrops", GameRules.Category.DROPS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_COMMANDBLOCKOUTPUT = register("commandBlockOutput", GameRules.Category.CHAT, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_NATURAL_REGENERATION = register("naturalRegeneration", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DAYLIGHT = register("doDaylightCycle", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_LOGADMINCOMMANDS = register("logAdminCommands", GameRules.Category.CHAT, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_SHOWDEATHMESSAGES = register("showDeathMessages", GameRules.Category.CHAT, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_RANDOMTICKING = register("randomTickSpeed", GameRules.Category.UPDATES, GameRules.IntegerValue.create(3));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_SENDCOMMANDFEEDBACK = register("sendCommandFeedback", GameRules.Category.CHAT, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_REDUCEDDEBUGINFO = register("reducedDebugInfo", GameRules.Category.MISC, GameRules.BooleanValue.create(false, (minecraftserver, gamerules_gameruleboolean) -> {
++ int i = gamerules_gameruleboolean.get() ? 22 : 23;
++ Iterator iterator = minecraftserver.getPlayerList().getPlayers().iterator();
++
++ while (iterator.hasNext()) {
++ ServerPlayer entityplayer = (ServerPlayer) iterator.next();
++
++ entityplayer.connection.send(new ClientboundEntityEventPacket(entityplayer, (byte) i));
++ }
++
++ }));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_SPECTATORSGENERATECHUNKS = register("spectatorsGenerateChunks", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_SPAWN_RADIUS = register("spawnRadius", GameRules.Category.PLAYER, GameRules.IntegerValue.create(10));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DISABLE_ELYTRA_MOVEMENT_CHECK = register("disableElytraMovementCheck", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_MAX_ENTITY_CRAMMING = register("maxEntityCramming", GameRules.Category.MOBS, GameRules.IntegerValue.create(24));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_WEATHER_CYCLE = register("doWeatherCycle", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_LIMITED_CRAFTING = register("doLimitedCrafting", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false, (minecraftserver, gamerules_gameruleboolean) -> {
++ Iterator iterator = minecraftserver.getPlayerList().getPlayers().iterator();
++
++ while (iterator.hasNext()) {
++ ServerPlayer entityplayer = (ServerPlayer) iterator.next();
++
++ entityplayer.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.LIMITED_CRAFTING, gamerules_gameruleboolean.get() ? 1.0F : 0.0F));
++ }
++
++ }));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_MAX_COMMAND_CHAIN_LENGTH = register("maxCommandChainLength", GameRules.Category.MISC, GameRules.IntegerValue.create(65536));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_MAX_COMMAND_FORK_COUNT = register("maxCommandForkCount", GameRules.Category.MISC, GameRules.IntegerValue.create(65536));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_COMMAND_MODIFICATION_BLOCK_LIMIT = register("commandModificationBlockLimit", GameRules.Category.MISC, GameRules.IntegerValue.create(32768));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_ANNOUNCE_ADVANCEMENTS = register("announceAdvancements", GameRules.Category.CHAT, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DISABLE_RAIDS = register("disableRaids", GameRules.Category.MOBS, GameRules.BooleanValue.create(false));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DOINSOMNIA = register("doInsomnia", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_IMMEDIATE_RESPAWN = register("doImmediateRespawn", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false, (minecraftserver, gamerules_gameruleboolean) -> {
++ Iterator iterator = minecraftserver.getPlayerList().getPlayers().iterator();
++
++ while (iterator.hasNext()) {
++ ServerPlayer entityplayer = (ServerPlayer) iterator.next();
++
++ entityplayer.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.IMMEDIATE_RESPAWN, gamerules_gameruleboolean.get() ? 1.0F : 0.0F));
++ }
++
++ }));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_PLAYERS_NETHER_PORTAL_DEFAULT_DELAY = register("playersNetherPortalDefaultDelay", GameRules.Category.PLAYER, GameRules.IntegerValue.create(80));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_PLAYERS_NETHER_PORTAL_CREATIVE_DELAY = register("playersNetherPortalCreativeDelay", GameRules.Category.PLAYER, GameRules.IntegerValue.create(1));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DROWNING_DAMAGE = register("drowningDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_FALL_DAMAGE = register("fallDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_FIRE_DAMAGE = register("fireDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_FREEZE_DAMAGE = register("freezeDamage", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_PATROL_SPAWNING = register("doPatrolSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_TRADER_SPAWNING = register("doTraderSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_WARDEN_SPAWNING = register("doWardenSpawning", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_FORGIVE_DEAD_PLAYERS = register("forgiveDeadPlayers", GameRules.Category.MOBS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_UNIVERSAL_ANGER = register("universalAnger", GameRules.Category.MOBS, GameRules.BooleanValue.create(false));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_PLAYERS_SLEEPING_PERCENTAGE = register("playersSleepingPercentage", GameRules.Category.PLAYER, GameRules.IntegerValue.create(100));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_BLOCK_EXPLOSION_DROP_DECAY = register("blockExplosionDropDecay", GameRules.Category.DROPS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_MOB_EXPLOSION_DROP_DECAY = register("mobExplosionDropDecay", GameRules.Category.DROPS, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_TNT_EXPLOSION_DROP_DECAY = register("tntExplosionDropDecay", GameRules.Category.DROPS, GameRules.BooleanValue.create(false));
++ public static final GameRules.Key<GameRules.IntegerValue> RULE_SNOW_ACCUMULATION_HEIGHT = register("snowAccumulationHeight", GameRules.Category.UPDATES, GameRules.IntegerValue.create(1));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_WATER_SOURCE_CONVERSION = register("waterSourceConversion", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_LAVA_SOURCE_CONVERSION = register("lavaSourceConversion", GameRules.Category.UPDATES, GameRules.BooleanValue.create(false));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_GLOBAL_SOUND_EVENTS = register("globalSoundEvents", GameRules.Category.MISC, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_VINES_SPREAD = register("doVinesSpread", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true));
++ public static final GameRules.Key<GameRules.BooleanValue> RULE_ENDER_PEARLS_VANISH_ON_DEATH = register("enderPearlsVanishOnDeath", GameRules.Category.PLAYER, GameRules.BooleanValue.create(true));
+ private final Map<GameRules.Key<?>, GameRules.Value<?>> rules;
+
+ private static <T extends GameRules.Value<T>> GameRules.Key<T> register(String name, GameRules.Category category, GameRules.Type<T> type) {
+- GameRules.Key<T> key = new GameRules.Key<>(name, category);
+- GameRules.Type<?> type1 = GAME_RULE_TYPES.put(key, type);
+- if (type1 != null) {
++ GameRules.Key<T> gamerules_gamerulekey = new GameRules.Key<>(name, category);
++ GameRules.Type<?> gamerules_gameruledefinition1 = (GameRules.Type) GameRules.GAME_RULE_TYPES.put(gamerules_gamerulekey, type);
++
++ if (gamerules_gameruledefinition1 != null) {
+ throw new IllegalStateException("Duplicate game rule registration for " + name);
+ } else {
+- return key;
++ return gamerules_gamerulekey;
+ }
+ }
+
+@@ -211,7 +132,9 @@
+ }
+
+ public GameRules() {
+- this.rules = GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, entry -> entry.getValue().createRule()));
++ this.rules = (Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> {
++ return ((GameRules.Type) entry.getValue()).createRule();
++ }));
+ }
+
+ private GameRules(Map<GameRules.Key<?>, GameRules.Value<?>> rules) {
+@@ -219,60 +142,201 @@
+ }
+
+ public <T extends GameRules.Value<T>> T getRule(GameRules.Key<T> key) {
+- return (T)this.rules.get(key);
++ return (T) this.rules.get(key); // CraftBukkit - decompile error
+ }
+
+ public CompoundTag createTag() {
+- CompoundTag compoundTag = new CompoundTag();
+- this.rules.forEach((key, value) -> compoundTag.putString(key.id, value.serialize()));
+- return compoundTag;
++ CompoundTag nbttagcompound = new CompoundTag();
++
++ this.rules.forEach((gamerules_gamerulekey, gamerules_gamerulevalue) -> {
++ nbttagcompound.putString(gamerules_gamerulekey.id, gamerules_gamerulevalue.serialize());
++ });
++ return nbttagcompound;
+ }
+
+ private void loadFromTag(DynamicLike<?> dynamic) {
+- this.rules.forEach((key, value) -> dynamic.get(key.id).asString().result().ifPresent(value::deserialize));
++ this.rules.forEach((gamerules_gamerulekey, gamerules_gamerulevalue) -> {
++ Optional<String> optional = dynamic.get(gamerules_gamerulekey.id).asString().result(); // CraftBukkit - decompile error
++
++ Objects.requireNonNull(gamerules_gamerulevalue);
++ optional.ifPresent(gamerules_gamerulevalue::deserialize);
++ });
+ }
+
+ public GameRules copy() {
+- return new GameRules(this.rules.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, entry -> entry.getValue().copy())));
++ return new GameRules((Map) this.rules.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> {
++ return ((GameRules.Value) entry.getValue()).copy();
++ })));
+ }
+
+ public static void visitGameRuleTypes(GameRules.GameRuleTypeVisitor visitor) {
+- GAME_RULE_TYPES.forEach((key, type) -> callVisitorCap(visitor, (GameRules.Key<?>)key, (GameRules.Type<?>)type));
++ GameRules.GAME_RULE_TYPES.forEach((gamerules_gamerulekey, gamerules_gameruledefinition) -> {
++ callVisitorCap(visitor, gamerules_gamerulekey, gamerules_gameruledefinition);
++ });
+ }
+
+ private static <T extends GameRules.Value<T>> void callVisitorCap(GameRules.GameRuleTypeVisitor visitor, GameRules.Key<?> key, GameRules.Type<?> type) {
+- visitor.visit((GameRules.Key<T>) key, (GameRules.Type<T>) type);
+- ((GameRules.Type<T>) type).callVisitor(visitor, (GameRules.Key<T>) key);
++ visitor.visit((GameRules.Key<T>) key, (GameRules.Type<T>) type); // CraftBukkit - decompile error
++ ((GameRules.Type<T>) type).callVisitor(visitor, (GameRules.Key<T>) key); // CraftBukkit - decompile error
+ }
+
+ public void assignFrom(GameRules rules, @Nullable MinecraftServer server) {
+- rules.rules.keySet().forEach(key -> this.assignCap((GameRules.Key<?>)key, rules, server));
++ rules.rules.keySet().forEach((gamerules_gamerulekey) -> {
++ this.assignCap(gamerules_gamerulekey, rules, server);
++ });
+ }
+
+ private <T extends GameRules.Value<T>> void assignCap(GameRules.Key<T> key, GameRules rules, @Nullable MinecraftServer server) {
+- T rule = rules.getRule(key);
+- this.<T>getRule(key).setFrom(rule, server);
++ T t0 = rules.getRule(key);
++
++ this.getRule(key).setFrom(t0, server);
+ }
+
+ public boolean getBoolean(GameRules.Key<GameRules.BooleanValue> key) {
+- return this.getRule(key).get();
++ return ((GameRules.BooleanValue) this.getRule(key)).get();
+ }
+
+ public int getInt(GameRules.Key<GameRules.IntegerValue> key) {
+- return this.getRule(key).get();
++ return ((GameRules.IntegerValue) this.getRule(key)).get();
+ }
+
++ public static final class Key<T extends GameRules.Value<T>> {
++
++ final String id;
++ private final GameRules.Category category;
++
++ public Key(String id, GameRules.Category category) {
++ this.id = id;
++ this.category = category;
++ }
++
++ public String toString() {
++ return this.id;
++ }
++
++ public boolean equals(Object object) {
++ return this == object ? true : object instanceof GameRules.Key && ((GameRules.Key) object).id.equals(this.id);
++ }
++
++ public int hashCode() {
++ return this.id.hashCode();
++ }
++
++ public String getId() {
++ return this.id;
++ }
++
++ public String getDescriptionId() {
++ return "gamerule." + this.id;
++ }
++
++ public GameRules.Category getCategory() {
++ return this.category;
++ }
++ }
++
++ public static enum Category {
++
++ PLAYER("gamerule.category.player"), MOBS("gamerule.category.mobs"), SPAWNING("gamerule.category.spawning"), DROPS("gamerule.category.drops"), UPDATES("gamerule.category.updates"), CHAT("gamerule.category.chat"), MISC("gamerule.category.misc");
++
++ private final String descriptionId;
++
++ private Category(String s) {
++ this.descriptionId = s;
++ }
++
++ public String getDescriptionId() {
++ return this.descriptionId;
++ }
++ }
++
++ public static class Type<T extends GameRules.Value<T>> {
++
++ private final Supplier<ArgumentType<?>> argument;
++ private final Function<GameRules.Type<T>, T> constructor;
++ final BiConsumer<MinecraftServer, T> callback;
++ private final GameRules.VisitorCaller<T> visitorCaller;
++
++ Type(Supplier<ArgumentType<?>> argument, Function<GameRules.Type<T>, T> constructor, BiConsumer<MinecraftServer, T> callback, GameRules.VisitorCaller<T> visitorCaller) {
++ this.argument = argument;
++ this.constructor = constructor;
++ this.callback = callback;
++ this.visitorCaller = visitorCaller;
++ }
++
++ public RequiredArgumentBuilder<CommandSourceStack, ?> createArgument(String name) {
++ return Commands.argument(name, (ArgumentType) this.argument.get());
++ }
++
++ public T createRule() {
++ return this.constructor.apply(this); // CraftBukkit - decompile error
++ }
++
++ public void callVisitor(GameRules.GameRuleTypeVisitor visitor, GameRules.Key<T> key) {
++ this.visitorCaller.call(visitor, key, this);
++ }
++ }
++
++ public abstract static class Value<T extends GameRules.Value<T>> {
++
++ protected final GameRules.Type<T> type;
++
++ public Value(GameRules.Type<T> type) {
++ this.type = type;
++ }
++
++ protected abstract void updateFromArgument(CommandContext<CommandSourceStack> context, String paramName);
++
++ public void setFromArgument(CommandContext<CommandSourceStack> context, String paramName) {
++ this.updateFromArgument(context, paramName);
++ this.onChanged(((CommandSourceStack) context.getSource()).getServer());
++ }
++
++ public void onChanged(@Nullable MinecraftServer server) {
++ if (server != null) {
++ this.type.callback.accept(server, this.getSelf());
++ }
++
++ }
++
++ public abstract void deserialize(String value); // PAIL - private->public
++
++ public abstract String serialize();
++
++ public String toString() {
++ return this.serialize();
++ }
++
++ public abstract int getCommandResult();
++
++ protected abstract T getSelf();
++
++ protected abstract T copy();
++
++ public abstract void setFrom(T value, @Nullable MinecraftServer server);
++ }
++
++ public interface GameRuleTypeVisitor {
++
++ default <T extends GameRules.Value<T>> void visit(GameRules.Key<T> key, GameRules.Type<T> type) {}
++
++ default void visitBoolean(GameRules.Key<GameRules.BooleanValue> key, GameRules.Type<GameRules.BooleanValue> type) {}
++
++ default void visitInteger(GameRules.Key<GameRules.IntegerValue> key, GameRules.Type<GameRules.IntegerValue> type) {}
++ }
++
+ public static class BooleanValue extends GameRules.Value<GameRules.BooleanValue> {
++
+ private boolean value;
+
+ static GameRules.Type<GameRules.BooleanValue> create(boolean defaultValue, BiConsumer<MinecraftServer, GameRules.BooleanValue> changeListener) {
+- return new GameRules.Type<>(
+- BoolArgumentType::bool, type -> new GameRules.BooleanValue(type, defaultValue), changeListener, GameRules.GameRuleTypeVisitor::visitBoolean
+- );
++ return new GameRules.Type<>(BoolArgumentType::bool, (gamerules_gameruledefinition) -> {
++ return new GameRules.BooleanValue(gamerules_gameruledefinition, defaultValue);
++ }, changeListener, GameRules.GameRuleTypeVisitor::visitBoolean);
+ }
+
+ static GameRules.Type<GameRules.BooleanValue> create(boolean defaultValue) {
+- return create(defaultValue, (key, value) -> {
++ return create(defaultValue, (minecraftserver, gamerules_gameruleboolean) -> {
+ });
+ }
+
+@@ -301,7 +365,7 @@
+ }
+
+ @Override
+- protected void deserialize(String value) {
++ public void deserialize(String value) { // PAIL - protected->public
+ this.value = Boolean.parseBoolean(value);
+ }
+
+@@ -320,58 +384,24 @@
+ return new GameRules.BooleanValue(this.type, this.value);
+ }
+
+- @Override
+ public void setFrom(GameRules.BooleanValue value, @Nullable MinecraftServer server) {
+ this.value = value.value;
+ this.onChanged(server);
+ }
+ }
+
+- public static enum Category {
+- PLAYER("gamerule.category.player"),
+- MOBS("gamerule.category.mobs"),
+- SPAWNING("gamerule.category.spawning"),
+- DROPS("gamerule.category.drops"),
+- UPDATES("gamerule.category.updates"),
+- CHAT("gamerule.category.chat"),
+- MISC("gamerule.category.misc");
+-
+- private final String descriptionId;
+-
+- private Category(String descriptionId) {
+- this.descriptionId = descriptionId;
+- }
+-
+- public String getDescriptionId() {
+- return this.descriptionId;
+- }
+- }
+-
+- public interface GameRuleTypeVisitor {
+- default <T extends GameRules.Value<T>> void visit(GameRules.Key<T> key, GameRules.Type<T> type) {
+- }
+-
+- default void visitBoolean(GameRules.Key<GameRules.BooleanValue> key, GameRules.Type<GameRules.BooleanValue> type) {
+- }
+-
+- default void visitInteger(GameRules.Key<GameRules.IntegerValue> key, GameRules.Type<GameRules.IntegerValue> type) {
+- }
+- }
+-
+ public static class IntegerValue extends GameRules.Value<GameRules.IntegerValue> {
++
+ private int value;
+
+ private static GameRules.Type<GameRules.IntegerValue> create(int defaultValue, BiConsumer<MinecraftServer, GameRules.IntegerValue> changeListener) {
+- return new GameRules.Type<>(
+- IntegerArgumentType::integer,
+- type -> new GameRules.IntegerValue(type, defaultValue),
+- changeListener,
+- GameRules.GameRuleTypeVisitor::visitInteger
+- );
++ return new GameRules.Type<>(IntegerArgumentType::integer, (gamerules_gameruledefinition) -> {
++ return new GameRules.IntegerValue(gamerules_gameruledefinition, defaultValue);
++ }, changeListener, GameRules.GameRuleTypeVisitor::visitInteger);
+ }
+
+ static GameRules.Type<GameRules.IntegerValue> create(int defaultValue) {
+- return create(defaultValue, (key, value) -> {
++ return create(defaultValue, (minecraftserver, gamerules_gameruleint) -> {
+ });
+ }
+
+@@ -400,7 +430,7 @@
+ }
+
+ @Override
+- protected void deserialize(String value) {
++ public void deserialize(String value) { // PAIL - protected->public
+ this.value = safeParse(value);
+ }
+
+@@ -408,7 +438,7 @@
+ try {
+ this.value = Integer.parseInt(name);
+ return true;
+- } catch (NumberFormatException var3) {
++ } catch (NumberFormatException numberformatexception) {
+ return false;
+ }
+ }
+@@ -417,7 +447,7 @@
+ if (!strValue.isEmpty()) {
+ try {
+ return Integer.parseInt(strValue);
+- } catch (NumberFormatException var2) {
++ } catch (NumberFormatException numberformatexception) {
+ GameRules.LOGGER.warn("Failed to parse integer {}", strValue);
+ }
+ }
+@@ -440,120 +470,14 @@
+ return new GameRules.IntegerValue(this.type, this.value);
+ }
+
+- @Override
+ public void setFrom(GameRules.IntegerValue value, @Nullable MinecraftServer server) {
+ this.value = value.value;
+ this.onChanged(server);
+ }
+ }
+
+- public static final class Key<T extends GameRules.Value<T>> {
+- final String id;
+- private final GameRules.Category category;
++ private interface VisitorCaller<T extends GameRules.Value<T>> {
+
+- public Key(String id, GameRules.Category category) {
+- this.id = id;
+- this.category = category;
+- }
+-
+- @Override
+- public String toString() {
+- return this.id;
+- }
+-
+- @Override
+- public boolean equals(Object other) {
+- return this == other || other instanceof GameRules.Key && ((GameRules.Key)other).id.equals(this.id);
+- }
+-
+- @Override
+- public int hashCode() {
+- return this.id.hashCode();
+- }
+-
+- public String getId() {
+- return this.id;
+- }
+-
+- public String getDescriptionId() {
+- return "gamerule." + this.id;
+- }
+-
+- public GameRules.Category getCategory() {
+- return this.category;
+- }
+- }
+-
+- public static class Type<T extends GameRules.Value<T>> {
+- private final Supplier<ArgumentType<?>> argument;
+- private final Function<GameRules.Type<T>, T> constructor;
+- final BiConsumer<MinecraftServer, T> callback;
+- private final GameRules.VisitorCaller<T> visitorCaller;
+-
+- Type(
+- Supplier<ArgumentType<?>> argument,
+- Function<GameRules.Type<T>, T> constructor,
+- BiConsumer<MinecraftServer, T> callback,
+- GameRules.VisitorCaller<T> visitorCaller
+- ) {
+- this.argument = argument;
+- this.constructor = constructor;
+- this.callback = callback;
+- this.visitorCaller = visitorCaller;
+- }
+-
+- public RequiredArgumentBuilder<CommandSourceStack, ?> createArgument(String name) {
+- return Commands.argument(name, this.argument.get());
+- }
+-
+- public T createRule() {
+- return this.constructor.apply(this);
+- }
+-
+- public void callVisitor(GameRules.GameRuleTypeVisitor visitor, GameRules.Key<T> key) {
+- this.visitorCaller.call(visitor, key, this);
+- }
+- }
+-
+- public abstract static class Value<T extends GameRules.Value<T>> {
+- protected final GameRules.Type<T> type;
+-
+- public Value(GameRules.Type<T> type) {
+- this.type = type;
+- }
+-
+- protected abstract void updateFromArgument(CommandContext<CommandSourceStack> context, String paramName);
+-
+- public void setFromArgument(CommandContext<CommandSourceStack> context, String paramName) {
+- this.updateFromArgument(context, paramName);
+- this.onChanged(context.getSource().getServer());
+- }
+-
+- protected void onChanged(@Nullable MinecraftServer server) {
+- if (server != null) {
+- this.type.callback.accept(server, this.getSelf());
+- }
+- }
+-
+- protected abstract void deserialize(String value);
+-
+- public abstract String serialize();
+-
+- @Override
+- public String toString() {
+- return this.serialize();
+- }
+-
+- public abstract int getCommandResult();
+-
+- protected abstract T getSelf();
+-
+- protected abstract T copy();
+-
+- public abstract void setFrom(T value, @Nullable MinecraftServer server);
+- }
+-
+- interface VisitorCaller<T extends GameRules.Value<T>> {
+ void call(GameRules.GameRuleTypeVisitor visitor, GameRules.Key<T> key, GameRules.Type<T> type);
+ }
+ }