From fc59a1d0b210e2168e07de9475e79fe7e4c53b33 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 3 Jun 2022 00:54:50 +0900 Subject: [PATCH] added Gamerules to the GameWorld --- .../torvald/terrarum/console/CommandDict.kt | 4 +- src/net/torvald/terrarum/console/GetGR.kt | 58 +++++++++++++++++ src/net/torvald/terrarum/console/SetGR.kt | 64 +++++++++++++++++++ .../torvald/terrarum/gameactors/ActorValue.kt | 2 +- .../torvald/terrarum/gameworld/GameWorld.kt | 2 + 5 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 src/net/torvald/terrarum/console/GetGR.kt create mode 100644 src/net/torvald/terrarum/console/SetGR.kt diff --git a/src/net/torvald/terrarum/console/CommandDict.kt b/src/net/torvald/terrarum/console/CommandDict.kt index f78129ed7..2b7652c0c 100644 --- a/src/net/torvald/terrarum/console/CommandDict.kt +++ b/src/net/torvald/terrarum/console/CommandDict.kt @@ -27,7 +27,9 @@ object CommandDict { "SetLocale", "TakeScreenshot", "Unpause", - "Version" + "Version", + "SetGR", + "GetGR", ) init { diff --git a/src/net/torvald/terrarum/console/GetGR.kt b/src/net/torvald/terrarum/console/GetGR.kt new file mode 100644 index 000000000..ed5d5071f --- /dev/null +++ b/src/net/torvald/terrarum/console/GetGR.kt @@ -0,0 +1,58 @@ +package net.torvald.terrarum.console + +import net.torvald.terrarum.* +import net.torvald.terrarum.modulebasegame.console.GetAV.isNum + +/** + * Created by minjaesong on 2022-06-03. + */ +internal object GetGR : ConsoleCommand { + override fun execute(args: Array) { + val gameRules = INGAME.world.gameRules + + // check if args[1] is number or not + if (args.size > 1 && !args[1].isNum()) { // args[1] is Gamerule name + gameRules[args[1]].let { + if (it != null) { + Echo("${ccW}Gamerule $ccM${args[1]} $ccW= " + + ccG + + it + + " $ccO" + + it.javaClass.simpleName + ) + println("[GetGR] Gamerule ${args[1]} = " + + it + + " " + + it.javaClass.simpleName + ) + } + else { + EchoError("No such Gamerule defined: ${args[1]}") + println("[GetGR] No such Gamerule defined: ${args[1]}") + } + } + + } + else { + // args[1] is actor ID + val keyset = gameRules.keySet + + Echo("$ccW== List of$ccY Gamerules $ccW==") + println("[GetGR] == List of Gamerules ==") + if (keyset.isEmpty()) { + Echo("$ccK(nothing)") + println("[GetGR] (nothing)") + } + else { + keyset.forEach { elem -> + Echo("$ccM$elem $ccW= $ccG${gameRules[elem as String]}") + println("[GetGR] $elem = ${gameRules[elem]}") + } + } + } + } + + override fun printUsage() { + Echo("Usage: getgr ") + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/console/SetGR.kt b/src/net/torvald/terrarum/console/SetGR.kt new file mode 100644 index 000000000..ec26fb53c --- /dev/null +++ b/src/net/torvald/terrarum/console/SetGR.kt @@ -0,0 +1,64 @@ +package net.torvald.terrarum.console + +import net.torvald.terrarum.INGAME +import net.torvald.terrarum.ccG +import net.torvald.terrarum.ccM +import net.torvald.terrarum.ccW +import net.torvald.terrarum.modulebasegame.console.SetAV.isNum + +/** + * Created by minjaesong on 2022-06-03. + */ +internal object SetGR : ConsoleCommand { + override fun execute(args: Array) { + fun parseAVInput(arg: String): Any { + var inputval: Any + + try { + inputval = Integer(arg) // try for integer + } + catch (e: NumberFormatException) { + + try { + inputval = arg.toDouble() // try for double + } + catch (ee: NumberFormatException) { + if (arg.equals("__true", ignoreCase = true)) { + inputval = true + } + else if (arg.equals("__false", ignoreCase = true)) { + inputval = false + } + else { + inputval = arg // string if not number + } + } + } + + return inputval + } + + // setav + if (args.size != 3) { + printUsage() + } + else if (args.size == 3) { + val newValue = parseAVInput(args[2]) + + // check if av is number + if (args[1].isNum()) { + EchoError("Illegal Gamerule ${args[1]}: Gamerule cannot be a number.") + System.err.println("[SetGR] Illegal Gamerule ${args[1]}: Gamerule cannot be a number.") + return + } + + INGAME.world.gameRules[args[1]] = newValue + Echo("${ccW}Set Gamerule $ccM${args[1]} ${ccW}to $ccG$newValue") + println("[SetGR] set Gamerule '${args[1]}' to '$newValue'.") + } + } + + override fun printUsage() { + Echo("Usage: setgr ") + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/ActorValue.kt b/src/net/torvald/terrarum/gameactors/ActorValue.kt index ead6e15be..994be76f5 100644 --- a/src/net/torvald/terrarum/gameactors/ActorValue.kt +++ b/src/net/torvald/terrarum/gameactors/ActorValue.kt @@ -36,4 +36,4 @@ class ActorValue : KVHashMap { fun clone(newActor: Actor): ActorValue { return ActorValue(newActor, hashMap) } -} \ No newline at end of file +} diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index 6c41181b3..b559134dd 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -65,6 +65,8 @@ open class GameWorld() : Disposable { /** Creation time for this world, NOT the entire savegame */ internal var totalPlayTime = 0L // cumulative value for this very world + val gameRules = KVHashMap() // spawn points, creation/lastplay/totalplaytimes are NOT stored to gameRules + init { creationTime = App.getTIME_T() }