From 91ddd11b388856b1e1eef5020f59c46063feca02 Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Tue, 30 Apr 2019 00:10:29 +0200 Subject: [PATCH] NormalPlus option: faster building while holding RMB. Wall and floor option: filled or hollow. Slope floor option: raise along long edge or short edge. Cube option: filled, hollow or skeleton. Added icons for normalSpeed, fastSpeed, full, hollow, cubeFull, cubeHollow, cubeSkeleton, shortEdge, longEdge, thickness1, thickness3, thickness5. --- build.gradle | 2 +- .../EffortlessBuilding.java | 2 +- .../buildmode/BuildModes.java | 6 +- .../effortlessbuilding/buildmode/Cube.java | 80 ++++++++++++++---- .../buildmode/DiagonalLine.java | 4 +- .../effortlessbuilding/buildmode/Floor.java | 17 +++- .../effortlessbuilding/buildmode/Line.java | 41 +++++++-- .../buildmode/SlopeFloor.java | 18 ++-- .../effortlessbuilding/buildmode/Wall.java | 57 ++++++++++--- .../gui/buildmode/RadialMenu.java | 22 +++-- .../effortlessbuilding/proxy/ClientProxy.java | 1 + .../assets/effortlessbuilding/lang/en_us.lang | 8 +- .../textures/icons/cube_full.png | Bin 331 -> 1289 bytes .../textures/icons/cube_hollow.png | Bin 331 -> 1395 bytes .../textures/icons/cube_skeleton.png | Bin 331 -> 1455 bytes .../textures/icons/fast_speed.png | Bin 331 -> 1518 bytes .../textures/icons/full.png | Bin 331 -> 1360 bytes .../textures/icons/hollow.png | Bin 331 -> 1459 bytes .../textures/icons/long_edge.png | Bin 331 -> 1141 bytes .../textures/icons/normal_speed.png | Bin 331 -> 1209 bytes .../textures/icons/open_modifier_settings.png | Bin 1353 -> 1290 bytes .../textures/icons/redo.png | Bin 1239 -> 1264 bytes .../textures/icons/replace.png | Bin 1262 -> 1252 bytes .../textures/icons/short_edge.png | Bin 331 -> 1109 bytes .../textures/icons/thickness_1.png | Bin 331 -> 1190 bytes .../textures/icons/thickness_3.png | Bin 331 -> 1191 bytes .../textures/icons/thickness_5.png | Bin 331 -> 1198 bytes .../textures/icons/undo.png | Bin 1249 -> 1290 bytes 28 files changed, 196 insertions(+), 62 deletions(-) diff --git a/build.gradle b/build.gradle index cdf5a24..dea4069 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -version = "1.12.2-2.8" +version = "1.12.2-2.9" group = "nl.requios.effortlessbuilding" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "effortlessbuilding" diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java index eaf33a6..c757d5f 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java @@ -39,7 +39,7 @@ public class EffortlessBuilding { public static final String MODID = "effortlessbuilding"; public static final String NAME = "Effortless Building"; - public static final String VERSION = "1.12.2-2.8"; + public static final String VERSION = "1.12.2-2.9"; @Mod.Instance(EffortlessBuilding.MODID) public static EffortlessBuilding instance; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java index 2ad99ec..d9cacaa 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java @@ -29,11 +29,11 @@ public class BuildModes { public enum BuildModeEnum { NORMAL("effortlessbuilding.mode.normal", new Normal(), new ActionEnum[]{}), NORMAL_PLUS("effortlessbuilding.mode.normal_plus", new NormalPlus(), new ActionEnum[]{ActionEnum.NORMAL_SPEED, ActionEnum.FAST_SPEED}), - LINE("effortlessbuilding.mode.line", new Line(), new ActionEnum[]{ActionEnum.THICKNESS_1, ActionEnum.THICKNESS_3, ActionEnum.THICKNESS_5}), + LINE("effortlessbuilding.mode.line", new Line(), new ActionEnum[]{/*ActionEnum.THICKNESS_1, ActionEnum.THICKNESS_3, ActionEnum.THICKNESS_5*/}), WALL("effortlessbuilding.mode.wall", new Wall(), new ActionEnum[]{ActionEnum.FULL, ActionEnum.HOLLOW}), FLOOR("effortlessbuilding.mode.floor", new Floor(), new ActionEnum[]{ActionEnum.FULL, ActionEnum.HOLLOW}), - DIAGONAL_LINE("effortlessbuilding.mode.diagonal_line", new DiagonalLine(), new ActionEnum[]{ActionEnum.THICKNESS_1, ActionEnum.THICKNESS_3, ActionEnum.THICKNESS_5}), - DIAGONAL_WALL("effortlessbuilding.mode.diagonal_wall", new DiagonalWall(), new ActionEnum[]{ActionEnum.FULL, ActionEnum.HOLLOW}), + DIAGONAL_LINE("effortlessbuilding.mode.diagonal_line", new DiagonalLine(), new ActionEnum[]{/*ActionEnum.THICKNESS_1, ActionEnum.THICKNESS_3, ActionEnum.THICKNESS_5*/}), + DIAGONAL_WALL("effortlessbuilding.mode.diagonal_wall", new DiagonalWall(), new ActionEnum[]{/*ActionEnum.FULL, ActionEnum.HOLLOW*/}), SLOPE_FLOOR("effortlessbuilding.mode.slope_floor", new SlopeFloor(), new ActionEnum[]{ActionEnum.SHORT_EDGE, ActionEnum.LONG_EDGE}), CUBE("effortlessbuilding.mode.cube", new Cube(), new ActionEnum[]{ActionEnum.CUBE_FULL, ActionEnum.CUBE_HOLLOW, ActionEnum.CUBE_SKELETON}); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/Cube.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/Cube.java index 8b16b9a..12258bd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/Cube.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/Cube.java @@ -98,11 +98,20 @@ public class Cube implements IBuildMode { if (z2 - z1 >= axisLimit) z2 = z1 + axisLimit - 1; if (z1 - z2 >= axisLimit) z2 = z1 - axisLimit + 1; - for (int l = x1; x1 < x2 ? l <= x2 : l >= x2; l += x1 < x2 ? 1 : -1) { + if (ModeOptions.getCubeFill() == ModeOptions.ActionEnum.CUBE_SKELETON) { + //Hollow floor + Line.addXLineBlocks(list, x1, x2, y, z1); + Line.addXLineBlocks(list, x1, x2, y, z2); + Line.addZLineBlocks(list, z1, z2, x1, y); + Line.addZLineBlocks(list, z1, z2, x2, y); + } else { + //Filled floor + for (int l = x1; x1 < x2 ? l <= x2 : l >= x2; l += x1 < x2 ? 1 : -1) { - for (int n = z1; z1 < z2 ? n <= z2 : n >= z2; n += z1 < z2 ? 1 : -1) { + for (int n = z1; z1 < z2 ? n <= z2 : n >= z2; n += z1 < z2 ? 1 : -1) { - list.add(new BlockPos(l, y, n)); + list.add(new BlockPos(l, y, n)); + } } } @@ -116,7 +125,6 @@ public class Cube implements IBuildMode { //Add whole cube //Limit amount of blocks you can place per row int axisLimit = ReachHelper.getMaxBlocksPerAxis(player); - int limit = ReachHelper.getMaxBlocksPlacedAtOnce(player); int x1 = firstPos.getX(), x2 = thirdPos.getX(); int y1 = firstPos.getY(), y2 = thirdPos.getY(); @@ -130,24 +138,63 @@ public class Cube implements IBuildMode { if (z2 - z1 >= axisLimit) z2 = z1 + axisLimit - 1; if (z1 - z2 >= axisLimit) z2 = z1 - axisLimit + 1; - for (int l = x1; x1 < x2 ? l <= x2 : l >= x2; l += x1 < x2 ? 1 : -1) { - - for (int n = z1; z1 < z2 ? n <= z2 : n >= z2; n += z1 < z2 ? 1 : -1) { - - //check if whole row fits within limit - if (Math.abs(y1 - y2) < limit - list.size()) { - - for (int m = y1; y1 < y2 ? m <= y2 : m >= y2; m += y1 < y2 ? 1 : -1) { - list.add(new BlockPos(l, m, n)); - } - } - } + switch (ModeOptions.getCubeFill()) { + case CUBE_FULL: + addCubeBlocks(list, x1, x2, y1, y2, z1, z2); + break; + case CUBE_HOLLOW: + addHollowCubeBlocks(list, x1, x2, y1, y2, z1, z2); + break; + case CUBE_SKELETON: + addSkeletonCubeBlocks(list, x1, x2, y1, y2, z1, z2); + break; } + } return list; } + public static void addCubeBlocks(List list, int x1, int x2, int y1, int y2, int z1, int z2) { + for (int l = x1; x1 < x2 ? l <= x2 : l >= x2; l += x1 < x2 ? 1 : -1) { + + for (int n = z1; z1 < z2 ? n <= z2 : n >= z2; n += z1 < z2 ? 1 : -1) { + + for (int m = y1; y1 < y2 ? m <= y2 : m >= y2; m += y1 < y2 ? 1 : -1) { + list.add(new BlockPos(l, m, n)); + } + } + } + } + + public static void addHollowCubeBlocks(List list, int x1, int x2, int y1, int y2, int z1, int z2) { + Wall.addXWallBlocks(list, x1, y1, y2, z1, z2); + Wall.addXWallBlocks(list, x2, y1, y2, z1, z2); + + Wall.addZWallBlocks(list, x1, x2, y1, y2, z1); + Wall.addZWallBlocks(list, x1, x2, y1, y2, z2); + + Floor.addFloorBlocks(list, x1, x2, y1, z1, z2); + Floor.addFloorBlocks(list, x1, x2, y2, z1, z2); + } + + public static void addSkeletonCubeBlocks(List list, int x1, int x2, int y1, int y2, int z1, int z2) { + Line.addXLineBlocks(list, x1, x2, y1, z1); + Line.addXLineBlocks(list, x1, x2, y1, z2); + Line.addXLineBlocks(list, x1, x2, y2, z1); + Line.addXLineBlocks(list, x1, x2, y2, z2); + + Line.addYLineBlocks(list, y1, y2, x1, z1); + Line.addYLineBlocks(list, y1, y2, x1, z2); + Line.addYLineBlocks(list, y1, y2, x2, z1); + Line.addYLineBlocks(list, y1, y2, x2, z2); + + Line.addZLineBlocks(list, z1, z2, x1, y1); + Line.addZLineBlocks(list, z1, z2, x1, y2); + Line.addZLineBlocks(list, z1, z2, x2, y1); + Line.addZLineBlocks(list, z1, z2, x2, y2); + } + @Override public EnumFacing getSideHit(EntityPlayer player) { return sideHitTable.get(player.getUniqueID()); @@ -157,4 +204,5 @@ public class Cube implements IBuildMode { public Vec3d getHitVec(EntityPlayer player) { return hitVecTable.get(player.getUniqueID()); } + } \ No newline at end of file diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/DiagonalLine.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/DiagonalLine.java index cee5498..734d251 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/DiagonalLine.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/DiagonalLine.java @@ -184,7 +184,7 @@ public class DiagonalLine implements IBuildMode { } //Add diagonal line from first to second - public static List getDiagonalLineBlocks(EntityPlayer player, BlockPos firstPos, BlockPos secondPos, int sampleMultiplier) { + public static List getDiagonalLineBlocks(EntityPlayer player, BlockPos firstPos, BlockPos secondPos, float sampleMultiplier) { List list = new ArrayList<>(); int axisLimit = ReachHelper.getMaxBlocksPerAxis(player); @@ -204,7 +204,7 @@ public class DiagonalLine implements IBuildMode { Vec3d first = new Vec3d(x1, y1, z1).add(0.5, 0.5, 0.5); Vec3d second = new Vec3d(x2, y2, z2).add(0.5, 0.5, 0.5); - int iterations = (int) Math.ceil(first.distanceTo(second)) * sampleMultiplier; + int iterations = (int) Math.ceil(first.distanceTo(second) * sampleMultiplier); for (double t = 0; t <= 1.0; t += 1.0/iterations) { Vec3d lerp = first.add(second.subtract(first).scale(t)); BlockPos candidate = new BlockPos(lerp); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/Floor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/Floor.java index 3a7f97b..92aabbb 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/Floor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/Floor.java @@ -145,6 +145,16 @@ public class Floor implements IBuildMode { if (z2 - z1 >= axisLimit) z2 = z1 + axisLimit - 1; if (z1 - z2 >= axisLimit) z2 = z1 - axisLimit + 1; + if (ModeOptions.getFill() == ModeOptions.ActionEnum.FULL) + addFloorBlocks(list, x1, x2, y, z1, z2); + else + addHollowFloorBlocks(list, x1, x2, y, z1, z2); + + return list; + } + + public static void addFloorBlocks(List list, int x1, int x2, int y, int z1, int z2) { + for (int l = x1; x1 < x2 ? l <= x2 : l >= x2; l += x1 < x2 ? 1 : -1) { for (int n = z1; z1 < z2 ? n <= z2 : n >= z2; n += z1 < z2 ? 1 : -1) { @@ -152,8 +162,13 @@ public class Floor implements IBuildMode { list.add(new BlockPos(l, y, n)); } } + } - return list; + public static void addHollowFloorBlocks(List list, int x1, int x2, int y, int z1, int z2) { + Line.addXLineBlocks(list, x1, x2, y, z1); + Line.addXLineBlocks(list, x1, x2, y, z2); + Line.addZLineBlocks(list, z1, z2, x1, y); + Line.addZLineBlocks(list, z1, z2, x2, y); } @Override diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/Line.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/Line.java index 95db40c..2da9bc1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/Line.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/Line.java @@ -189,21 +189,43 @@ public class Line implements IBuildMode { int y1 = firstPos.getY(), y2 = secondPos.getY(); int z1 = firstPos.getZ(), z2 = secondPos.getZ(); - outerloop: - for (int l = x1; x1 < x2 ? l <= x2 : l >= x2; l += x1 < x2 ? 1 : -1) { + //limit axis + if (x2 - x1 >= axisLimit) x2 = x1 + axisLimit - 1; + if (x1 - x2 >= axisLimit) x2 = x1 - axisLimit + 1; + if (y2 - y1 >= axisLimit) y2 = y1 + axisLimit - 1; + if (y1 - y2 >= axisLimit) y2 = y1 - axisLimit + 1; + if (z2 - z1 >= axisLimit) z2 = z1 + axisLimit - 1; + if (z1 - z2 >= axisLimit) z2 = z1 - axisLimit + 1; - for (int n = z1; z1 < z2 ? n <= z2 : n >= z2; n += z1 < z2 ? 1 : -1) { - - for (int m = y1; y1 < y2 ? m <= y2 : m >= y2; m += y1 < y2 ? 1 : -1) { - if (list.size() >= axisLimit) break outerloop; - list.add(new BlockPos(l, m, n)); - } - } + if (x1 != x2) { + addXLineBlocks(list, x1, x2, y1, z1); + } else if (y1 != y2) { + addYLineBlocks(list, y1, y2, x1, z1); + } else { + addZLineBlocks(list, z1, z2, x1, y1); } return list; } + public static void addXLineBlocks(List list, int x1, int x2, int y, int z) { + for (int x = x1; x1 < x2 ? x <= x2 : x >= x2; x += x1 < x2 ? 1 : -1) { + list.add(new BlockPos(x, y, z)); + } + } + + public static void addYLineBlocks(List list, int y1, int y2, int x, int z) { + for (int y = y1; y1 < y2 ? y <= y2 : y >= y2; y += y1 < y2 ? 1 : -1) { + list.add(new BlockPos(x, y, z)); + } + } + + public static void addZLineBlocks(List list, int z1, int z2, int x, int y) { + for (int z = z1; z1 < z2 ? z <= z2 : z >= z2; z += z1 < z2 ? 1 : -1) { + list.add(new BlockPos(x, y, z)); + } + } + @Override public EnumFacing getSideHit(EntityPlayer player) { return sideHitTable.get(player.getUniqueID()); @@ -213,4 +235,5 @@ public class Line implements IBuildMode { public Vec3d getHitVec(EntityPlayer player) { return hitVecTable.get(player.getUniqueID()); } + } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/SlopeFloor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/SlopeFloor.java index 6f1589c..35fa01a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/SlopeFloor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/SlopeFloor.java @@ -94,7 +94,7 @@ public class SlopeFloor implements IBuildMode { BlockPos thirdPos = DiagonalLine.findHeight(player, secondPos, skipRaytrace); if (thirdPos == null) return list; - //Add whole cube + //Add slope floor blocks list.addAll(getSlopeFloorBlocks(player, firstPos, secondPos, thirdPos)); } @@ -113,18 +113,20 @@ public class SlopeFloor implements IBuildMode { int xLength = Math.abs(secondPos.getX() - firstPos.getX()); int zLength = Math.abs(secondPos.getZ() - firstPos.getZ()); - //Slope along short edge - if (zLength > xLength) onXAxis = false; - - //TODO add option for Slope along long edge - //if (zLength > xLength) onXAxis = true; + if (ModeOptions.getRaisedEdge() == ModeOptions.ActionEnum.SHORT_EDGE) { + //Slope along short edge + if (zLength > xLength) onXAxis = false; + } else { + //Slope along long edge + if (zLength <= xLength) onXAxis = false; + } if (onXAxis) { //Along X goes up //Get diagonal line blocks BlockPos linePoint = new BlockPos(secondPos.getX(), thirdPos.getY(), firstPos.getZ()); - List diagonalLineBlocks = DiagonalLine.getDiagonalLineBlocks(player, firstPos, linePoint, 1); + List diagonalLineBlocks = DiagonalLine.getDiagonalLineBlocks(player, firstPos, linePoint, 1f); //Limit amount of blocks we can place int lowest = Math.min(firstPos.getZ(), secondPos.getZ()); @@ -144,7 +146,7 @@ public class SlopeFloor implements IBuildMode { //Get diagonal line blocks BlockPos linePoint = new BlockPos(firstPos.getX(), thirdPos.getY(), secondPos.getZ()); - List diagonalLineBlocks = DiagonalLine.getDiagonalLineBlocks(player, firstPos, linePoint, 1); + List diagonalLineBlocks = DiagonalLine.getDiagonalLineBlocks(player, firstPos, linePoint, 1f); //Limit amount of blocks we can place int lowest = Math.min(firstPos.getX(), secondPos.getX()); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/Wall.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/Wall.java index 1ac9c69..efe6665 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/Wall.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/Wall.java @@ -151,7 +151,6 @@ public class Wall implements IBuildMode { List list = new ArrayList<>(); //Limit amount of blocks we can place per row - int limit = ReachHelper.getMaxBlocksPlacedAtOnce(player); int axisLimit = ReachHelper.getMaxBlocksPerAxis(player); int x1 = firstPos.getX(), x2 = secondPos.getX(); @@ -166,23 +165,55 @@ public class Wall implements IBuildMode { if (z2 - z1 >= axisLimit) z2 = z1 + axisLimit - 1; if (z1 - z2 >= axisLimit) z2 = z1 - axisLimit + 1; - for (int l = x1; x1 < x2 ? l <= x2 : l >= x2; l += x1 < x2 ? 1 : -1) { - - for (int n = z1; z1 < z2 ? n <= z2 : n >= z2; n += z1 < z2 ? 1 : -1) { - - //check if whole row fits within limit - if (Math.abs(y1 - y2) < limit - list.size()) { - - for (int m = y1; y1 < y2 ? m <= y2 : m >= y2; m += y1 < y2 ? 1 : -1) { - list.add(new BlockPos(l, m, n)); - } - } - } + if (x1 == x2) { + if (ModeOptions.getFill() == ModeOptions.ActionEnum.FULL) + addXWallBlocks(list, x1, y1, y2, z1, z2); + else + addXHollowWallBlocks(list, x1, y1, y2, z1, z2); + } else { + if (ModeOptions.getFill() == ModeOptions.ActionEnum.FULL) + addZWallBlocks(list, x1, x2, y1, y2, z1); + else + addZHollowWallBlocks(list, x1, x2, y1, y2, z1); } return list; } + public static void addXWallBlocks(List list, int x, int y1, int y2, int z1, int z2) { + + for (int z = z1; z1 < z2 ? z <= z2 : z >= z2; z += z1 < z2 ? 1 : -1) { + + for (int y = y1; y1 < y2 ? y <= y2 : y >= y2; y += y1 < y2 ? 1 : -1) { + list.add(new BlockPos(x, y, z)); + } + } + } + + public static void addZWallBlocks(List list, int x1, int x2, int y1, int y2, int z) { + + for (int x = x1; x1 < x2 ? x <= x2 : x >= x2; x += x1 < x2 ? 1 : -1) { + + for (int y = y1; y1 < y2 ? y <= y2 : y >= y2; y += y1 < y2 ? 1 : -1) { + list.add(new BlockPos(x, y, z)); + } + } + } + + public static void addXHollowWallBlocks(List list, int x, int y1, int y2, int z1, int z2) { + Line.addZLineBlocks(list, z1, z2, x, y1); + Line.addZLineBlocks(list, z1, z2, x, y2); + Line.addYLineBlocks(list, y1, y2, x, z1); + Line.addYLineBlocks(list, y1, y2, x, z2); + } + + public static void addZHollowWallBlocks(List list, int x1, int x2, int y1, int y2, int z) { + Line.addXLineBlocks(list, x1, x2, y1, z); + Line.addXLineBlocks(list, x1, x2, y2, z); + Line.addYLineBlocks(list, y1, y2, x1, z); + Line.addYLineBlocks(list, y1, y2, x2, z); + } + @Override public EnumFacing getSideHit(EntityPlayer player) { return sideHitTable.get(player.getUniqueID()); diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index f2711ef..8b5a594 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -166,12 +166,13 @@ public class RadialMenu extends GuiScreen { ModeOptions.ActionEnum[] options = currentBuildMode.options; for (int i = 0; i < options.length; i++) { ModeOptions.ActionEnum action = options[i]; - buttons.add(new MenuButton(action.name, action, buttonDistance + i * 26, -20, EnumFacing.DOWN)); + buttons.add(new MenuButton(action.name, action, buttonDistance + i * 26, -13, EnumFacing.DOWN)); } switchTo = null; doAction = null; + //Draw buildmode backgrounds if (!modes.isEmpty()) { final int totalModes = Math.max( 3, modes.size() ); int currentMode = 0; @@ -236,6 +237,7 @@ public class RadialMenu extends GuiScreen { } } + //Draw action backgrounds for (final MenuButton btn : buttons) { float r = 0.5f; float g = 0.5f; @@ -283,6 +285,7 @@ public class RadialMenu extends GuiScreen { buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); + //Draw buildmode icons for (final MenuRegion menuRegion : modes) { final double x = (menuRegion.x1 + menuRegion.x2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge); @@ -309,6 +312,7 @@ public class RadialMenu extends GuiScreen { buffer.pos(middleX + x2, middleY + y1, zLevel).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex(); } + //Draw action icons for (final MenuButton button : buttons) { final float f = 1f; @@ -336,36 +340,39 @@ public class RadialMenu extends GuiScreen { tessellator.draw(); - + //Draw strings //fontRenderer.drawStringWithShadow("Actions", (int) (middleX - buttonDistance - 13) - fontRenderer.getStringWidth("Actions") * 0.5f, (int) middleY - 38, 0xffffffff); String title = ""; if (currentBuildMode.options.length > 0) { switch (currentBuildMode.options[0]) { case NORMAL_SPEED: case FAST_SPEED: - title = "Build Speed"; + title = I18n.format("effortlessbuilding.action.build_speed"); break; case FULL: case HOLLOW: case CUBE_FULL: case CUBE_HOLLOW: case CUBE_SKELETON: - title = "Fill"; + title = I18n.format("effortlessbuilding.action.filling"); break; case SHORT_EDGE: case LONG_EDGE: - title = "Raised Edge"; + title = I18n.format("effortlessbuilding.action.raised_edge"); break; case THICKNESS_1: case THICKNESS_3: case THICKNESS_5: - title = "Line Thickness"; + title = I18n.format("effortlessbuilding.action.thickness"); break; } } - fontRenderer.drawStringWithShadow(title, (int) (middleX + buttonDistance - 9), (int) middleY - 44, 0xffffffff); + fontRenderer.drawStringWithShadow(title, (int) (middleX + buttonDistance - 9), (int) middleY - 37, 0xeeeeeeff); + String credits = "Effortless Building"; + fontRenderer.drawStringWithShadow(credits, width - fontRenderer.getStringWidth(credits) - 4, height - 10, 0x88888888); + //Draw buildmode text for (final MenuRegion menuRegion : modes) { if (menuRegion.highlighted) { @@ -386,6 +393,7 @@ public class RadialMenu extends GuiScreen { } } + //Draw action text for (final MenuButton button : buttons) { if (button.highlighted) { String text = TextFormatting.AQUA + button.name; diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java index 6089345..af1ffe6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java @@ -249,6 +249,7 @@ public class ClientProxy implements IProxy { } } else if (buildMode == BuildModes.BuildModeEnum.NORMAL_PLUS) { placeCooldown--; + if (ModeOptions.getBuildSpeed() == ModeOptions.ActionEnum.FAST_SPEED) placeCooldown = 0; } } else { placeCooldown = 0; diff --git a/src/main/resources/assets/effortlessbuilding/lang/en_us.lang b/src/main/resources/assets/effortlessbuilding/lang/en_us.lang index 51e173b..f292005 100644 --- a/src/main/resources/assets/effortlessbuilding/lang/en_us.lang +++ b/src/main/resources/assets/effortlessbuilding/lang/en_us.lang @@ -25,9 +25,15 @@ effortlessbuilding.action.undo=Undo effortlessbuilding.action.redo=Redo effortlessbuilding.action.replace=Replace effortlessbuilding.action.open_modifier_settings=Open Modifier Settings + +effortlessbuilding.action.build_speed=Build Speed +effortlessbuilding.action.filling=Filling +effortlessbuilding.action.raised_edge=Raised Edge +effortlessbuilding.action.thickness=Line Thickness + effortlessbuilding.action.normal_speed=Normal effortlessbuilding.action.fast_speed=Fast -effortlessbuilding.action.full=Full +effortlessbuilding.action.full=Filled effortlessbuilding.action.hollow=Hollow effortlessbuilding.action.skeleton=Skeleton effortlessbuilding.action.short_edge=Short Edge diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/cube_full.png b/src/main/resources/assets/effortlessbuilding/textures/icons/cube_full.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..c4ba566e02162adb13106ce218d99462416cc49e 100644 GIT binary patch delta 1270 zcmVaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vbmg^`C zMgKL59)cwy9>W0xYxN9z_479 z&T1;pwWFhXC*IMz({9Pru4gG|@zcTIX*BI@&$ZhWx}$a(`Sb$mhvoLV(XRIzdvE*f zvhz^N)11_0Dt}uGjs;Tc*3F{?{A>$7NG6TTlHUt+iUu4+{0A%VM~l1+jk3uIrk)fIOGQ5>he{R^ot}$4o6M*hFO1{B>f_Z zQ-4jbUVNG)os;<}iBnB~>iAQVbem;Oc{h7}GOt#*_gmM$m(d#c=$hg+sl7=3sjM#M=+# zN!62RkL!hg66HapUK9Nf9E|fZal!J&00006VoOIv0I&ek0Q}Q}>;eD)010qNS$}f? z01m$Z01m$aI0aKA00007bV*G`2jc`C6$~_-8!#*Y006Z~L_t(I%iWW)4Z<)GMgJi$ zV@DL}($J)#L_(1~0Ye}P1GtHlGIJoM$^=wwa8wqNx!A7xwcpd}&YzeWYca+! z08G+gt{V2qJ>2 zVy#tct+tZu%d()VsOp#C71$D~D*Okmi8_FFT>%)!@lPjz97p{SUx`Za_79K_vBLKrN)MnHY z%$cU?A;^E@JSxu@(Z27rz@OwNS+*D>B0`L@S})rtqJaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bv66+`o z{MRYw2uSS5VXc}Q%<-qe*om_z@0r-bvXDf#zz((l{_XS+4q*votPd_ar*N2Pq9k;J z+Kx@KGV{7_)ZRJi>3ASeX-K`@y0+{S^!75qo2AcZJ^8Zygn#8|_q-hH5n0e#c40Zv zvgvuj~)s1u~YRdgIiTBFa};cD~~ z?C9v;fOqt6uv2O2^%)9MZW*{6jFz75W9%kEH>~ZEPY-ldUR@to*!5mR?`@l1G7d;N zT9ewRGJ7!0fPYfYVGhmXwCMZUB3i%{3mB_lGouya$O5!G8?KzVbDOeoL5fD2cu0{V zdg_Aq5~WO1%xK)jgPuw{fRzH)G}LnB!ZU81@d^h-t_(|IIAe^sYxGF@OFJC(K1!Ea zg##<(C8MU1#$aw-VFg0CFHG&kcQ(4J8+Apj27`9O9Dgvur1It>TfWqmo;+*VS!HOI zJNvpE03yV;NQN~SP>!`_$I6R%X5bjWPeSIRjbt#u)=FjS;6`f)a)ON57~^@`ij_@` ztp!9_ED;ZCuz*08F&6dXO+XDLtF0kxt+U<+8*Osh8E2hy-i&m=b~}xK0?IV3AUmth32ByX}+y7uKNmes{rRJF$Z^FeZkLzhl(V?sEM|Yc~@8TY+yoJpnbS&TL2y^aH+%QNDz*Y5AlJo~jj2sS0w~8gdPLlp0 ziGP!%XAizjlFrF|mBdNXr-tv6r0XneOq<%_m3h&cZCojTFQXDR?>dG{Qd^e>bnQy- z7Dn+EM%`}tW_?fp(*+`HbaRI)tYG-4Gp%hXQ7J%VH_F-cH|y~Z_cY~ z@!A(nA33fmW5kZ$m*CNBnsx*x0N2pGU4OKvk>5Z^A8)JY>G!tz!be|F$6BkrsY__@ z96ZI3-dEp8_%&Lukep0+&ljiho0Z_7#$y=i_Yyoy`T)n5Z;eD)010qNS#tmY4!-~Z4!;371ydvd000McNliru;{+WQ5GZbKF+KnQ0NhDL zK~y-)WBmXBKLakHrKRZUTF8^rkk z|9^rS@fpOZsj2y&SdG{WVqsulVA!~BCj$cm1A~8%J5d_%e0T+CGa*ZCT(=W$7%q)> zKD=VMy6-&xSU`6X%tmC5cnv@{NZZK}t46F|zy&U@KFn}&^Ia<+&YzSEf zL`}~_1Y&r2IOEFtmH!zS7#J)XLx|Ei*R~pw5@C6vv9Xb1p#aVD00000NkvXXu0mjfIwzfB delta 278 zcmV+x0qOqp3d;hJBM<-vVoOIv0RI600RN!9r<0Rc1Rs9_2m%2oT;=FT0002kNkl&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f{!|WX#fBK diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/cube_skeleton.png b/src/main/resources/assets/effortlessbuilding/textures/icons/cube_skeleton.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..35f6dfb7436de01c00f8cab733bcf77aefd657ac 100644 GIT binary patch delta 1438 zcmV;P1!4Nj0aB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@wyP=( z{hv|XArJy23(1Z}{{}>B)zi~@Tc}NPAizL!J6b<^C~&-IOoSa)01F?Z`B=S)K-|d$u~5 zdNK`>UFA5RA}~q+eattOqz0fh5}5O3gLv&l%v1LZXk4GZS(x}B9LKoybjp4R;0DMt}eNt zNClXS+Lkg#s(-jBlr*LVZLB}9V;(JP6J26f#)`7JXv=^Rt)kt~VZnqA>*zCP4bjxZbc?RvHSBC@Wc6BNf{{794)#@Rw24b3xU#sK!udTpHX7ziGRn z)_Uq98riYZxNOfF4Wl#H@2aJQV4Ilwf$wN=$QyGYmVcB%KVTMJU^2^UV)6LMEgC$N z>UrZ}raN+(1{5Oo?KK!AWxxa^j{yx^%ZQ4jC_hOfx8&@i450V6AT;HMC@48%yKkMt zICQPIt5{2m65%NjD>b@Nlq~1G<_|m397>+N1MhwC?8Qf)0tFX*2!TVdQHhBidk)Mj z961Sz6Mrv3SVW?vXd`I}^D#t*C^5#A)M--FNoOb3NNKSPEpG8kSa^{oE-7pJWS4yo znX}}WQ?Z4LZvPSrLy;0os#rCZs;j<+%2jHtscEh?YOeVf8aHXNrJc3O>N9J2V(v9- zI9cnAxuM4o)>O>AnZRC7eCJFVvksMU?hI%`+keiP5p>RW<~nC4_HyN|vWC8sQ?N6p z47!TeH{7{`%-=r|$n?4mx#{xhrostd%rQ6dDBeUDz=-)U>dvLX~7C z^)uU&VHXL6)w!PZyYJ@L_X~XxEnI;4IGPJaBsbBW`yZo)AH!{7+Ktk*(!XQq z4!aMbv)dLq*w}_WzVr~6IFSqYsRUDP`px<6J(gv)LQ&SG-60w$CbdwFa*tZAVfr3x zfZqwb!R7{5c!}@P>o4HJiXJU91Bf0=xqs|tT=6cZ#@)^~5sowOG%rjaT^_)Mx6!;c zd%tO)5P4_69HE3avHTTEIA+g0O{#vR3Kd+RveYv$cX}`sKSlNiSa^XfRc@=DK1piIKtH9$xx_>!$ z;I^RduW2nhi>D<&gL}pn9^ke#4RlQS8vQ+xF>Gi5k2#d$S@H^fFfS{}4@r1)e8cyj zR=;QVZ*bhA0Z$+_{YH%XkNF?!q%&24qJk0t000JJOGiWiumI8k{L_N$0ssI232;bR za{vGizW@LZzX3P}QzQTY00(qQO@BoP;{+WQF(B+ItnUB-0P#sgK~y-)jgz5HLopPF zzb<_M6i;x?$<0FMu9>-JatXPZc?4#jAjnnomv=JOta>**x`&N)*R|(A9YGanJ24J0YhTBIE(2YavkdM9EuH*V)e)IPd swZG7fgW53#|MeTYaiHyIDi;{?3p|&1Hc!pCMgRZ+07*qoM6N<$f>Xz&>i_@% delta 278 zcmV+x0qOp)3(EqKBM<-vVoOIv0RI600RN!9r<0R@1Rs9_2m%2oT;=FT0002kNkl&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f^8{&O#lD@ diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/fast_speed.png b/src/main/resources/assets/effortlessbuilding/textures/icons/fast_speed.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..1011152328acbc486dc0980946da2d09160ce392 100644 GIT binary patch delta 1501 zcmV<31tR*(0`3ctBYy;RdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y;mh>hJ z{Ld+J1cVUFaWKn!xj~Mf0%Nz^OZQ~HG&2UvP)Jo0wyOX9-PB+B8L~lH@xevsG=4VP zXc7iNufMe?ZO3)q=xy+3SNj746Qk$#*3~&b!7i@_-cI}SZhu!kPnSm@%ed zSslIMPVK`JdHd+Zoleuv?^G!5<^*@*Xxd5cxf=|fRNHobdti(9`uIC=*IEg!)it_g z9hh=z2DODUMt_*N0E)*lhvxAw82iy8T0n>yiWR82pk+mo4A^dDsZgRub@Z7sT(qVd zkKUMUc-R7a6HOkX*xsla4|$5>097(nW0=kE3ypo_*e_GS&V?}35Wom4E=}DTf75oL z)_Up^>9BJJzf8|*xY3pCSImMS)F!7g_#I6h@W)+|tfL`)&opbfKwIKlM2vBuMw zYs9Q(94!z+*s+H+C?JSstssBA4alJ+ELMq#6E8ucB*)G=an5{3^R{#lZx_@RmkhP{O*EQ3zA6H_a8c7$YP*)5J z+Db+m?b^MR`>2}|`=4|(Ps*t--T$GS>e5Z+uDac*R?>K*@DQk1VdqqH!@-70$prl2 zJpO&J{uJO>KwM4ShsC`;RloP+0INIDE&jJ<*IxY$=3|h-tsE^8!sQmL>km?0I3KaU zxqosbdxCz&eDn`Rqqc2DHfwPchOt4Y%X;VV2IE}F3gP_mcv+TIaAT!^+6bvW@LBj^ zJN7=!#o75nggO{ca^ULMh*39qsWj!o?n$pOjQdB|+M{6Rs6}zxP$odgsE9o}mC6{# z2*29umzP*^3c5wc?ii9?9no6edjgH?8h^a|o3(o&vWyYF>)sjH*MvT)sc!f+=Lnzp zrZd_1%wEEHWO}W&!`9{_pO@@;qgNgHeP;5F$V-L{V$}y`^?iz7C>)uA&=!uN+SObm zXZIM(CqT6!{wd%mATD*MABuiPRVP26QEN)+TH(7@eJcDPxVpQnzWV$PRc{{Mm46Wq zs%sRf&BHG=XD?W@)~>ETdwLJ3jyfM@l6rHVUfg_zqjoLy^R%z;6gZ$Z*)PZA^^*YA zb1m=9P4)c^c8%l3z-xbHzB=-_#hZib*r)PPDCn%fDl4FSJqkpK+`k_(-uTTJ5$$nuYm10 z_I-Z{n&-J_jH|9|jN=IJJwyZ|0&6Y2_psK+v(o+oy$H&kl*>LP00000NkvXXu0mjf D|DM%t delta 305 zcmV-10nYyJ3(EqKBYyw}VoOIv0RI600RN!9r;`8x010qNS#tmY4!-~Z4!;371ydvd z000McNliru;{pf*0ViDL=tlqm0N6=HK~y-)rIS5!g&-704;eQDrCV`^(sj^@OVQHB z*j&e!rQ8$=dE^PcWZpMJA(wOb)u<}(+gt{V2qJ>2 zVy#tct+tZu%d()VsOp#C71$D~D*Okmi8_FFT>%)!@lPjz97p{SUx`Za_79K_vBLKrN)MnHY z%$cU?A;^E@JSxu@(Z27rz@OwNS+*D>B0`L@S})rtqJaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vbmg^`C zMgKL59)g8w@~|{esIz z8%;t(m+jhWUhKHfhvn8d*lB-ZU=q}_J^DKR6YTE(L9o-l9)Il=@{FT1&@J)|D7|Nc z#`Mz}NX%yE`Al(sm+ZrI<}Ze6o9~{VZ2*ko5Kj!5Dl7}`+Itap{xXoYZY9qkjd*b%g4ld6a;kLpzKTQ4~|mP^>`B6(ti#Mq)0FEf-GQxQ;q=#t^Nk zCZIMZ8yPm0V4}%G6x$0o6Ch6^Q7Dn2n!s%KvGC|Oj{Y($dM*r4!wAOs;-%1;@h4>u z)LKtn=0$f_7?ngxh552H#QWA#aukVSfb*x`A0S!L+Pfh}H2uw`Axn z@NWb7UrUlfuhD3Q$nW+p%cDN@JMMjtE_f)t6#&aYg|)C`ed73 z_BmwDF{fgR6fFPZOQ519mQ=YSm8z|-`WmX%SW`o;HEFiF=38jmVoSSfQ`Mtt{G{Ax z)p)Ab6|=)H+*N})gj)#i+llL%K`~<)iifTM5`Wrs%@$>AO;@gKw#2?&IRn+$b#V%J z#h{?AY+U1AySs89bt7m0N;mUPIqK5=AIedeZYuYx+lgu=jT1$NKz$WXVn$;;#m}+B2w*)>?2X*|x0PQ!cV9RWqDYKWn$TrIJRo_O0_i zFn=4j?^fG_-JMsrInzDBx4OEm)vQ+TyYu#h#KY-2rgkK4*14$%(&u_j0z8ZDc`QZ(e z+>?iXf#pDjzJK!`+vCcj8!ahuj?6#ibAOpRobw5nM=W%S=>=|d2Cn(3U_4W>RzC-M zpV~4;^n)Gf6&#(C`wVXPTjzctz(rT_e8WZ;^X)4(I^p)Cnyx0?H*9pm?MJxi=gahn zjjpBJ-=1q5rVl6Ddu((q-7akY2Q0hYh3BxP)psj+fTLfm)5C1(1x#`E-T2@Bw|{|? zfj%A$r%8B#x6hBh!TA8`eL@=E&($=~)gZYF{)^krRh5EMzonPt-12A~v1!j@lP?b9 zP}3W(twfwv{{d@w8gO3oPyGM@00v@9M??Uy0Q>;N$x}ae00009a7bBm000iZ000iZ z0XPLyBme*a2XskIMF-;q9TgxPkbj@^cmMzZn@L1LR5;6HU?37`YHI%1)YSZsF3w1d zMg|53hW5*|85kHC7%FvB85kHC7_MKx&WP6lbdBhsQa6?1`t|FKETn3@^WhZ=pM_kF zC@9KDbb=aghAWMkf27Avn?(F0JRN6lw~gp(*OVf07*qoM6N<$g1f&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f`pF diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/hollow.png b/src/main/resources/assets/effortlessbuilding/textures/icons/hollow.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..7bf27255384c70547211ee3bfd7b6322fb691442 100644 GIT binary patch delta 1442 zcmV;T1zq~f0<#N{BYy;OdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O3w^wd^Pi zMgJ8=hhQNF5f0;8FM|%h514XIuHoL-rpm@x7UFCHruOfjPXFLAtcI)$>ZA7?4jXMW z2^HP;W54od=Xu?1m&#o`9S;ne1XtN_eOvYk?e6+Qu&X`aw|`S8%a1Nc7thO~jGhfD z%TAXgF?&0&dy4D5WN(JE{xPh!_3ZK928dA|{D~pcgk{57M=yd1Buc{7;%p=iBN5bP zwdlEabW|V2J8BQwZE3a3y%e9Zv6;||I8J33OjPb@(p|i%{l*3W) zBXyZKJ+wkxX5=)&805woRsh0%Y3ioFv(Qc6Y&T#91b^L>Suw!0<=sVge9bMHoCS7n zv$WEkLtPFa5&Curh6MyR&*Iqg7K{nZ&{4rBA#x+uWDsEIOl9g|BjN!^&FCBN1fI6W znY|fH3qUyW5`YF12(YYm$e&;pIh33@OU^m(f>Re=^5U&`-uvLk8kK?s8(i=q1Pw7H z6}9TrYkyGHs41E#Si)TNF;LVPV@l{W!F9sh2^J}3lO@~ivdVuWE>c4gLZO>43)^f$JWc!x)yHX`9H8YLU*lYJ|Pc_YI8%yUkFdO&xvhBeh z#(&xE#&mV?>Dt_0>sA|&)p@@|;$e54L%UZb?}}vAjy31YPI@Hc_hBF#>Kk3($urfV zFXZ{i;Ba(9|56>2V!~WQl%oF9owVmU-igd}ydt-tUUG zYvg%N8G)mIi2a?S-LGNCC$uySZ-jVKtgY25C)@pV6f^lbffp;9L+8~x~(g3ZYJ$dC;I6;r_aJv z*Iq5_H{UVz5b%dh=Tyuo9$hE*m*Tt-iQew$hL0UPtsOf^X@c*=ea9ZFu#}!ITlU$v zO*(SflozDl;eQz%z8)j}2dRxXa)0v7nkE1M00v@9M??Uy0Q>;N$x}ae00009a7bBm z000iZ000iZ0XPLyBme*a2XskIMF-;q9Tg%RqN$Pk0002PNkl%wSiq-|U@YJR=o;tRR->du7IHNb w?E+jHF)|Y@C0aCwFlaj&5*yS=a<;_<08HLo`;Azh_5c6?07*qoM6N<$f{Ads!T&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f}k diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/long_edge.png b/src/main/resources/assets/effortlessbuilding/textures/icons/long_edge.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..45a51858c4a08d735641db65af1e90869db6f9c3 100644 GIT binary patch delta 1121 zcmV-n1fKiL0`&-xBYy+3dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O?N!lIti8 zh5xgPSpt#}g5_WXRkMRx{v0rII*;yqJDm;{gJmqq=My+_?Z1D!`v)KP!Y-(#m}B(# zgd8##43a-SM^8S?<2vz|!HwOW7Z@f%FUM(YYkq-UuQym&_J8fx?rdLv(sFe1yd27i z%owbBX*m);?6l5ZUiX#o;c?bC+p?`|_vgVNMpZvG;wB^>$26h{GLS3isdpn-4 zgb1agTMu=4lz%zG#0^r)ye*;`zKXHUmeCR(aR;#qnj6~gC=)~NPJt>F>eObx(~cAa zH#YRlJIk~sG0wbCC}A|}Y`{~UBv9EwOPu6d`p)J))Q$fDR)0WHr_2ctSp0Ul*p#ldC6lvY zp8DWcxs%o901_d#A{i18@R39*k~d}}f{qD%3NmL2ynz6zawXTnMkE4G;t?D77|pq? ze3-Gd0E9}!B1vNb0agf#`mvBuLq$b{Q`M-ZNwbzHF+`0qS{!>+F|lB3(ae%%D@jsF znqsn)Qh!b*a~5o2nqxMXQ_i^*1TAn~aCgCsQa0XX3!83nvn_3TD?7?(54-Mhw>|B7 zFO{oQEdLs-xteOOrBOpEwa~Q1W-YbcN=L1A>7i?n-FoV|my_C}dP|M&$bC(X7PUbv z%z1XD2D9141&!@Q2Qv`kKp<{|01BE1GoL5~9)IKpGoQzHr3`AM15Twu39UB`av{X2i@lJZVcRzLT znxj_Yy+zA0a_`9IxueIZeWP-3N-f^z{i7NH09pV< zNkl-&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f+re(0ssI2 diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/normal_speed.png b/src/main/resources/assets/effortlessbuilding/textures/icons/normal_speed.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..b7f1ae48234e70680be62745e2a567034c4f6920 100644 GIT binary patch delta 1190 zcmV;X1X=sb0=Ws0BYy+YdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U=HG(&H!$ zh2L34F9Ath#Bwl~s@}mYe-4;9SLeU=JWN%GiovoF;(RiRY5)B0<`+I}T`46;iBR37$*{Mws!`%q!z}+7YPt zQMyD{53P_FkD5jrgWR~n3qYtZP5sn&Hgi)q_6Dqgpnsn-D>j(zwujg}U297wXMvx$ z&a85$SXTf@gta}AAprp!NIV6ykvS4UM+KjZ%vl_7AVA)8CDXx1Bmj=`SQ~R9O<(rB zn{l)NgqI)@Xz&67mUABU6P==lvKQ}+_dfXO)hC~W1Q&b=A%<~AUPMicsm`@=^lQgB2GZxJVoiRJZBj=4b+1%#0u*FTcwB>^GDX#buN-SDZ z$(5^Ay#6)RXsXs!bEAe*YOeVfT5Q@<%N@1WrMvEX=&@^0Js;E-)q866K<+&?TGR$H zH~r$38q6_XLeMx){9p!R>Cc$;>Ks>%s}@i$eDp|k$dL$f?Cb<7eywZ@fHqEt#ll0aA=xY^Y~5rc5i+f z;Qtb+-xy;im z$ZckZzeb(QzJsDNejDDZWxh~zZ`Cq)HGfvNT?72BDBDV$ZFjCmJ$$IWDzKj&Y&VLT zd&y1}lG>iswDCqZ^EG+SWiy9v)$M!lzI4$OV&{38?;IJgdUMb7dNk$yWb*!OV}DK~ z`!~>k7f3q(DJAnSW%J*yEg3R|00006VoOIv0I&ek0Q}Q}>;eD)010qNS#tmY4u8J@ z01m$aI0aKA00007bV*G`2jc`C6&DB^LWeN`003!8L_t(I%VS^|lt5Ec^S`F1=6_<; zGU1X~yZ;&kF^1qY;MS|ZL>a<_Pm&lzm=YuU}^* z*?^7f*D;(}QIAzKK?4YB#+#558y{B@otP*}iNgQ@0F<;lfDU=nivR!s07*qoM6N<$ Ef}+qXwg3PC delta 278 zcmV+x0qOp^3CjYIBM<-vVoOIv0RI600RN!9r<0Qq1Rs9_2m%2oT;=FT0002kNkl&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f(W;L=Kufz diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/open_modifier_settings.png b/src/main/resources/assets/effortlessbuilding/textures/icons/open_modifier_settings.png index 80c2180dd7b52e661a0439408125e3378dec69c4..2bdf91eb7c52028a83161b8dcf906b9e81dea511 100644 GIT binary patch delta 1048 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 delta 1205 zcmV;m1WNnx3D*gbB!AF)R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N})t6hA>nIFG z{~1LO!IBV<;b0zX^$hOt`#^}Dhm$zf^>ahT5E&%-Y(Y|{{`t3=fAHePT4U7*7oA)1 zve8CP7=-2Wy7aWzah)HQ>)_6Awi^tSpqI->SLgf$yY36ToqzWA-fn!Je!_Hg^*kL) zkIWd%d0{#dzSwDgHgT>?_U3WsJNjvx_Z~l64>5|upRnO7Bnz&gM-gNoQ4)H=l|=b! zVez=CxMS_iHhd6o8$D>Zq-mFXDa_*L1oxoPw38ldHxzoHc8z>@qv{soNxRlcXsuqJ zE?EbqoS6@GeSefO!o(F)%2?*mJl=}2A1$Hwsrf!xSuzv!AI%E!bz_hFv7pu}zf+o05Se-BA9bp$uxI9ZsQ63I z|JT7^=13~X7i**z_dE+$<9;EV-kUek&-Nor^W~b1n(kv%&EjuwnqSiT(9w;cr{quR z6MufGs%Nt@r|>>RzcYn0M&?aEE1%C$%pT+2wAYz*l2nJ-ss9p9hkf(mOnN=eRU=9H zN77sqf<|u=dY$02j%H8gOwE+a$A$fl+VWZXn=H)hbiOMo^Ic&dXY+cm9c6WRchAav z6y&a2jl zGoz{!Kzgb=|D#Ki0Jwx#J5kjsikaOgtSaE69sATKiV)&Hvf`Td&)?nrg@bJj#(9k)ggLXDAyF5x^Y*-HApwY6Ef3DqB=s@kV^1~OlTebJcop!x%vG=y` zF1rAwf?1ooY=32r;8-A~%xM9q;?HBO^GrA+wpc-I1I>c78cM`ayOX1hGIeV6Ua2BQ z$Bh+t=E^c{QIr$c31!IdsIvmkW+Z|{1vP=0ues1%H_i1bMXbCLJed%TFyqTWfbGppQ5w-o>qVQr6ONI<{_5>J7wGAj{ujNp@zIf|SM2$1)@k?CL~5&$RiSQ~Sc zrZ0Qm&1fwE;U$Oy4IUuCa?YcE)J4=#_TruK-UqKf`s8zv;DQe!Xc#>ztEf}2K~*?&mR@gO&t*)-afXHX+Q;A}LAfuL)| zzSEW6joi1~jCXHw<1=z*p!+Y#nSpMR`^xPJwJpzI6q$g=Q#drW($U!9&|>D8$8XZd zck|l-uLWv3yc)_}ruh83tjv?uJDAR454NLMycB7Q9d@xh)$ZblxtUjTIV^P==(XuT zWPfVjV)jii^OMxC=4C!E!b85#w${Cj0hdjsHmPN0$hN!FVlY3`zAb(3+p@Vy(|2pz z&|j+VIpx~a&LQ4r4tHt3>|Ryz5`nk7aN>ELf!=hPTk1Zypx>bBEDd68CZ7j74M01` zRwUJ{MsGhL_l0t&hIuN-S z*9XjR`_OS~FXwgEe$N8E-G0r-?d-6Wc{RdM&*UF%wfsJ_|Ltw$N8#||g@4n{zZEzC zO-U*#Qvd(}24YJ`L;$b=(g6I^g6sm5Ap{?P1RWJD7&}LJZ2$lOqDe$SR5;6HV4x5% zViVNV)clW4{QC9lj06qP)YSanzVb3w+bY9#F$`hErMWU(7ezC&I5wA{7=q0Unwpyb zH(dIIA;*HxpXiD=u3v{YjIc^-YHI$!_TvBl4VV6)V629~6caK8uV!3|a2ZaLGqGtz zW<(dXh-hRuv7(+}0>T-9xcrDKdRed;)V}gELuI(`e;f(vKeCIco0Q4POcVnE*;b&{ TYRvwc00000NkvXXu0mjfyS`$2 delta 1242 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 diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/thickness_1.png b/src/main/resources/assets/effortlessbuilding/textures/icons/thickness_1.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..7268df39ae35d21363164d57d6f197d6f1502173 100644 GIT binary patch delta 1171 zcmV;E1Z?}u0;UO&BYy+%dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+TE5}vhyem zh2OP`UIIdhVL6zg>fb>xzYjKXoWxG<(EZY;Vz3NCoKN6T`}^z?-&2iZsmNS1TOxt|-{Okh6s0x2#$u?mzxW_SzAOcB}Q9InNq|r$P zZMWW8;<l3JFF$4L@cp@SOv`mr4T2!P`k6^%9%U2wJux` zqO;8g)YcX&t1U{f$(9w08-=?Kz*9*gs1#5WnC%`5uk)sLzQPeRS4L0EaK;$%Qs~V1 zld?PNeWWh4iMv*a%Z{8z7=zrnqZfd1pPK5b?^@`PH-F{;RzOf!nIjgM&9b>zl<&DE zD`!DJHI8PwbEwk+B*NT^U|2xFcot>PCRiJop<@J}jL5AxyMO?z+RD_yM#KY7v}10J z3B2~TYBw{E7JyLk5`YF92(X+}DQ8TY;W}eR<0o?O zsqv&Xh`F_2xKo2UgqsT<$B7PRAZ8tdco+nb(0_I?Gm)LMgWO?pxgK6*(H{{ta?8&`ol$+)k*~ynaz+1vGZy(9}rB!G;bkW*hVP zCjGdk-#YleI%?V9EOawz{#{h`ZkCI>FE6w9NH4>F7#lsr(2?u>=9;d{U zrK#>O{nN`^O@eLyJnl9Nnl|mtrEH-r*x16GXl;>HRtf1;LmUF1QXuK0h;*Jhr(j+< z9HpcWTIPJA$*V?pB~L{9H2f|ieN^!vB7efWl#KLxiySgO#OF|IcyvlfLGYMFzB}N*aQBmHaD^M4PC z00006VoOIv0M-EL0RMFbUlRZT010qNS#tmY4!-~Z4!;371ydvd000McNliru;{+WQ zD-x8`2ebeH05?fQK~y-)V_+EGKvPrmzow?djFD27>{#ONn#?00PAjChL6FnhXE{002ovPDHLkV1fgqF~$G@ delta 278 zcmV+x0qOpx3CjYIBM<-vVoOIv0RI600RN!9r<0Q}1Rs9_2m%2oT;=FT0002kNkl&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f)dw#^8f$< diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/thickness_3.png b/src/main/resources/assets/effortlessbuilding/textures/icons/thickness_3.png index bcf4a2251e02f0a5e2258787f15b725d37a6ac16..63ece943d28c164f71499cb24f133e008242dfc7 100644 GIT binary patch delta 1172 zcmV;F1Z(@t0;dU(BYy+odQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+TE5}vhyem zh2OP`UV-@OOh-4*)1mg6 z1rM`dn2uC7JI{BDb6he{%bCCEr){O}p-;pvBD&?x4}Mvpv^tD0HB9n|ap&M}B#}p0sPNgx2b| zx?~)bax@opTYt)ULdO+S>KNvRO9#{ebuSSmV2K&T3TUn|{v1bdc7MPZGbFo@} z(O0Z&W*jX5Vb!Sz8f+lIGR7i*ya~vmWYrq7);jBLu+b)`&N%Cw^RAy!$*VWsdgr|l zKKc|in15h{3qFJpLy8g=N0^N+dWs>&m=Y#UaGfwZp+`!qth$=ju5R^fSmT;9(kGj2 zv&%k*9CIpCv|#%eS3H$aVo8-NQmLA1tE;|-8f$9EwWiH9+g$T4wAj*}+N8Rt#s_kL zrpA+6CuT-J|DXo5_cs^Zj}zOOftVNuao-6bp?{?_TLK#+om^+O#C}{^0X4QAPT@`r z1WjeJjqmIpqy8nV4b##;5E4LGBC5h z*MB%S6Lyi&n<3#I>4y>0P95xlt+f{H#N&YMdo9>;)oZou_LjXC(Tcq`-tpI9*8P+? zSgN)6#$)$eO^R)P-lTQS+oUVD@=Ggka@AF1hIq77FQqFzTC}g?b#3T_6!}O(y3i0Y zo-h0;Ank0$T@I6YE+JiLcp>3KGCJ8BPk(vk!*QbG&qbu)CE{c0bd_k2JkwI&Zrhyb zH9x)!k2>Ud1?z+GXcylv!lRcQ{5ZUQn6zhGzYgzWi+mm)UCO$=97U%m554KU{IsTT z2maR4X(n|t^I)s%+aoc2_I;xtd(?2HHb7HT^MCuw%P3-%;ksB2VZr4BH8Ey5`_`+!IK99` mX&8(eFc=J=I3*4|005qo5*A{Z{SEd20000&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f&~kGaB^>EX>4U6ba`-PAZ2)IW&i+q+TE60lIti8 zhTpY{Spt#(!E(4(ogK{bM_}Tl9Xm;PpQj1c2FpUo|0i%m`}a?WfAmL23|J?@NAHdP zY_yS*4uaW!TaU)h>$)+w!52I14@ga{J#V+ZE&rr;cb_13*?;p_J4jh^!U}YYyaMuA znRKxH!V1K+*>T-NT=SBBc%AhZW!cuV_$`|u#%K00V;(z5ecDZu#U;13!tJGyi2ra}j5x0UITk(kHdgLb{w(0kk7 zE?KWic~~!Xdw-QVQpc=P@|@%7kJ^!%m`jDsWH|MX9lxY0m}cx^b>oFzCt^)ss+zq0V?}aAy2T z+XMAJN*B?DT`SFtMonuPgWR~Pmjc1QG<8$o+2Dbad4B-QO3+Q2gT7!gc?*#p-fN2| zXI4LFEUa=zsVjg=q-#4(23ZLhkL=K+5h6iU9fR^onmMthtOU?Gst8@#Fnfg)XsoSs z1g9@K+RS>iC^iW4s) zL87F0RRkwfjRiK6%YiiiEl$vd>`6ey2*izS8>)dU3-FNAs$DVd-i|SWucp&$h z8ZK&sn4Nxdr>16+TL>J-i5tw67+F-}G6-lv(|=%Q0$NLh++b$nIIbKiHFN_`#X(F7 z+J@vh?(FX5UUCCxzr~HN$iYDOH^{+2x5zznJE2z7{G#v#GO&wZD6w>%6 z{kVtU2Kc`QYRTU$a5K5|yR6_b>W6*LPpkF-PhmdK?VdtU5jJc0rt8W1X-d&=mDjO! z8-HeoaN!#E)!t_~GlP{{->j|b4t$qTkr&C;CP zANs??TMw+;{5UU{ZON=#*j!B9y>XKZTIN`e>ZOz}b#~9<4UyooL>~11L_&C@;Y~u# z@#58%fbhju{iQp_*Al`T4c|z3mkds}#(zWUOE@l27%l2L)l5@Wah{q1{f63$|~R-?MOVR(_X)T?=^6=&qzH_XFYJb?tqA?!t>N%(r^@ z$*F(V!(aN)eirDgfH>2RZV-XVK8dIU@(B1Rs9_2m%2oT;=FT0002kNkl&vpBs;KIh;1$>ssVe*jtcf~+ zbzK1%$MJekCx0AA{SaS?O7Qj;o<%h<$A}2tdj$v~Tn6-gf9dnyldrV{*tX4l7n-6H z3?Z1jx?fvpiApe~L`vzgg%~3M!!Xol)Dp~@rs*Nbf8#vQ7ty}&w7{R_Ct0=_BO*eK cv05+NC!&QMYn#IavH$=807*qoM6N<$f)kg0^8f$< diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/undo.png b/src/main/resources/assets/effortlessbuilding/textures/icons/undo.png index 8882682cd64daf66870ff049b701178ec15336dc..b8dec761ce37da348161e310a85ca4f07d6770fa 100644 GIT binary patch delta 1270 zcmVoyGh zuT%60A}Q+QII=!~-k`_tNS2+A6YuWZ7AOk52(e_E8d5VfvuoO4e|GZ+K5W$+ry=^} zy~W2RmpEe)?f%(kvTk12jXf4mc5^;pm;|%zx4td^47)xy1b?^e+q2z-vT))8I*=Ej zjL3||@{0>dc(>EKH)-w5?!$4`H-%+e&#w0_fQ+iZ6E@t0#Nrx96hQ`(Bx82CiVUYQ zh9yjkyywoG%L{qu>cXAP%P!AU80(jVzi_ndr0=<#3|&+^B0oLobcT50uJ;;yZ~N)8 z^I*!Gb*SSgbAJWL4OH%Ic#MFrVjbp47!gM-P^?1D4Wk%J#9+IVqe_`NwK*3mNYQcQ zfSI|lOk0$|iOUqljX|9Q9yN_LhH~QyF9MZb6 z>&z;53UvX1BE(iCLjnb?CsFcb19Kn(j}iK0WX|Gvg94<=l}v{=A|B#I9!UT z7d84AVtvbjw+zlAMsY0CxWQ(V#FODM6V zk}FrKc>Sxd!PHn&&5asLskx@jx6oosEqByfm+rcD-$Rc*^?a(fRDD*BF3Nqb8ZFg^ zVs83{hiWi~a6r&#Cpt8PV(bWthoJxpnulgKl7DkNlpC7a#CR!`p&IEBr_xXi3c5zD zolfl@%6+PvQTI!_@ttyJNcV3jXNGi3xmVrZs8;j*MUg4ccnb%oRyrCR99qmA^Y~5r z@ofGnz;B@c9Z<{uu$Zr0HGdD(d_?_n^Q&*i%Qly$d)v{)Z+7-gN0G4f?n{9XQwvM{W0t!+Z8rGhS=M%H(Q)D#J^}wJL9zI*y zeKvHrb0_TwZ=0m@hP}>flPOUuJ&^6qEPs!H)h$xBbcqM=<^%CJMf1$@RltLDvq*n` za{J90`I?)AkE35sF1M7Ln-EVNe^qLeqwjTzuj|y@k$6Yy9jE4(NWCu#YkmrGRo47C z8~YpRKLir|@q~Z1&EM@o=}N>S{1yNJ00v@9M??Uy0MY>b(}L^*00009a7bBm0Dk}u zzW@LZzX3P}QzQTY00(qQO+^Re1RWL!ArN%4RR910w@E}nR5;6HU>F6AxFj?+HRTx? z7#<*tUB7-ELp`IWrsjWiNtjss%F8HM^|LA8#0hVj-iZrsn^(`>!!DFfcIOdi57>>xmWh7=G5& z)ckJ|(a7K*7=-YWrl#iqYcKx8@rFx({=>omN8tWXY+QvLC>$sWL!HeB&4;UsvFOOSShJS)x_X*w(`+xjuH+~s$!U(iR9s#9g zW(n!lo z$(m8_geNcaFVOTrH~GHWcU%RK1 z!!+OE^McMDpgEE91t?e0%sqvlAnnkMd|uO+db1aK2RZq#Gjt9V)=bIUL^E<8p?_^FKWak)#MSfb$j``I$0lz-Gu2>{Ph%4^l!ee+iUJSIcyy(hDX zY@kONMTG8N0Wb>37zq%1cxN|~G)6N5pqbIksHy~zj;hXlOgRAoQPo*|vX>pQ0@g_` rmYW+K0pCK>