summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/test
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2023-12-10 03:06:15 +0100
committerGitHub <noreply@github.com>2023-12-10 03:06:15 +0100
commitb01af78657ee336c3ebacacb4d6b11699ec0b957 (patch)
tree749de38ea72472d7198b7f2ddf61989bdd9e477d /src/main/java/at/hannibal2/skyhanni/test
parent61368c57bd36f3d6be3d072cfd9bbb24ca8fa090 (diff)
downloadskyhanni-b01af78657ee336c3ebacacb4d6b11699ec0b957.tar.gz
skyhanni-b01af78657ee336c3ebacacb4d6b11699ec0b957.tar.bz2
skyhanni-b01af78657ee336c3ebacacb4d6b11699ec0b957.zip
Add region selector (#732)
Added WorldEdit region selection preview support. #732
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/test')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/test/WorldEdit.kt117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/test/WorldEdit.kt b/src/main/java/at/hannibal2/skyhanni/test/WorldEdit.kt
new file mode 100644
index 000000000..3dced63f7
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/test/WorldEdit.kt
@@ -0,0 +1,117 @@
+package at.hannibal2.skyhanni.test
+
+import at.hannibal2.skyhanni.data.ClickType
+import at.hannibal2.skyhanni.events.BlockClickEvent
+import at.hannibal2.skyhanni.events.withAlpha
+import at.hannibal2.skyhanni.utils.ClipboardUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.RenderUtils
+import at.hannibal2.skyhanni.utils.RenderUtils.expandBlock
+import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getItemId
+import net.minecraft.util.AxisAlignedBB
+import net.minecraft.util.BlockPos
+import net.minecraftforge.client.event.RenderWorldLastEvent
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import java.awt.Color
+
+object WorldEdit {
+ var leftPos = null as BlockPos?
+ var rightPos = null as BlockPos?
+
+ fun funAABB(left: BlockPos, right: BlockPos): AxisAlignedBB {
+ return AxisAlignedBB(
+ minOf(left.x, left.x + 1, right.x, right.x + 1).toDouble(),
+ minOf(left.y, left.y + 1, right.y, right.y + 1).toDouble(),
+ minOf(left.z, left.z + 1, right.z, right.z + 1).toDouble(),
+ maxOf(left.x, left.x + 1, right.x, right.x + 1).toDouble(),
+ maxOf(left.y, left.y + 1, right.y, right.y + 1).toDouble(),
+ maxOf(left.z, left.z + 1, right.z, right.z + 1).toDouble(),
+ )
+ }
+
+ val aabb
+ get() = leftPos?.let { l ->
+ rightPos?.let { r ->
+ funAABB(l, r)
+ }
+ }
+
+ fun copyToClipboard() {
+ ClipboardUtils.copyToClipboard(generateCodeSnippet())
+ }
+
+ fun generateCodeSnippet(): String {
+ var text = ""
+ leftPos?.let { text += "val redLeft = net.minecraft.util.BlockPos(${it.x}, ${it.y}, ${it.z})\n" }
+ rightPos?.let { text += "val blueRight = net.minecraft.util.BlockPos(${it.x}, ${it.y}, ${it.z})\n" }
+ aabb?.let { text += "val aabb = net.minecraft.util.AxisAlignedBB(${it.minX}, ${it.minY}, ${it.minZ}, ${it.maxX}, ${it.maxY}, ${it.maxZ})\n" }
+ return text
+ }
+
+ @SubscribeEvent
+ fun onBlockClick(event: BlockClickEvent) {
+ if (event.itemInHand?.getItemId() != "WOOD_AXE") return
+ if (event.clickType == ClickType.LEFT_CLICK) {
+ leftPos = event.position.toBlockPos()
+ } else if (event.clickType == ClickType.RIGHT_CLICK) {
+ rightPos = event.position.toBlockPos()
+ }
+ }
+
+
+ @SubscribeEvent
+ fun onWorldChange(event: WorldEvent.Load) {
+ leftPos = null
+ rightPos = null
+ }
+
+ @SubscribeEvent
+ fun onRenderWorldLast(event: RenderWorldLastEvent) {
+ leftPos?.let { l ->
+ RenderUtils.drawWireframeBoundingBox_nea(
+ funAABB(l, l).expandBlock(),
+ Color.RED,
+ event.partialTicks
+ )
+ }
+ rightPos?.let { r ->
+ RenderUtils.drawWireframeBoundingBox_nea(
+ funAABB(r, r).expandBlock(),
+ Color.BLUE,
+ event.partialTicks
+ )
+ }
+ aabb?.let {
+ RenderUtils.drawFilledBoundingBox_nea(
+ it.expandBlock(),
+ Color(Color.CYAN.withAlpha(60), true),
+ partialTicks = event.partialTicks,
+ renderRelativeToCamera = false
+ )
+ }
+ }
+
+ fun command(it: Array<String>) {
+ when (it.firstOrNull()) {
+ null, "help" -> {
+ LorenzUtils.chat("Use a wood axe and left/right click to select a region in the world. Then use /shworldedit copy or /shworldedit reset.")
+ }
+
+ "copy" -> {
+ copyToClipboard()
+ LorenzUtils.chat("Copied text to clipboard.")
+ }
+
+ "reset" -> {
+ leftPos = null
+ rightPos = null
+ LorenzUtils.chat("Reset selected region")
+ }
+
+ else -> {
+ LorenzUtils.chat("Unknown subcommand")
+ }
+ }
+ }
+}