package com.github.itzilly.sbt.features import com.github.itzilly.sbt.setClipboard import com.github.itzilly.sbt.util.Chatterbox import com.github.itzilly.sbt.util.SimpleChatMsg import com.google.gson.Gson import net.minecraft.client.Minecraft import net.minecraft.client.settings.KeyBinding import net.minecraftforge.fml.client.registry.ClientRegistry import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.InputEvent import org.lwjgl.input.Keyboard import kotlin.math.round object RouteBuilder { var addNodeKeybind: KeyBinding var deleteLastNodeKeybind: KeyBinding var finishRouteKeybind: KeyBinding var nodes: ArrayList = ArrayList() init { addNodeKeybind = KeyBinding("key.addNode", Keyboard.KEY_ADD, "key.categories.sbt") ClientRegistry.registerKeyBinding(addNodeKeybind) deleteLastNodeKeybind = KeyBinding("key.removeLastNode", Keyboard.KEY_MINUS, "key.categories.sbt") ClientRegistry.registerKeyBinding(deleteLastNodeKeybind) finishRouteKeybind = KeyBinding("key.finishRoute", Keyboard.KEY_F4, "key.categories.sbt") ClientRegistry.registerKeyBinding(finishRouteKeybind) } @SubscribeEvent fun onKeyInput(event: InputEvent.KeyInputEvent) { if (addNodeKeybind.isPressed) { val mc = Minecraft.getMinecraft() val x = round(mc.thePlayer.posX - 0.5).toInt() val y = round(mc.thePlayer.posY).toInt() val z = round(mc.thePlayer.posZ - 0.5).toInt() if (nodeExists(x, y, z)) { Chatterbox.say(SimpleChatMsg("Node already exists!").red()) } else { addNode(x, y, z) Chatterbox.say("This is a string") } } if (deleteLastNodeKeybind.isPressed) { val wasRemoved = nodes.removeLastOrNull() if (wasRemoved == null) { val msg = SimpleChatMsg("There isn't a node to delete!") Chatterbox.say(msg.red()) } else { val msg = SimpleChatMsg("Removed previous node") Chatterbox.say(msg.green()) } } if (finishRouteKeybind.isPressed) { if (nodes.size == 0) { val msg = SimpleChatMsg("There aren't any nodes to copy!") Chatterbox.say(msg.red()) } else { val jsonString = Gson().toJson(nodes) val msg = SimpleChatMsg("String copied to clipboard!") setClipboard(jsonString) Chatterbox.say(msg.green()) } } } fun addNode(x: Int, y: Int, z: Int) { nodes.add(RouteNode(x, y, z, 0u, 1u, 0u, NodeOptions("${nodes.size + 1}"))) } fun addNode(x: Int, y: Int, z: Int, r: UByte, g: UByte, b: UByte) { nodes.add(RouteNode(x, y, z, r, g, b, NodeOptions("${nodes.size + 1}"))) } } data class RouteNode( val x: Int, val y: Int, val z: Int, val r: UByte, val g: UByte, val b: UByte, val options: NodeOptions ) data class NodeOptions( val name: String ) fun nodeExists(x: Int, y: Int, z: Int): Boolean { return RouteBuilder.nodes.any { it.x == x && it.y == y && it.z == z } }