diff options
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.patch | 737 |
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); + } + } |