From 79495eccd0d890ae83a5d99ba9774e4ff2d15372 Mon Sep 17 00:00:00 2001 From: gnembon Date: Tue, 11 Jun 2019 20:24:22 -0300 Subject: [PATCH] new settings moved --- src/main/java/carpet/settings/Settings.java | 327 +++++++++++-------- src/main/java/carpet/settings/Validator.java | 7 + 2 files changed, 199 insertions(+), 135 deletions(-) diff --git a/src/main/java/carpet/settings/Settings.java b/src/main/java/carpet/settings/Settings.java index be0aab85..528b4f68 100644 --- a/src/main/java/carpet/settings/Settings.java +++ b/src/main/java/carpet/settings/Settings.java @@ -1,6 +1,11 @@ package carpet.settings; +import carpet.CarpetServer; +import carpet.fakes.MinecraftServer_motdInterface; +import carpet.utils.Messenger; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.dedicated.DedicatedServer; import static carpet.settings.RuleCategory.BUGFIX; import static carpet.settings.RuleCategory.COMMANDS; @@ -28,10 +33,7 @@ public class Settings ) public static boolean portalSuffocationFix = false; - @Rule( - desc = "Gbhs sgnf sadsgras fhskdpri!", - category = EXPERIMENTAL, - ) + @Rule(desc = "Gbhs sgnf sadsgras fhskdpri!", category = EXPERIMENTAL) public static boolean superSecretSetting = false; @Rule( @@ -41,23 +43,16 @@ public class Settings ) public static boolean portalCreativeDelay = false; - - @Rule( - desc = "Dropping entire stacks works also from on the crafting UI result slot", - category = {BUGFIX, SURVIVAL} - ) + @Rule(desc = "Dropping entire stacks works also from on the crafting UI result slot", category = {BUGFIX, SURVIVAL}) public static boolean ctrlQCraftingFix = false; - @Rule( desc = "Parrots don't get of your shoulders until you receive damage", - extra = "", category = {SURVIVAL, FEATURE}, validate = Validator.WIP.class ) public static boolean persistentParrots = false; - /*@Rule( desc = "Mobs growing up won't glitch into walls or go through fences", category = BUGFIX, @@ -65,7 +60,6 @@ public class Settings ) public static boolean growingUpWallJump = false; - @Rule( desc = "Won't let mobs glitch into blocks when reloaded.", extra = "Can cause slight differences in mobs behaviour", @@ -75,16 +69,12 @@ public class Settings public static boolean reloadSuffocationFix = false; */ - - @Rule( desc = "Players absorb XP instantly, without delay", category = CREATIVE ) public static boolean xpNoCooldown = false; - @Rule( desc = "XP orbs combine with other into bigger orbs", category = FEATURE ) public static boolean combineXPOrbs = false; - @Rule( desc = "Empty shulker boxes can stack to 64 when dropped on the ground", extra = "To move them around between inventories, use shift click to move entire stacks", @@ -92,7 +82,6 @@ public class Settings ) public static boolean stackableShulkerBoxes = false; - @Rule( desc = "Explosions won't destroy blocks", category = CREATIVE ) public static boolean explosionNoBlockDamage = false; @@ -107,21 +96,13 @@ public class Settings ) public static boolean fastRedstoneDust = false; - @Rule( - desc = "Only husks spawn in desert temples", - category = FEATURE, - validate = Validator.WIP.class - ) + @Rule(desc = "Only husks spawn in desert temples", category = FEATURE, validate = Validator.WIP.class) public static boolean huskSpawningInTemples = false; @Rule( desc = "Shulkers will respawn in end cities", category = FEATURE ) public static boolean shulkerSpawningInEndCities = false; - @Rule( - desc = "Entities pushed or moved into unloaded chunks no longer disappear", - category = {EXPERIMENTAL, BUGFIX}, - validate = Validator.WIP.class - ) + @Rule(desc = "Entities pushed or moved into unloaded chunks no longer disappear", category = {EXPERIMENTAL, BUGFIX}, validate = Validator.WIP.class) public static boolean unloadedEntityFix = false; @Rule( desc = "TNT doesn't update when placed against a power source", category = CREATIVE ) @@ -135,11 +116,7 @@ public class Settings ) public static boolean antiCheatSpeed = false; - @Rule( - desc = "Pistons, droppers and dispensers react if block above them is powered", - category = CREATIVE, - validate = Validator.WIP.class - ) + @Rule(desc = "Pistons, droppers and dispensers react if block above them is powered", category = CREATIVE, validate = Validator.WIP.class) public static boolean quasiConnectivity = true; @Rule( @@ -180,134 +157,214 @@ public class Settings @Rule( desc = "summoning a lightning bolt has all the side effects of natural lightning", category = CREATIVE ) public static boolean summonNaturalLightning = false; + @Rule(desc = "Enables /spawn command for spawn tracking", category = COMMANDS) + public static boolean commandSpawn = true; + + @Rule(desc = "Enables /tick command to control game clocks", category = COMMANDS) + public static boolean commandTick = true; + + @Rule(desc = "Enables /log command to monitor events in the game via chat and overlays", category = COMMANDS) + public static boolean commandLog = true; + @Rule( - desc = "", - category = CREATIVE, - validate = Validator.WIP.class + desc = "Enables /distance command to measure in game distance between points", + extra = "Also enables brown carpet placement action if 'carpets' rule is turned on as well", + category = COMMANDS ) - public static boolean aaa = false; + public static boolean commandDistance = true; @Rule( - desc = "", - category = CREATIVE, - validate = Validator.WIP.class + desc = "Enables /info command for blocks", + extra = { + "Also enables gray carpet placement action", + "if 'carpets' rule is turned on as well" + }, + category = COMMANDS ) - public static boolean aaa = false; + public static boolean commandInfo = true; @Rule( - desc = "", - category = CREATIVE, - validate = Validator.WIP.class - ) - public static boolean aaa = false; - - @Rule( - desc = "", - category = CREATIVE, - validate = Validator.WIP.class - ) - public static boolean aaa = false; - - @Rule( - desc = "", - category = CREATIVE, - validate = Validator.WIP.class - ) - public static boolean aaa = false; - - @Rule( - desc = "", - category = CREATIVE, - validate = Validator.WIP.class - ) - public static boolean aaa = false; - - - - - - - - - - - - - - - - - - @Rule( - desc = "Enables /c and /s commands to quickly switch between camera and survival modes", - extra = "/c and /s commands are available to all players regardless of their permission levels", - category = COMMANDS + desc = "Enables /c and /s commands to quickly switch between camera and survival modes", + extra = "/c and /s commands are available to all players regardless of their permission levels", + category = COMMANDS ) public static boolean commandCameramode = true; + @Rule( + desc = "Enables /perimeterinfo command", + extra = "... that scans the area around the block for potential spawnable spots", + category = COMMANDS + ) + public static boolean commandPerimeterInfo = true; + + @Rule(desc = "Enables /draw commands", extra = "... allows for drawing simple shapes", category = COMMANDS) + public static boolean commandDraw = true; + + @Rule(desc = "Enables /script command", extra = "an in-game scripting API", category = COMMANDS) + public static boolean commandScript = true; + + @Rule(desc = "Enables /player command to control/spawn players", category = COMMANDS, validate = Validator.WIP.class) + public static boolean commandPlayer = true; + + @Rule(desc = "Placing carpets may issue carpet commands for non-op players", category = SURVIVAL) + public static boolean carpets = false; + + @Rule( + desc = "Pistons, Glass and Sponge can be broken faster with their appropriate tools", + category = SURVIVAL, + validate = Validator.WIP.class + ) + public static boolean missingTools = false; + + @Rule(desc = "Alternative, persistent caching strategy for nether portals", category = {SURVIVAL, CREATIVE}) + public static boolean portalCaching = false; + + @Rule(desc = "Permanent fires don't schedule random updates", category = OPTIMIZATIONS, validate = Validator.WIP.class) + public static boolean calmNetherFires = false; + @Rule(desc = "fill/clone/setblock and structure blocks cause block updates", category = CREATIVE) public static boolean fillUpdates = true; - - private static class CheckFillLimitLimits extends Validator - { - @Override - Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String typedString) - { - return newValue < 20000000 ? newValue : null; + private class PushLimitLimits extends Validator { + @Override Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) { + return (newValue>0 && newValue < 1024) ? newValue : null; } } @Rule( - desc = "Customizable fill/clone volume limit", - options = {"32768", "250000", "1000000"}, - validate = {Validator.POSITIVE_NUMBER.class, CheckFillLimitLimits.class}, - category = {CREATIVE, "skyblock"} + desc = "Customizable piston push limit", + options = {"10", "12", "14", "100"}, + category = CREATIVE, + validate = PushLimitLimits.class + ) + public static int pushLimit = 12; + + @Rule( + desc = "Customizable powered rail power range", + options = {"9", "15", "30"}, + category = CREATIVE, + validate = PushLimitLimits.class + ) + public static int railPowerLimit = 9; + + private class FillLimitLimits extends Validator { + @Override Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) { + return (newValue>0 && newValue < 20000000) ? newValue : null; + } + } + @Rule( + desc = "Customizable fill/clone volume limit", + options = {"32768", "250000", "1000000"}, + category = CREATIVE, + validate = FillLimitLimits.class ) public static int fillLimit = 32768; @Rule( - desc = "Hoppers pointing to wool will count items passing through them", - extra = { - "Enables /counter command, and actions while placing red and green carpets on wool blocks", - "Use /counter reset to reset the counter, and /counter to query", - "In survival, place green carpet on same color wool to query, red to reset the counters", - "Counters are global and shared between players, 16 channels available", - "Items counted are destroyed, count up to one stack per tick per hopper" - }, - category = COMMANDS + desc = "Customizable maximal entity collision limits, 0 for no limits", + options = {"0", "1", "20"}, + category = OPTIMIZATIONS, + validate = Validator.NONNEGATIVE_NUMBER.class ) - public static boolean hopperCounters = false; + public static int maxEntityCollisions = 0; - @Rule(desc = "Explosions won't destroy blocks", category = CREATIVE) - public static boolean explosionNoBlockDamage = false; + @Rule(desc = "One player is required on the server to cause night to pass", category = SURVIVAL) + public static boolean onePlayerSleeping = false; + + private class SetMotd extends Validator { + @Override String validate(ServerCommandSource source, ParsedRule currentRule, String newValue, String string) { + customMOTD = newValue; // accelerate a smidge + ((MinecraftServer_motdInterface) CarpetServer.minecraft_server).checkMOTD(); + return newValue; + } + } + @Rule( + desc = "Sets a different motd message on client trying to connect to the server", + extra = "use '_' to use the startup setting from server.properties", + options = "_", + category = CREATIVE, + validate = {SetMotd.class, Validator.WIP.class} // for some reason doesn't yet work + ) + public static String customMOTD = "_"; + + @Rule(desc = "Cactus in dispensers rotates blocks.", extra = "Rotates block anti-clockwise if possible", category = FEATURE) + public static boolean rotatorBlock = false; + + private class ViewDistanceValidator extends Validator + { + @Override Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) + { + if (newValue < 0 || newValue > 32) + { + Messenger.m(source, "r view distance has to be between 0 and 32"); + return null; + } + MinecraftServer server = source.getMinecraftServer(); + + if (server.isDedicated()) + { + int vd = (newValue >= 2)?newValue:((DedicatedServer) server).getProperties().viewDistance; + if (vd != CarpetServer.minecraft_server.getPlayerManager().getViewDistance()) + CarpetServer.minecraft_server.getPlayerManager().setViewDistance(vd); + return newValue; + } + else + { + Messenger.m(source, "r view distance can only be changed on a server"); + return 0; + } + } + } + @Rule( + desc = "Changes the view distance of the server.", + extra = "Set to 0 to not override the value in server settings.", + options = {"0", "12", "16", "32"}, + category = CREATIVE, + validate = ViewDistanceValidator.class + ) + public static int viewDistance = 0; + + private class DisableSpawnChunksValidator extends Validator { + @Override Boolean validate(ServerCommandSource source, ParsedRule currentRule, Boolean newValue, String string) { + if (!newValue) + Messenger.m(source, "w Spawn chunks re-enabled. Visit spawn to load them?"); + return newValue; + } + } + @Rule( + desc = "Allows spawn chunks to unload", + category = CREATIVE, + validate = {Validator.WIP.class, DisableSpawnChunksValidator.class} + ) + public static boolean disableSpawnChunks = false; + + private class KelpLimit extends Validator { + @Override Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) { + return (newValue>=0 && newValue <=25)?newValue:null; + } + } + @Rule( + desc = "limits growth limit of newly naturally generated kelp to this amount of blocks", + options = {"0", "2", "25"}, + category = FEATURE, + validate = KelpLimit.class + ) + public static int kelpGenerationGrowthLimit = 25; + + @Rule(desc = "Coral structures will grow with bonemeal from coral plants", category = FEATURE) + public static boolean renewableCoral = false; + + @Rule(desc = "fixes block placement rotation issue when player rotates quickly while placing blocks", category = BUGFIX) + public static boolean placementRotationFix = false; @Rule( - desc = "Silverfish drop a gravel item when breaking out of a block", - category = {FEATURE, EXPERIMENTAL} + desc = "Fixes leads breaking/becoming invisible in unloaded chunks", + extra = "You may still get visibly broken leash links on the client side, but server side the link is still there.", + category = BUGFIX, + validate = Validator.WIP.class ) - public static boolean silverFishDropGravel = false; + public static boolean leadFix = false; - @Rule(desc = "Shulkers will respawn in end cities", category = {FEATURE, EXPERIMENTAL}) - public static boolean shulkerSpawningInEndCities = false; - - @Rule( - desc = "Portals won't let a creative player go through instantly", - extra = "Holding obsidian in either hand won't let you through at all", - category = CREATIVE - ) - public static boolean portalCreativeDelay = false; - - @Rule(desc = "Pistons can push block entities, like hoppers, chests etc.", category = {FEATURE, EXPERIMENTAL}) - public static boolean movableTileEntities = false; - - @Rule( - desc = "Empty shulker boxes can stack to 64 when dropped on the ground", - extra = "To move them around between inventories, use shift click to move entire stacks", - category = SURVIVAL - ) - public static boolean stackableShulkerBoxes = false; - - @Rule(desc = "Optimizes spawning", category = {OPTIMIZATIONS, EXPERIMENTAL}) + @Rule(desc = "Spawning requires much less CPU and Memory", category = OPTIMIZATIONS) public static boolean lagFreeSpawning = false; } diff --git a/src/main/java/carpet/settings/Validator.java b/src/main/java/carpet/settings/Validator.java index a950c190..dc924a3e 100644 --- a/src/main/java/carpet/settings/Validator.java +++ b/src/main/java/carpet/settings/Validator.java @@ -62,4 +62,11 @@ public abstract class Validator { return newValue; } } + + public static class NONNEGATIVE_NUMBER extends Validator { + @Override + public T validate(ServerCommandSource source, ParsedRule currentRule, T newValue, String string) { + return newValue.doubleValue() >= 0 ? newValue : null; + } + } }