diff options
| author | Linnea Gräf <nea@nea.moe> | 2023-12-10 03:06:15 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-10 03:06:15 +0100 |
| commit | b01af78657ee336c3ebacacb4d6b11699ec0b957 (patch) | |
| tree | 749de38ea72472d7198b7f2ddf61989bdd9e477d /src/main/java/at/hannibal2/skyhanni/test | |
| parent | 61368c57bd36f3d6be3d072cfd9bbb24ca8fa090 (diff) | |
| download | skyhanni-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.kt | 117 |
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") + } + } + } +} |
