From e774dd5e1026f49995fe04c0b80e9989ae984d58 Mon Sep 17 00:00:00 2001 From: danyadev Date: Sun, 1 Mar 2026 15:03:05 +0300 Subject: [PATCH] optimize StructureDefinition.addShape (#54) Before: 161ms of loading time After: 60.7ms of loading time An example with Forge of Gods image image --- .../structure/StructureDefinition.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gtnewhorizon/structurelib/structure/StructureDefinition.java b/src/main/java/com/gtnewhorizon/structurelib/structure/StructureDefinition.java index 2c335b9d..6b97a344 100644 --- a/src/main/java/com/gtnewhorizon/structurelib/structure/StructureDefinition.java +++ b/src/main/java/com/gtnewhorizon/structurelib/structure/StructureDefinition.java @@ -148,15 +148,32 @@ public class StructureDefinition implements IStructureDefinition { occupiedSpaces.put(name, occupiedSpace); - String built = builder.toString().replaceAll("[\\uA000\\uB000\\uC000]", ""); + boolean hasPlus = false; + boolean hasMinus = false; - if (built.contains("+")) { + int write = 0; + for (int read = 0; read < builder.length(); read++) { + char ch = builder.charAt(read); + if (ch == A || ch == B || ch == C) { + continue; + } + if (ch == '+') { + hasPlus = true; + } else if (ch == '-') { + hasMinus = true; + } + if (read != write) builder.setCharAt(write, ch); + write++; + } + builder.setLength(write); + + if (hasPlus) { addElement('+', notAir()); } - if (built.contains("-")) { + if (hasMinus) { addElement('-', isAir()); } - shapes.put(name, built); + shapes.put(name, builder.toString()); return this; }