### Minecraft Version: `1.19.2` ### Essential Client Version: `1.3.1` ### Arucas Version: `2.0.1` ### Script: ```kt // WorldEditCUI import * from Minecraft; import Direction from minecraft.PosUtils; NIL_UUID = "00000000-0000-0000-0000-000000000000"; FIRST_POS = null; SECOND_POS = null; HIDDEN = false; WAIT_FOR_NEXT = {}; BOX = new BoxShape(0, 0, 0); BOX.setOpacity(10); BOX.setOutlineWidth(2); BOX.setOutlineColour(255, 255, 255); fun expand(distance, direction) { index = null; switch (direction) { case Direction.NORTH, Direction.SOUTH -> index = 2; case Direction.UP, Direction.DOWN -> index = 1; case Direction.EAST, Direction.WEST -> index = 0; } if (index == null || FIRST_POS == null || SECOND_POS == null) { return; } first = FIRST_POS.multiply(direction.vector); second = SECOND_POS.multiply(direction.vector); if (first.toList()[index] > second.toList()[index]) { FIRST_POS = FIRST_POS.add(direction.vector.multiply(distance, distance, distance)); } else { SECOND_POS = SECOND_POS.add(direction.vector.multiply(distance, distance, distance)); } } fun messageToPos(message) { x, y, z = message.find("(-?[0-9]+, -?[0-9]+, -?[0-9]+)")[0].split(", "); return new Pos(x.toNumber(), y.toNumber(), z.toNumber()); } fun waitForNext(message, function) { WAIT_FOR_NEXT.put(message, function); } fun getDirection(directionString) { direction = Direction.getEntityFacingFirst(Player.get()); if (directionString != null) { argDirection = Direction.fromString(directionString); if (argDirection == Direction.NONE) { switch (directionString) { case "left" -> direction = direction.left(); case "right" -> direction = direction.right(); case "back" -> direction = direction.opposite(); case "forward", "me" -> { } default -> return null; } } else { direction = argDirection; } } return direction; } new GameEvent("onReceiveMessage", fun(uuid, message) { try { if (uuid != NIL_UUID) { return; } if (message == "Selection cleared.") { FIRST_POS = SECOND_POS = null; } else if (message.contains("First position set to")) { FIRST_POS = messageToPos(message); } else if (message.contains("Second position set to")) { SECOND_POS = messageToPos(message); } else { function = WAIT_FOR_NEXT.remove(message.subString(0, 15)); if (function != null) { function(); } } } catch(error); // Not advised xD }); new GameEvent("onSendMessage", fun(message) { try { if (message.startsWith("//")) { commandArgs = message.subString(2, len(message)).split(" "); commandLength = len(commandArgs); switch (commandArgs[0]) { case "shift" -> { distance = commandArgs[1].toNumber(); directionString = null; if (commandLength == 3) { directionString = commandArgs[2]; } direction = getDirection(directionString); if (direction == null) { return; } waitForNext("Region shifted.", fun() { if (FIRST_POS == null || SECOND_POS == null) { return; } shift = direction.vector.multiply(distance, distance, distance); FIRST_POS = FIRST_POS.add(shift); SECOND_POS = SECOND_POS.add(shift); }); } case "expand" -> { if (commandArgs[1] == "vert") { if (commandLength != 3) { return; } distance = Math.abs(commandArgs[2].toNumber()); waitForNext("Region expanded", fun() { expand(distance, Direction.UP); expand(distance, Direction.DOWN); }); return; } distance = commandArgs[1].toNumber(); directionString = null; if (commandLength == 3) { directionString = commandArgs[2]; } direction = getDirection(directionString); if (direction == null) { return; } waitForNext("Region expanded", fun() { expand(distance, direction); }); } } } } catch(error); // This is not advised xD }); worldEditCommand = { "name": "worldEditCUI", "subcommands": { "hidden ": { "": fun(bool) { HIDDEN = bool; } }, "renderThrough ": { "": fun(bool) { BOX.setRenderThroughBlocks(bool); } } }, "arguments": { "boolean": {"type": "Boolean"} } }; MinecraftClient.get().addCommand(worldEditCommand); while (true) { if (HIDDEN || FIRST_POS == null || SECOND_POS == null) { BOX.stopRendering(); } else { BOX.setPos1(FIRST_POS); BOX.setPos2(SECOND_POS); BOX.render(); } sleep(100); } ``` ### StackTrace: ``` FatalError: An unexpected error was thrown > File: WorldEditCUI, Line: 62, Column: 5, In: new GameEvent::2 62 | new GameEvent("onReceiveMessage", fu ... | ^ | Range [0, 15) out of bounds for length 4 > File: $internal > File: WorldEditCUI, Line: 74, Column: 53, In: .subString::2 74 | ... NEXT.remove(message.subString(0, ... | ^ | Range [0, 15) out of bounds for length 4 StackTrace (most recent call last) Caused by: StringIndexOutOfBoundsException - Range [0, 15) out of bounds for length 4 ``` ### Crash: ``` me.senseiwells.arucas.exceptions.FatalError: An unexpected error was thrown Caused by: java.lang.StringIndexOutOfBoundsException: Range [0, 15) out of bounds for length 4 at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55) at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52) at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213) at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210) at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112) at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349) at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4589) at java.base/java.lang.String.substring(String.java:2703) at me.senseiwells.arucas.builtin.StringDef.subString(StringDef.kt:302) at me.senseiwells.arucas.builtin.StringDef.access$subString(StringDef.kt:21) at me.senseiwells.arucas.builtin.StringDef$defineMethods$14.invoke(StringDef.kt:110) at me.senseiwells.arucas.builtin.StringDef$defineMethods$14.invoke(StringDef.kt:110) at me.senseiwells.arucas.utils.MemberFunction$Auto.invoke(ArucasFunctions.kt:345) at me.senseiwells.arucas.utils.MemberFunction$Auto.invoke(ArucasFunctions.kt:337) at me.senseiwells.arucas.builtin.FunctionDef.call$Arucas(FunctionDef.kt:21) at me.senseiwells.arucas.classes.ClassInstance.call$Arucas(ClassInstance.kt:16) at me.senseiwells.arucas.core.Interpreter.call(Interpreter.kt:141) at me.senseiwells.arucas.classes.ClassInstance.callMember(ClassInstance.kt:23) at me.senseiwells.arucas.classes.ClassInstance.callMember$default(ClassInstance.kt:19) at me.senseiwells.arucas.core.Interpreter.visitMemberCall(Interpreter.kt:760) at me.senseiwells.arucas.core.Interpreter.visitMemberCall(Interpreter.kt:20) at me.senseiwells.arucas.nodes.MemberCallExpression.visit$Arucas(Expressions.kt:347) at me.senseiwells.arucas.core.Interpreter.evaluate(Interpreter.kt:167) at me.senseiwells.arucas.core.Interpreter.visitMemberCall(Interpreter.kt:742) at me.senseiwells.arucas.core.Interpreter.visitMemberCall(Interpreter.kt:20) at me.senseiwells.arucas.nodes.MemberCallExpression.visit$Arucas(Expressions.kt:347) at me.senseiwells.arucas.core.Interpreter.evaluate(Interpreter.kt:167) at me.senseiwells.arucas.core.Interpreter.visitAssign(Interpreter.kt:675) at me.senseiwells.arucas.core.Interpreter.visitAssign(Interpreter.kt:20) at me.senseiwells.arucas.nodes.AssignExpression.visit$Arucas(Expressions.kt:245) at me.senseiwells.arucas.core.Interpreter.evaluate(Interpreter.kt:167) at me.senseiwells.arucas.core.Interpreter.visitExpression(Interpreter.kt:348) at me.senseiwells.arucas.core.Interpreter.visitExpression(Interpreter.kt:20) at me.senseiwells.arucas.nodes.ExpressionStatement.visit(Statements.kt:106) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.visitStatements(Interpreter.kt:336) at me.senseiwells.arucas.core.Interpreter.visitStatements(Interpreter.kt:20) at me.senseiwells.arucas.nodes.Statements.visit(Statements.kt:69) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.executeNext(Interpreter.kt:164) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:340) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:20) at me.senseiwells.arucas.nodes.ScopeStatement.visit(Statements.kt:80) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.visitIf(Interpreter.kt:357) at me.senseiwells.arucas.core.Interpreter.visitIf(Interpreter.kt:20) at me.senseiwells.arucas.nodes.IfStatement.visit(Statements.kt:122) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.executeNext(Interpreter.kt:164) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:340) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:20) at me.senseiwells.arucas.nodes.ScopeStatement.visit(Statements.kt:80) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.visitIf(Interpreter.kt:357) at me.senseiwells.arucas.core.Interpreter.visitIf(Interpreter.kt:20) at me.senseiwells.arucas.nodes.IfStatement.visit(Statements.kt:122) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.executeNext(Interpreter.kt:164) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:340) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:20) at me.senseiwells.arucas.nodes.ScopeStatement.visit(Statements.kt:80) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.visitIf(Interpreter.kt:357) at me.senseiwells.arucas.core.Interpreter.visitIf(Interpreter.kt:20) at me.senseiwells.arucas.nodes.IfStatement.visit(Statements.kt:122) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.visitStatements(Interpreter.kt:336) at me.senseiwells.arucas.core.Interpreter.visitStatements(Interpreter.kt:20) at me.senseiwells.arucas.nodes.Statements.visit(Statements.kt:69) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.executeNext(Interpreter.kt:164) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:340) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:20) at me.senseiwells.arucas.nodes.ScopeStatement.visit(Statements.kt:80) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.visitTry(Interpreter.kt:468) at me.senseiwells.arucas.core.Interpreter.visitTry(Interpreter.kt:20) at me.senseiwells.arucas.nodes.TryStatement.visit(Statements.kt:260) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.visitStatements(Interpreter.kt:336) at me.senseiwells.arucas.core.Interpreter.visitStatements(Interpreter.kt:20) at me.senseiwells.arucas.nodes.Statements.visit(Statements.kt:69) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.executeNext(Interpreter.kt:164) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:340) at me.senseiwells.arucas.core.Interpreter.visitScope(Interpreter.kt:20) at me.senseiwells.arucas.nodes.ScopeStatement.visit(Statements.kt:80) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:161) at me.senseiwells.arucas.core.Interpreter.execute(Interpreter.kt:129) at me.senseiwells.arucas.utils.UserDefinedFunction.invoke(ArucasFunctions.kt:77) at me.senseiwells.arucas.utils.UserDefinedFunction.invoke(ArucasFunctions.kt:50) at me.senseiwells.arucas.builtin.FunctionDef.call$Arucas(FunctionDef.kt:21) at me.senseiwells.arucas.classes.ClassInstance.call$Arucas(ClassInstance.kt:16) at me.senseiwells.arucas.core.Interpreter.call(Interpreter.kt:141) at me.senseiwells.essentialclient.utils.clientscript.impl.ScriptEvent.lambda$invoke$0(ScriptEvent.java:54) at me.senseiwells.arucas.api.ThreadHandler$runAsync$1.invoke(ThreadHandler.kt:46) at me.senseiwells.arucas.api.ThreadHandler$runAsync$1.invoke(ThreadHandler.kt:46) at me.senseiwells.arucas.api.ThreadHandler$safeReturnable$1.invoke(ThreadHandler.kt:73) at me.senseiwells.arucas.api.ThreadHandler.unsafeAsync$lambda-3(ThreadHandler.kt:111) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at me.senseiwells.arucas.api.ThreadHandler$safe$1.invoke(ThreadHandler.kt:63) at me.senseiwells.arucas.api.ThreadHandler$safe$1.invoke(ThreadHandler.kt:61) at me.senseiwells.arucas.utils.impl.ArucasThread._init_$lambda-0(ArucasThread.kt:13) at java.base/java.lang.Thread.run(Thread.java:833) ```