Skip to content

Commit 17ef8c0

Browse files
committed
Complex setting types
1 parent 1b4c700 commit 17ef8c0

File tree

8 files changed

+124
-2
lines changed

8 files changed

+124
-2
lines changed

common/src/main/kotlin/com/lambda/Lambda.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ package com.lambda
22

33
import com.google.gson.Gson
44
import com.google.gson.GsonBuilder
5+
import com.lambda.config.serializer.BlockPosSerializer
6+
import com.lambda.config.serializer.BlockSerializer
57
import com.lambda.event.events.KeyPressEvent
68
import com.lambda.event.listener.SafeListener.Companion.listener
79
import com.lambda.module.modules.BoringModule
810
import com.lambda.module.modules.BoringModule2
911
import com.lambda.task.tasks.HelloWorldTask
1012
import com.lambda.threading.taskContext
13+
import net.minecraft.block.Block
1114
import net.minecraft.client.MinecraftClient
15+
import net.minecraft.util.math.BlockPos
1216
import org.apache.logging.log4j.LogManager
1317
import org.apache.logging.log4j.Logger
1418
import org.lwjgl.glfw.GLFW
@@ -21,7 +25,11 @@ object Lambda {
2125

2226
val LOG: Logger = LogManager.getLogger(SYMBOL)
2327
val mc: MinecraftClient = MinecraftClient.getInstance()
24-
val gson: Gson = GsonBuilder().setPrettyPrinting().create()
28+
val gson: Gson = GsonBuilder()
29+
.setPrettyPrinting()
30+
.registerTypeAdapter(BlockPos::class.java, BlockPosSerializer)
31+
.registerTypeAdapter(Block::class.java, BlockSerializer)
32+
.create()
2533

2634
init {
2735
BoringModule

common/src/main/kotlin/com/lambda/config/Configurable.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ import com.lambda.config.settings.collections.MapSetting
99
import com.lambda.config.settings.collections.SetSetting
1010
import com.lambda.config.settings.comparable.BooleanSetting
1111
import com.lambda.config.settings.comparable.EnumSetting
12+
import com.lambda.config.settings.complex.BlockPosSetting
13+
import com.lambda.config.settings.complex.BlockSetting
1214
import com.lambda.config.settings.numeric.*
1315
import com.lambda.util.Nameable
16+
import net.minecraft.block.Block
17+
import net.minecraft.util.math.BlockPos
1418

1519
/**
1620
* Holds a set of [AbstractSetting]s that are associated with the [name] of the [Configurable].
@@ -156,4 +160,22 @@ abstract class Configurable(configuration: Configuration) : Jsonable, Nameable {
156160
) = ShortSetting(name, defaultValue, range, step, visibility, description).also {
157161
settings.add(it)
158162
}
163+
164+
fun setting(
165+
name: String,
166+
defaultValue: BlockPos,
167+
visibility: () -> Boolean = { true },
168+
description: String = ""
169+
) = BlockPosSetting(name, defaultValue, visibility, description).also {
170+
settings.add(it)
171+
}
172+
173+
fun setting(
174+
name: String,
175+
defaultValue: Block,
176+
visibility: () -> Boolean = { true },
177+
description: String = ""
178+
) = BlockSetting(name, defaultValue, visibility, description).also {
179+
settings.add(it)
180+
}
159181
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.lambda.config.serializer
2+
3+
import com.google.gson.*
4+
import net.minecraft.util.math.BlockPos
5+
import java.lang.reflect.Type
6+
7+
object BlockPosSerializer : JsonSerializer<BlockPos>, JsonDeserializer<BlockPos> {
8+
override fun serialize(
9+
src: BlockPos?,
10+
typeOfSrc: Type?,
11+
context: JsonSerializationContext?
12+
): JsonElement =
13+
src?.let {
14+
JsonObject().apply {
15+
addProperty("x", it.x)
16+
addProperty("y", it.y)
17+
addProperty("z", it.z)
18+
}
19+
} ?: JsonNull.INSTANCE
20+
21+
override fun deserialize(
22+
json: JsonElement?,
23+
typeOfT: Type?,
24+
context: JsonDeserializationContext?
25+
): BlockPos =
26+
json?.asJsonObject?.let {
27+
BlockPos(it["x"].asInt, it["y"].asInt, it["z"].asInt)
28+
} ?: BlockPos.ORIGIN
29+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.lambda.config.serializer
2+
3+
import com.google.gson.*
4+
import net.minecraft.block.Block
5+
import net.minecraft.registry.Registries
6+
import net.minecraft.util.Identifier
7+
import java.lang.reflect.Type
8+
9+
object BlockSerializer : JsonSerializer<Block>, JsonDeserializer<Block> {
10+
override fun serialize(
11+
src: Block?,
12+
typeOfSrc: Type?,
13+
context: JsonSerializationContext?,
14+
): JsonElement =
15+
src?.let {
16+
JsonPrimitive(Registries.BLOCK.getId(it).toString())
17+
} ?: JsonNull.INSTANCE
18+
19+
override fun deserialize(
20+
json: JsonElement?,
21+
typeOfT: Type?,
22+
context: JsonDeserializationContext?,
23+
): Block =
24+
Registries.BLOCK.getOrEmpty(Identifier(json?.asString)).orElseThrow()
25+
}

common/src/main/kotlin/com/lambda/config/settings/collections/ListSetting.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ package com.lambda.config.settings.collections
33
import com.google.gson.JsonElement
44
import com.google.gson.reflect.TypeToken
55
import com.lambda.Lambda
6+
import com.lambda.Lambda.LOG
7+
import com.lambda.Lambda.gson
68
import com.lambda.config.AbstractSetting
9+
import java.lang.reflect.Type
710

811
class ListSetting<T>(
912
override val name: String,
@@ -17,6 +20,6 @@ class ListSetting<T>(
1720
) {
1821
override fun loadFromJson(serialized: JsonElement) {
1922
val listType = object : TypeToken<List<T>>() {}.type
20-
value = Lambda.gson.fromJson(serialized, listType)
23+
value = gson.fromJson(serialized, listType)
2124
}
2225
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.lambda.config.settings.complex
2+
3+
import com.lambda.config.AbstractSetting
4+
import net.minecraft.util.math.BlockPos
5+
6+
class BlockPosSetting(
7+
override val name: String,
8+
defaultValue: BlockPos,
9+
visibility: () -> Boolean,
10+
description: String
11+
) : AbstractSetting<BlockPos>(
12+
defaultValue,
13+
visibility,
14+
description
15+
)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.lambda.config.settings.complex
2+
3+
import com.lambda.config.AbstractSetting
4+
import net.minecraft.block.Block
5+
6+
class BlockSetting(
7+
override val name: String,
8+
defaultValue: Block,
9+
visibility: () -> Boolean,
10+
description: String
11+
) : AbstractSetting<Block>(
12+
defaultValue,
13+
visibility,
14+
description
15+
)

common/src/main/kotlin/com/lambda/module/modules/BoringModule.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import com.lambda.event.events.TickEvent
44
import com.lambda.event.listener.SafeListener.Companion.listener
55
import com.lambda.module.Module
66
import com.lambda.module.tag.ModuleTag
7+
import net.minecraft.block.Blocks
8+
import net.minecraft.util.math.BlockPos
79

810
object BoringModule : Module(
911
name = "BoringModule",
@@ -16,6 +18,9 @@ object BoringModule : Module(
1618
private val boringEnemies by setting("Boring Enemies Set", setOf("Sauron", "Voldemort", "Darth Vader", "The Joker"))
1719
private val boringMap by setting("Boring Map", mapOf("One" to 1, "Two" to 2, "Three" to 3, "Four" to 4, "Five" to 5))
1820
private val boringEnum by setting("Boring Enum", BoringEnum.ONE)
21+
private val blockSetting by setting("Boring Block", Blocks.STONE)
22+
private val blockPosSetting by setting("Boring BlockPos", BlockPos(420, 69, 1337))
23+
// private val blockListSetting by setting("Boring Block List", listOf(Blocks.STONE, Blocks.DIRT, Blocks.GRASS_BLOCK))
1924

2025
enum class BoringEnum {
2126
ONE, TWO, THREE, FOUR, FIVE

0 commit comments

Comments
 (0)