From 331f229d9ad8d111fc4656327003e4a0eb999909 Mon Sep 17 00:00:00 2001 From: Henry Otis Date: Sun, 2 Nov 2025 14:57:06 -0700 Subject: [PATCH 1/4] fix: allows lumber axe to chop down trees with horizontal sections --- .../tconstruct/items/tools/LumberAxe.java | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/tconstruct/items/tools/LumberAxe.java b/src/main/java/tconstruct/items/tools/LumberAxe.java index e3e2a194cdd..b71d02c7925 100644 --- a/src/main/java/tconstruct/items/tools/LumberAxe.java +++ b/src/main/java/tconstruct/items/tools/LumberAxe.java @@ -1,11 +1,6 @@ package tconstruct.items.tools; -import java.util.Comparator; -import java.util.Queue; -import java.util.Set; -import java.util.SortedSet; -import java.util.Stack; -import java.util.TreeSet; +import java.util.*; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -118,41 +113,48 @@ public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPla public static boolean detectTree(World world, int pX, int pY, int pZ) { Stack candidates = new Stack<>(); - SortedSet visited = new TreeSet<>(Comparator.comparingInt((ChunkPosition a) -> a.chunkPosY)); + Set wood = new HashSet<>(); + Set nonWood = new HashSet<>(); candidates.add(new ChunkPosition(pX, pY, pZ)); while (!candidates.isEmpty()) { ChunkPosition candidate = candidates.pop(); - int curX = candidate.chunkPosX, curY = candidate.chunkPosY, curZ = candidate.chunkPosZ; - Block block = world.getBlock(curX, curY, curZ); - if (!block.isWood(world, curX, curY, curZ)) { - continue; - } - if (!visited.add(candidate)) { + if (wood.contains(candidate) || nonWood.contains(candidate)) { continue; } - // add the current layer and above - for (int offX = 0; offX < 3; offX++) { - for (int offY = 0; offY < 2; offY++) { - for (int offZ = 0; offZ < 3; offZ++) { - ChunkPosition newCandidate = new ChunkPosition(curX - 1 + offX, curY + offY, curZ - 1 + offZ); - if (!visited.contains(newCandidate)) { - candidates.add(newCandidate); + int curX = candidate.chunkPosX, curY = candidate.chunkPosY, curZ = candidate.chunkPosZ; + + Block block = world.getBlock(curX, curY, curZ); + if (block.isWood(world, curX, curY, curZ)) { + for (int offX = 0; offX < 3; offX++) { + for (int offY = 0; offY < 2; offY++) { + for (int offZ = 0; offZ < 3; offZ++) { + ChunkPosition newCandidate = new ChunkPosition(curX - 1 + offX, curY + offY, curZ - 1 + offZ); + if (!(wood.contains(newCandidate)||nonWood.contains(newCandidate))) { + candidates.add(newCandidate); + } } } } + wood.add(candidate); + } else{ + nonWood.add(candidate); } + + + + } // not even one match, so there were no logs. - if (visited.isEmpty()) { + if (wood.isEmpty()) { return false; } - ChunkPosition topmost = visited.last(); + ChunkPosition topmost = Collections.max(wood, Comparator.comparingInt((ChunkPosition a) -> a.chunkPosY)); // check if there were enough leaves around the last position // pos now contains the block above the topmost log From fb5781367cefef91c3361b91b3b2a47465f7166f Mon Sep 17 00:00:00 2001 From: ohentis <87791199+ohentis@users.noreply.github.com> Date: Mon, 3 Nov 2025 12:40:00 -0700 Subject: [PATCH 2/4] Fixed star imports --- src/main/java/tconstruct/items/tools/LumberAxe.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/items/tools/LumberAxe.java b/src/main/java/tconstruct/items/tools/LumberAxe.java index b71d02c7925..34a9eaea37e 100644 --- a/src/main/java/tconstruct/items/tools/LumberAxe.java +++ b/src/main/java/tconstruct/items/tools/LumberAxe.java @@ -1,6 +1,11 @@ package tconstruct.items.tools; -import java.util.*; +import java.util.Comparator; +import java.util.Queue; +import java.util.Set; +import java.util.SortedSet; +import java.util.Stack; +import java.util.TreeSet; import net.minecraft.block.Block; import net.minecraft.block.material.Material; From 489bd33299637c3f36bef6b12f42207114a50e1a Mon Sep 17 00:00:00 2001 From: ohentis <87791199+ohentis@users.noreply.github.com> Date: Tue, 4 Nov 2025 08:54:44 -0700 Subject: [PATCH 3/4] Actually fixes imports --- src/main/java/tconstruct/items/tools/LumberAxe.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/tconstruct/items/tools/LumberAxe.java b/src/main/java/tconstruct/items/tools/LumberAxe.java index 34a9eaea37e..66b7e4660a7 100644 --- a/src/main/java/tconstruct/items/tools/LumberAxe.java +++ b/src/main/java/tconstruct/items/tools/LumberAxe.java @@ -6,6 +6,8 @@ import java.util.SortedSet; import java.util.Stack; import java.util.TreeSet; +import java.util.HashSet; +import java.util.Collections; import net.minecraft.block.Block; import net.minecraft.block.material.Material; From 8e2aa0d835aa6e5a6c33998756c328c0a2c92b6f Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 8 Nov 2025 13:58:53 +0100 Subject: [PATCH 4/4] sa --- .../java/tconstruct/items/tools/LumberAxe.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/tconstruct/items/tools/LumberAxe.java b/src/main/java/tconstruct/items/tools/LumberAxe.java index 66b7e4660a7..74e77dc8391 100644 --- a/src/main/java/tconstruct/items/tools/LumberAxe.java +++ b/src/main/java/tconstruct/items/tools/LumberAxe.java @@ -1,13 +1,11 @@ package tconstruct.items.tools; +import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.Queue; import java.util.Set; -import java.util.SortedSet; import java.util.Stack; -import java.util.TreeSet; -import java.util.HashSet; -import java.util.Collections; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -139,21 +137,21 @@ public static boolean detectTree(World world, int pX, int pY, int pZ) { for (int offX = 0; offX < 3; offX++) { for (int offY = 0; offY < 2; offY++) { for (int offZ = 0; offZ < 3; offZ++) { - ChunkPosition newCandidate = new ChunkPosition(curX - 1 + offX, curY + offY, curZ - 1 + offZ); - if (!(wood.contains(newCandidate)||nonWood.contains(newCandidate))) { + ChunkPosition newCandidate = new ChunkPosition( + curX - 1 + offX, + curY + offY, + curZ - 1 + offZ); + if (!(wood.contains(newCandidate) || nonWood.contains(newCandidate))) { candidates.add(newCandidate); } } } } wood.add(candidate); - } else{ + } else { nonWood.add(candidate); } - - - } // not even one match, so there were no logs.