From ef3f46cf4db9bda97529de32a805c8015ad40452 Mon Sep 17 00:00:00 2001 From: Minepolz320 <42765118+Minepolz320@users.noreply.github.com> Date: Sun, 28 Jan 2024 01:45:22 +0500 Subject: GT Tool Fixes and ore balance config (#2453) * Fixes/balance config Fixes that the ax and saw do not break ladders - ability to toggle ore multipliers for ore Nether and End - sneaking with a scythe/plow allows you to break only 1 block * Fix copy paste typo * Revert "Allow tools to break stuff with a lower harvest level (#2435)" This reverts commit ba1a9b290a09e39b100ff8d9f1f5e70cdc3f0fab. --- .../gregtech/api/items/GT_MetaGenerated_Tool.java | 5 ++- src/main/java/gregtech/common/GT_Proxy.java | 3 ++ .../gregtech/common/blocks/GT_Block_Machines.java | 15 -------- .../java/gregtech/common/tools/GT_Tool_Axe.java | 6 +++- .../java/gregtech/common/tools/GT_Tool_Plow.java | 39 ++++++++++++++------- .../java/gregtech/common/tools/GT_Tool_Saw.java | 3 +- .../java/gregtech/common/tools/GT_Tool_Sense.java | 40 +++++++++++++++------- .../loaders/oreprocessing/ProcessingOre.java | 22 +++++++++--- .../java/gregtech/loaders/preload/GT_PreLoad.java | 6 ++++ 9 files changed, 90 insertions(+), 49 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java index 2526faa0aa..de6ca996d5 100644 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java +++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java @@ -686,13 +686,12 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item if (tStats == null || Math.max(0, getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) return 0.0F; return tStats.isMinableBlock(aBlock, (byte) aMetaData) ? Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) - : 1.0F; + : 0.0F; } @Override public final boolean canHarvestBlock(Block aBlock, ItemStack aStack) { - IToolStats tStats = getToolStats(aStack); - return tStats.isMinableBlock(aBlock, (byte) 0) && getDigSpeed(aStack, aBlock, (byte) 0) > 0.0F; + return getDigSpeed(aStack, aBlock, (byte) 0) > 0.0F; } @Override diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index bc11eca160..978b0caf9a 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -632,6 +632,9 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { @Deprecated public boolean mEasierIVPlusCables = false; public boolean mMixedOreOnlyYieldsTwoThirdsOfPureOre = false; + public boolean mRichOreYieldMultiplier = true; + public boolean mNetherOreYieldMultiplier = true; + public boolean mEndOreYieldMultiplier = true; public boolean enableBlackGraniteOres = true; public boolean enableRedGraniteOres = true; public boolean enableMarbleOres = true; diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java index b2d62e3f3a..af41710054 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java @@ -37,14 +37,12 @@ import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IDebugableBlock; -import gregtech.api.interfaces.IToolStats; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IColoredTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.items.GT_Generic_Block; -import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.BaseMetaTileEntity; import gregtech.api.metatileentity.BaseTileEntity; @@ -74,19 +72,6 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo this.useNeighborBrightness = true; } - @Override - public boolean canHarvestBlock(EntityPlayer player, int meta) { - - ItemStack stack = player.inventory.getCurrentItem(); - if (stack != null && stack.getItem() instanceof GT_MetaGenerated_Tool gTool) { - IToolStats tStats = gTool.getToolStats(stack); - if (tStats == null) return false; - return tStats.isMinableBlock(this, (byte) meta); - } - - return super.canHarvestBlock(player, meta); - } - @Override public String getHarvestTool(int aMeta) { if (aMeta >= 8 && aMeta <= 11) { diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Axe.java b/src/main/java/gregtech/common/tools/GT_Tool_Axe.java index 787803911b..c54ebac3c9 100644 --- a/src/main/java/gregtech/common/tools/GT_Tool_Axe.java +++ b/src/main/java/gregtech/common/tools/GT_Tool_Axe.java @@ -6,6 +6,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; @@ -94,7 +95,8 @@ public class GT_Tool_Axe extends GT_Tool { @Override public boolean isMinableBlock(Block aBlock, byte aMetaData) { return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "axe") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.wood); + || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.wood) + || GT_ToolHarvestHelper.isSpecialBlock(aBlock, Blocks.ladder); } @Override @@ -118,6 +120,7 @@ public class GT_Tool_Axe extends GT_Tool { @Override public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) { + if (aBlock.isWood(aPlayer.worldObj, aX, aY, aZ) && OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData))) { float rAmount = 1.0F; @@ -132,6 +135,7 @@ public class GT_Tool_Axe extends GT_Tool { } return 2.0F * aDefault / rAmount; } + return (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine) || (aBlock.getMaterial() == Material.plants) || (aBlock.getMaterial() == Material.gourd) ? aDefault / 4.0F : aDefault; diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Plow.java b/src/main/java/gregtech/common/tools/GT_Tool_Plow.java index 341239c128..b6f4be25b5 100644 --- a/src/main/java/gregtech/common/tools/GT_Tool_Plow.java +++ b/src/main/java/gregtech/common/tools/GT_Tool_Plow.java @@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent; import gregtech.api.interfaces.IIconContainer; @@ -40,28 +41,42 @@ public class GT_Tool_Plow extends GT_Tool { || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.snow, Material.craftedSnow); } + @Override + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, + int aX, int aY, int aZ) { + // Speed nerf for using AOE tools to break single block + if (aPlayer != null && aPlayer.isSneaking()) { + return aDefault / 2; + } + return super.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, worldObj, aX, aY, aZ); + } + @Override public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { int rConversions = 0; if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP))) { this.sIsHarvestingRightNow.set(this); - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - for (int k = -1; k < 2; k++) { - if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() - .getDigSpeed( - aStack, - aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), - aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) - > 0.0F) - && (((EntityPlayerMP) aPlayer).theItemInWorldManager - .tryHarvestBlock(aX + i, aY + j, aZ + k))) { - rConversions++; + + if (!aPlayer.isSneaking()) { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + for (int k = -1; k < 2; k++) { + if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() + .getDigSpeed( + aStack, + aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), + aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) + > 0.0F) + && (((EntityPlayerMP) aPlayer).theItemInWorldManager + .tryHarvestBlock(aX + i, aY + j, aZ + k))) { + rConversions++; + } } } } } + this.sIsHarvestingRightNow.set(null); } return rConversions; diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Saw.java b/src/main/java/gregtech/common/tools/GT_Tool_Saw.java index 204fbc4aae..b2c85e2a5e 100644 --- a/src/main/java/gregtech/common/tools/GT_Tool_Saw.java +++ b/src/main/java/gregtech/common/tools/GT_Tool_Saw.java @@ -110,7 +110,8 @@ public class GT_Tool_Saw extends GT_Tool { Material.wood, Material.cactus, Material.ice, - Material.packedIce); + Material.packedIce) + || GT_ToolHarvestHelper.isSpecialBlock(aBlock, Blocks.ladder); } @Override diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Sense.java b/src/main/java/gregtech/common/tools/GT_Tool_Sense.java index f5d3f7147a..013c0f800c 100644 --- a/src/main/java/gregtech/common/tools/GT_Tool_Sense.java +++ b/src/main/java/gregtech/common/tools/GT_Tool_Sense.java @@ -11,6 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent; import gregtech.api.interfaces.IIconContainer; @@ -38,28 +39,42 @@ public class GT_Tool_Sense extends GT_Tool { || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.plants, Material.leaves); } + @Override + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, + int aX, int aY, int aZ) { + // Speed nerf for using AOE tools to break single block + if (aPlayer != null && aPlayer.isSneaking()) { + return aDefault / 2; + } + return super.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, worldObj, aX, aY, aZ); + } + @Override public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { int rConversions = 0; if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP))) { this.sIsHarvestingRightNow.set(this); - for (int i = -2; i < 3; i++) { - for (int j = -2; j < 3; j++) { - for (int k = -2; k < 3; k++) { - if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() - .getDigSpeed( - aStack, - aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), - aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) - > 0.0F) - && (((EntityPlayerMP) aPlayer).theItemInWorldManager - .tryHarvestBlock(aX + i, aY + j, aZ + k))) { - rConversions++; + + if (!aPlayer.isSneaking()) { + for (int i = -2; i < 3; i++) { + for (int j = -2; j < 3; j++) { + for (int k = -2; k < 3; k++) { + if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() + .getDigSpeed( + aStack, + aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), + aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) + > 0.0F) + && (((EntityPlayerMP) aPlayer).theItemInWorldManager + .tryHarvestBlock(aX + i, aY + j, aZ + k))) { + rConversions++; + } } } } } + this.sIsHarvestingRightNow.set(null); } return rConversions; @@ -95,4 +110,5 @@ public class GT_Tool_Sense extends GT_Tool { + aEntity.getCommandSenderName() + EnumChatFormatting.WHITE); } + } diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java index 40bfc41223..945ffae386 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import net.minecraft.item.ItemStack; +import gregtech.GT_Mod; import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; @@ -35,11 +36,22 @@ public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistra @Override public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) { - boolean tIsRich = (aPrefix == OrePrefixes.oreNetherrack) || (aPrefix == OrePrefixes.oreNether) - || (aPrefix == OrePrefixes.oreEndstone) - || (aPrefix == OrePrefixes.oreEnd) - || (aPrefix == OrePrefixes.oreRich) - || (aPrefix == OrePrefixes.oreDense); + boolean tIsRich = false; + + // For Sake of god of balance! + + // Dense ore + if (GT_Mod.gregtechproxy.mRichOreYieldMultiplier) { + tIsRich = (aPrefix == OrePrefixes.oreRich) || (aPrefix == OrePrefixes.oreDense); + } + // NetherOre + if (GT_Mod.gregtechproxy.mNetherOreYieldMultiplier && !tIsRich) { + tIsRich = (aPrefix == OrePrefixes.oreNetherrack) || (aPrefix == OrePrefixes.oreNether); + } + // EndOre + if (GT_Mod.gregtechproxy.mEndOreYieldMultiplier && !tIsRich) { + tIsRich = (aPrefix == OrePrefixes.oreEndstone) || (aPrefix == OrePrefixes.oreEnd); + } if (aMaterial == Materials.Oilsands) { GT_Values.RA.stdBuilder() diff --git a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java b/src/main/java/gregtech/loaders/preload/GT_PreLoad.java index 823f1b9ef9..42bf79a102 100644 --- a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java +++ b/src/main/java/gregtech/loaders/preload/GT_PreLoad.java @@ -707,6 +707,12 @@ public class GT_PreLoad { GT_Mod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre = tMainConfig .get("general", "MixedOreOnlyYieldsTwoThirdsOfPureOre", false) .getBoolean(false); + GT_Mod.gregtechproxy.mRichOreYieldMultiplier = tMainConfig.get("general", "RichOreYieldMultiplier", true) + .getBoolean(false); + GT_Mod.gregtechproxy.mNetherOreYieldMultiplier = tMainConfig.get("general", "NetherOreYieldMultiplier", true) + .getBoolean(false); + GT_Mod.gregtechproxy.mEndOreYieldMultiplier = tMainConfig.get("general", "EndOreYieldMultiplier", true) + .getBoolean(false); GT_Mod.gregtechproxy.enableBlackGraniteOres = GregTech_API.sWorldgenFile .get("general", "enableBlackGraniteOres", GT_Mod.gregtechproxy.enableBlackGraniteOres); GT_Mod.gregtechproxy.enableRedGraniteOres = GregTech_API.sWorldgenFile -- cgit