From 59903addd7a38b36ec2ab4f59952dd1887468c0f Mon Sep 17 00:00:00 2001 From: LazyFleshWasTaken <40587985+LazyFleshWasTaken@users.noreply.github.com> Date: Wed, 18 Feb 2026 16:12:59 -0800 Subject: [PATCH 1/6] update buildscript --- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 23449a2b54..37f78a6af8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 32896c7a9f..d1af453238 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.18' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.20' } From b150df9da659365ef2d180652bcf140a009e77c5 Mon Sep 17 00:00:00 2001 From: LazyFleshWasTaken <40587985+LazyFleshWasTaken@users.noreply.github.com> Date: Wed, 18 Feb 2026 16:36:45 -0800 Subject: [PATCH 2/6] Add config for max relative block strength/hardness --- src/main/java/tconstruct/library/tools/HarvestTool.java | 4 +++- src/main/java/tconstruct/util/config/PHConstruct.java | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/library/tools/HarvestTool.java b/src/main/java/tconstruct/library/tools/HarvestTool.java index a6f8b97167..98c272be8e 100644 --- a/src/main/java/tconstruct/library/tools/HarvestTool.java +++ b/src/main/java/tconstruct/library/tools/HarvestTool.java @@ -231,7 +231,9 @@ public void breakExtraBlock(World world, int x, int y, int z, int sidehit, Entit float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); // only harvestable blocks that aren't impossibly slow to harvest - if (!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f) return; + if (!ForgeHooks.canHarvestBlock(block, player, meta) + || refStrength / strength > PHConstruct.HarvestToolAOERelativeStrength) + return; // send the blockbreak event BlockEvent.BreakEvent event = ForgeHooks diff --git a/src/main/java/tconstruct/util/config/PHConstruct.java b/src/main/java/tconstruct/util/config/PHConstruct.java index 8f0aeb255c..3f6e2be22e 100644 --- a/src/main/java/tconstruct/util/config/PHConstruct.java +++ b/src/main/java/tconstruct/util/config/PHConstruct.java @@ -71,6 +71,12 @@ public static void initProps(File location) { miningLevelIncrease = config.get("Difficulty Changes", "Modifiers increase Mining Level", true) .getBoolean(true); denyMattock = config.get("Difficulty Changes", "Deny creation of non-metal mattocks", false).getBoolean(false); + HarvestToolAOERelativeStrength = config.get( + "general", + "AOE Harvest Max Relative Strength", + 10, + "The maximum relative strength of the blocks in the aoe of the tool compared to the broken block to still mine them") + .getDouble(10); craftEndstone = config.get("Difficulty Changes", "Allow creation of endstone", true).getBoolean(true); redstoneFaucet = config.get("Difficulty Changes", "Allow Faucets to be activated by Redstone", true) .getBoolean(true); @@ -439,6 +445,7 @@ public static void initProps(File location) { public static boolean consumeXPBerryStacks; public static boolean disableAllRecipes; + public static double HarvestToolAOERelativeStrength; // Mobs public static int naturalSlimeSpawn; From d473b5c908de3384b61549d7452088e2251a3d84 Mon Sep 17 00:00:00 2001 From: LazyFleshWasTaken <40587985+LazyFleshWasTaken@users.noreply.github.com> Date: Wed, 18 Feb 2026 18:07:16 -0800 Subject: [PATCH 3/6] Add allowance to aoe break for extremely fast tools --- src/main/java/tconstruct/items/tools/LumberAxe.java | 2 +- src/main/java/tconstruct/library/tools/AOEHarvestTool.java | 3 ++- src/main/java/tconstruct/library/tools/HarvestTool.java | 7 +++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/tconstruct/items/tools/LumberAxe.java b/src/main/java/tconstruct/items/tools/LumberAxe.java index e3e2a194cd..596719502b 100644 --- a/src/main/java/tconstruct/items/tools/LumberAxe.java +++ b/src/main/java/tconstruct/items/tools/LumberAxe.java @@ -266,7 +266,7 @@ public void onWorldTick(TickEvent.WorldTickEvent event) { cancelHarvest = true; } } - if (!cancelHarvest) tool.breakExtraBlock(player.worldObj, x, y, z, 0, player, x, y, z); + if (!cancelHarvest) tool.breakExtraBlock(player.worldObj, x, y, z, 0, player, x, y, z, 1F); left--; } diff --git a/src/main/java/tconstruct/library/tools/AOEHarvestTool.java b/src/main/java/tconstruct/library/tools/AOEHarvestTool.java index a73fa708ee..ebfc5759a3 100644 --- a/src/main/java/tconstruct/library/tools/AOEHarvestTool.java +++ b/src/main/java/tconstruct/library/tools/AOEHarvestTool.java @@ -65,6 +65,7 @@ public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPla zRange = breakRadius; break; } + float miningSpeed = getDigSpeed(stack, block, meta); for (int xPos = x - xRange; xPos <= x + xRange; xPos++) for (int yPos = y - yRange; yPos <= y + yRange; yPos++) for (int zPos = z - zRange; zPos <= z + zRange; zPos++) { @@ -76,7 +77,7 @@ public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPla if (!AoEExclusionList.isBlockExcluded(toolName, targetBlock, targetMeta)) { if (!super.onBlockStartBreak(stack, xPos, yPos, zPos, player)) - breakExtraBlock(player.worldObj, xPos, yPos, zPos, sideHit, player, x, y, z); + breakExtraBlock(player.worldObj, xPos, yPos, zPos, sideHit, player, x, y, z, miningSpeed); } } diff --git a/src/main/java/tconstruct/library/tools/HarvestTool.java b/src/main/java/tconstruct/library/tools/HarvestTool.java index 98c272be8e..d555d50c3e 100644 --- a/src/main/java/tconstruct/library/tools/HarvestTool.java +++ b/src/main/java/tconstruct/library/tools/HarvestTool.java @@ -210,7 +210,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int } public void breakExtraBlock(World world, int x, int y, int z, int sidehit, EntityPlayer playerEntity, int refX, - int refY, int refZ) { + int refY, int refZ, float miningSpeed) { // prevent calling that stuff for air blocks, could lead to unexpected behaviour since it fires events if (world.isAirBlock(x, y, z)) return; @@ -231,8 +231,11 @@ public void breakExtraBlock(World world, int x, int y, int z, int sidehit, Entit float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); // only harvestable blocks that aren't impossibly slow to harvest + // don't exclude blocks that would be broken in 1-2 ticks, regardless of hardness diff + // blocks are instantly broken if the mining speed is more than 30x the block hardness/strength if (!ForgeHooks.canHarvestBlock(block, player, meta) - || refStrength / strength > PHConstruct.HarvestToolAOERelativeStrength) + || (refStrength / strength > PHConstruct.HarvestToolAOERelativeStrength + && refStrength * 15 - miningSpeed > 0)) return; // send the blockbreak event From 383860717b26658d652393ffdfa4fe34f998ea0e Mon Sep 17 00:00:00 2001 From: LazyFleshWasTaken <40587985+LazyFleshWasTaken@users.noreply.github.com> Date: Wed, 18 Feb 2026 18:57:47 -0800 Subject: [PATCH 4/6] fix logic, remove parameter i added but was unneeded --- src/main/java/tconstruct/items/tools/LumberAxe.java | 2 +- src/main/java/tconstruct/library/tools/AOEHarvestTool.java | 3 +-- src/main/java/tconstruct/library/tools/HarvestTool.java | 7 +++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/tconstruct/items/tools/LumberAxe.java b/src/main/java/tconstruct/items/tools/LumberAxe.java index 596719502b..e3e2a194cd 100644 --- a/src/main/java/tconstruct/items/tools/LumberAxe.java +++ b/src/main/java/tconstruct/items/tools/LumberAxe.java @@ -266,7 +266,7 @@ public void onWorldTick(TickEvent.WorldTickEvent event) { cancelHarvest = true; } } - if (!cancelHarvest) tool.breakExtraBlock(player.worldObj, x, y, z, 0, player, x, y, z, 1F); + if (!cancelHarvest) tool.breakExtraBlock(player.worldObj, x, y, z, 0, player, x, y, z); left--; } diff --git a/src/main/java/tconstruct/library/tools/AOEHarvestTool.java b/src/main/java/tconstruct/library/tools/AOEHarvestTool.java index ebfc5759a3..a73fa708ee 100644 --- a/src/main/java/tconstruct/library/tools/AOEHarvestTool.java +++ b/src/main/java/tconstruct/library/tools/AOEHarvestTool.java @@ -65,7 +65,6 @@ public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPla zRange = breakRadius; break; } - float miningSpeed = getDigSpeed(stack, block, meta); for (int xPos = x - xRange; xPos <= x + xRange; xPos++) for (int yPos = y - yRange; yPos <= y + yRange; yPos++) for (int zPos = z - zRange; zPos <= z + zRange; zPos++) { @@ -77,7 +76,7 @@ public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPla if (!AoEExclusionList.isBlockExcluded(toolName, targetBlock, targetMeta)) { if (!super.onBlockStartBreak(stack, xPos, yPos, zPos, player)) - breakExtraBlock(player.worldObj, xPos, yPos, zPos, sideHit, player, x, y, z, miningSpeed); + breakExtraBlock(player.worldObj, xPos, yPos, zPos, sideHit, player, x, y, z); } } diff --git a/src/main/java/tconstruct/library/tools/HarvestTool.java b/src/main/java/tconstruct/library/tools/HarvestTool.java index d555d50c3e..120198fcc0 100644 --- a/src/main/java/tconstruct/library/tools/HarvestTool.java +++ b/src/main/java/tconstruct/library/tools/HarvestTool.java @@ -210,7 +210,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int } public void breakExtraBlock(World world, int x, int y, int z, int sidehit, EntityPlayer playerEntity, int refX, - int refY, int refZ, float miningSpeed) { + int refY, int refZ) { // prevent calling that stuff for air blocks, could lead to unexpected behaviour since it fires events if (world.isAirBlock(x, y, z)) return; @@ -234,9 +234,8 @@ public void breakExtraBlock(World world, int x, int y, int z, int sidehit, Entit // don't exclude blocks that would be broken in 1-2 ticks, regardless of hardness diff // blocks are instantly broken if the mining speed is more than 30x the block hardness/strength if (!ForgeHooks.canHarvestBlock(block, player, meta) - || (refStrength / strength > PHConstruct.HarvestToolAOERelativeStrength - && refStrength * 15 - miningSpeed > 0)) - return; + || (refStrength / strength > PHConstruct.HarvestToolAOERelativeStrength && strength * 2 < 1)) + return; // the Forgehooks method returns mining speed / hardness / 30 // send the blockbreak event BlockEvent.BreakEvent event = ForgeHooks From 7ee8b61d747909e8186170605b1b1a642447286f Mon Sep 17 00:00:00 2001 From: LazyFleshWasTaken <40587985+LazyFleshWasTaken@users.noreply.github.com> Date: Sun, 22 Feb 2026 14:13:31 -0800 Subject: [PATCH 5/6] dont div by zero --- src/main/java/tconstruct/library/tools/HarvestTool.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/tconstruct/library/tools/HarvestTool.java b/src/main/java/tconstruct/library/tools/HarvestTool.java index 120198fcc0..b5c65480bd 100644 --- a/src/main/java/tconstruct/library/tools/HarvestTool.java +++ b/src/main/java/tconstruct/library/tools/HarvestTool.java @@ -229,6 +229,7 @@ public void breakExtraBlock(World world, int x, int y, int z, int sidehit, Entit Block refBlock = world.getBlock(refX, refY, refZ); float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); + if (strength == 0) strength = 0.00001F; // don't div by zero // only harvestable blocks that aren't impossibly slow to harvest // don't exclude blocks that would be broken in 1-2 ticks, regardless of hardness diff From 24a043ead20b5b37cc0547c09792a36f46f293cb Mon Sep 17 00:00:00 2001 From: LazyFleshWasTaken <40587985+LazyFleshWasTaken@users.noreply.github.com> Date: Sun, 22 Feb 2026 15:07:56 -0800 Subject: [PATCH 6/6] dont go negative either --- src/main/java/tconstruct/library/tools/HarvestTool.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/library/tools/HarvestTool.java b/src/main/java/tconstruct/library/tools/HarvestTool.java index b5c65480bd..269f67c110 100644 --- a/src/main/java/tconstruct/library/tools/HarvestTool.java +++ b/src/main/java/tconstruct/library/tools/HarvestTool.java @@ -229,7 +229,7 @@ public void breakExtraBlock(World world, int x, int y, int z, int sidehit, Entit Block refBlock = world.getBlock(refX, refY, refZ); float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); - if (strength == 0) strength = 0.00001F; // don't div by zero + if (strength <= 0) strength = 0.00001F; // don't div by zero or go below 0. // only harvestable blocks that aren't impossibly slow to harvest // don't exclude blocks that would be broken in 1-2 ticks, regardless of hardness diff