diff --git a/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java b/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java index f84e0264ad2..7ab7cc57b16 100644 --- a/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java +++ b/src/main/java/gregtech/api/items/materialitem/MetaPrefixItem.java @@ -9,8 +9,8 @@ import gregtech.api.unification.material.Materials; import gregtech.api.unification.material.info.MaterialIconSet; import gregtech.api.unification.material.properties.DustProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.material.registry.MaterialRegistry; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.UnificationEntry; @@ -235,7 +235,7 @@ public int getItemBurnTime(@NotNull ItemStack itemStack) { public boolean isBeaconPayment(@NotNull ItemStack stack) { Material material = getMaterial(stack); if (material != null && this.prefix != OrePrefix.ingot && this.prefix != OrePrefix.gem) { - ToolProperty property = material.getProperty(PropertyKey.TOOL); + MaterialToolProperty property = material.getProperty(PropertyKey.TOOL); return property != null && property.getToolHarvestLevel() >= 2; } return false; diff --git a/src/main/java/gregtech/api/items/toolitem/IGTTool.java b/src/main/java/gregtech/api/items/toolitem/IGTTool.java index c8d4d70b42d..bb81e9dd570 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -16,6 +16,7 @@ import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; import gregtech.api.unification.material.properties.DustProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.ore.OrePrefix; @@ -158,6 +159,10 @@ default ItemStack getRaw() { return stack; } + /** + * @return A tool made from the given material. The tool property (at least overriding) for the material must be + * set. + */ default ItemStack get(Material material) { ItemStack stack = new ItemStack(get()); @@ -178,35 +183,38 @@ default ItemStack get(Material material) { AoESymmetrical aoeDefinition = getToolStats().getAoEDefinition(stack); // Set other tool stats (durability) - ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); - + ToolProperty finalToolProperty = getToolProperty(material); // Durability formula we are working with: // Final Durability = (material durability * material durability multiplier) + (tool definition durability * // definition durability multiplier) - 1 // Subtracts 1 internally since Minecraft treats "0" as a valid durability, but we don't want to display this. - int durability = toolProperty.getToolDurability() * toolProperty.getDurabilityMultiplier(); + // Tool material modifiers. + int durability = finalToolProperty.getToolDurability() * finalToolProperty.getDurabilityMultiplier(); + // Tool type modifiers. // Most Tool Definitions do not set a base durability, which will lead to ignoring the multiplier if present. So // apply the multiplier to the material durability if that would happen if (toolStats.getBaseDurability(stack) == 0) { - durability *= toolStats.getDurabilityMultiplier(stack); + durability = (int) (durability * toolStats.getDurabilityMultiplier(stack)); } else { - durability += toolStats.getBaseDurability(stack) * toolStats.getDurabilityMultiplier(stack); + durability += (int) (toolStats.getBaseDurability(stack) * toolStats.getDurabilityMultiplier(stack)); } - toolTag.setInteger(MAX_DURABILITY_KEY, durability - 1); + durability -= 1; // Finally adjust for MC + toolTag.setInteger(MAX_DURABILITY_KEY, durability); toolTag.setInteger(DURABILITY_KEY, 0); - if (toolProperty.getUnbreakable()) { + + if (finalToolProperty.getUnbreakable()) { stackCompound.setBoolean(UNBREAKABLE_KEY, true); } // Set tool and material enchantments Object2IntMap enchantments = new Object2IntOpenHashMap<>(); - toolProperty.getEnchantments().forEach((enchantment, level) -> enchantments.put(enchantment, - level.getLevel(toolProperty.getToolHarvestLevel()))); + finalToolProperty.getEnchantments().forEach((enchantment, level) -> enchantments.put(enchantment, + level.getLevel(finalToolProperty.getToolHarvestLevel()))); toolStats.getDefaultEnchantments(stack).forEach((enchantment, level) -> enchantments.put(enchantment, - level.getLevel(toolProperty.getToolHarvestLevel()))); + level.getLevel(finalToolProperty.getToolHarvestLevel()))); enchantments.forEach((enchantment, level) -> { if (stack.getItem().canApplyAtEnchantingTable(stack, enchantment)) { stack.addEnchantment(enchantment, level); @@ -226,7 +234,7 @@ default ItemStack get(Material material) { behaviourTag.setInteger(AOE_LAYER_KEY, aoeDefinition.layer); } - if (toolProperty.isMagnetic()) { + if (finalToolProperty.isMagnetic()) { behaviourTag.setBoolean(RELOCATE_MINED_BLOCKS_KEY, true); } @@ -260,9 +268,24 @@ default Material getToolMaterial(ItemStack stack) { return material; } + @Nullable + default ToolProperty getToolProperty(Material material) { + ToolProperty finalToolProperty; + { + MaterialToolProperty materialToolProperty = material.getProperty(PropertyKey.TOOL); + if (material.hasProperty(PropertyKey.EXTRATOOL)) { + finalToolProperty = material.getProperty(PropertyKey.EXTRATOOL) + .getOverriddenResult(this.getToolId(), materialToolProperty); + } else { + finalToolProperty = materialToolProperty; + } + } + return finalToolProperty; + } + @Nullable default ToolProperty getToolProperty(ItemStack stack) { - return getToolMaterial(stack).getProperty(PropertyKey.TOOL); + return getToolProperty(getToolMaterial(stack)); } @Nullable diff --git a/src/main/java/gregtech/api/items/toolitem/ToolHelper.java b/src/main/java/gregtech/api/items/toolitem/ToolHelper.java index 3dc2f38b11d..f696c1684e4 100644 --- a/src/main/java/gregtech/api/items/toolitem/ToolHelper.java +++ b/src/main/java/gregtech/api/items/toolitem/ToolHelper.java @@ -10,8 +10,8 @@ import gregtech.api.recipes.RecipeMaps; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.Material; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.util.GTUtility; import gregtech.api.util.function.QuintFunction; @@ -230,11 +230,11 @@ public static ItemStack getAndSetToolData(IGTTool tool, Material material, int m toolTag.setInteger(HARVEST_LEVEL_KEY, harvestLevel); toolTag.setFloat(TOOL_SPEED_KEY, toolSpeed); toolTag.setFloat(ATTACK_DAMAGE_KEY, attackDamage); - ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); - if (toolProperty != null) { - toolProperty.getEnchantments().forEach((enchantment, level) -> { + MaterialToolProperty materialToolProperty = material.getProperty(PropertyKey.TOOL); + if (materialToolProperty != null) { + materialToolProperty.getEnchantments().forEach((enchantment, level) -> { if (stack.getItem().canApplyAtEnchantingTable(stack, enchantment)) { - stack.addEnchantment(enchantment, level.getLevel(toolProperty.getToolHarvestLevel())); + stack.addEnchantment(enchantment, level.getLevel(materialToolProperty.getToolHarvestLevel())); } }); } diff --git a/src/main/java/gregtech/api/unification/material/Material.java b/src/main/java/gregtech/api/unification/material/Material.java index 29c4c9fd9e4..d0f42cbe1ac 100644 --- a/src/main/java/gregtech/api/unification/material/Material.java +++ b/src/main/java/gregtech/api/unification/material/Material.java @@ -12,6 +12,7 @@ import gregtech.api.unification.material.info.MaterialIconSet; import gregtech.api.unification.material.properties.BlastProperty; import gregtech.api.unification.material.properties.DustProperty; +import gregtech.api.unification.material.properties.ExtraToolProperty; import gregtech.api.unification.material.properties.FluidPipeProperties; import gregtech.api.unification.material.properties.FluidProperty; import gregtech.api.unification.material.properties.GemProperty; @@ -19,11 +20,11 @@ import gregtech.api.unification.material.properties.IngotProperty; import gregtech.api.unification.material.properties.ItemPipeProperties; import gregtech.api.unification.material.properties.MaterialProperties; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.OreProperty; import gregtech.api.unification.material.properties.PolymerProperty; import gregtech.api.unification.material.properties.PropertyKey; import gregtech.api.unification.material.properties.RotorProperty; -import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.material.properties.WireProperties; import gregtech.api.unification.material.properties.WoodProperty; import gregtech.api.unification.material.registry.MaterialRegistry; @@ -637,7 +638,7 @@ public Builder dust() { * Will be created with no Burn Time (Furnace Fuel). * * @param harvestLevel The Harvest Level of this block for Mining.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining Level. * @throws IllegalArgumentException If a {@link DustProperty} has already been added to this Material. */ @@ -649,7 +650,7 @@ public Builder dust(int harvestLevel) { * Add a {@link DustProperty} to this Material. * * @param harvestLevel The Harvest Level of this block for Mining.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining Level. * @param burnTime The Burn Time (in ticks) of this Material as a Furnace Fuel. * @throws IllegalArgumentException If a {@link DustProperty} has already been added to this Material. @@ -672,7 +673,7 @@ public Builder wood() { * Will be created with a Burn Time of 300 (Furnace Fuel). * * @param harvestLevel The Harvest Level of this block for Mining.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining Level. */ public Builder wood(int harvestLevel) { @@ -683,7 +684,7 @@ public Builder wood(int harvestLevel) { * Add a {@link WoodProperty} to this Material. * * @param harvestLevel The Harvest Level of this block for Mining.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining Level. * @param burnTime The Burn Time (in ticks) of this Material as a Furnace Fuel. */ @@ -711,7 +712,7 @@ public Builder ingot() { * Will automatically add a {@link DustProperty} to this Material if it does not already have one. * * @param harvestLevel The Harvest Level of this block for Mining. 2 will make it require a iron tool.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining level (-1). So 2 will make the tool harvest * diamonds.
* If this Material already had a Harvest Level defined, it will be overridden. @@ -726,7 +727,7 @@ public Builder ingot(int harvestLevel) { * Will automatically add a {@link DustProperty} to this Material if it does not already have one. * * @param harvestLevel The Harvest Level of this block for Mining. 2 will make it require a iron tool.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining level (-1). So 2 will make the tool harvest * diamonds.
* If this Material already had a Harvest Level defined, it will be overridden. @@ -763,7 +764,7 @@ public Builder gem() { * Will automatically add a {@link DustProperty} to this Material if it does not already have one. * * @param harvestLevel The Harvest Level of this block for Mining.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining level.
* If this Material already had a Harvest Level defined, it will be overridden. * @throws IllegalArgumentException If a {@link GemProperty} has already been added to this Material. @@ -777,7 +778,7 @@ public Builder gem(int harvestLevel) { * Will automatically add a {@link DustProperty} to this Material if it does not already have one. * * @param harvestLevel The Harvest Level of this block for Mining.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining level.
* If this Material already had a Harvest Level defined, it will be overridden. * @param burnTime The Burn Time (in ticks) of this Material as a Furnace Fuel.
@@ -812,7 +813,7 @@ public Builder polymer() { * Will have a burn time of 0 * * @param harvestLevel The Harvest Level of this block for Mining.
- * If this Material also has a {@link ToolProperty}, this value will + * If this Material also has a {@link MaterialToolProperty}, this value will * also be used to determine the tool's Mining level.
* If this Material already had a Harvest Level defined, it will be overridden. * @throws IllegalArgumentException If an {@link PolymerProperty} has already been added to this Material. @@ -929,10 +930,19 @@ public Builder element(Element element) { /** * Replaced the old toolStats methods which took many parameters. - * Use {@link ToolProperty.Builder} instead to create a Tool Property. + * Use {@link MaterialToolProperty.Builder} instead to create a Tool Property. */ - public Builder toolStats(ToolProperty toolProperty) { - properties.setProperty(PropertyKey.TOOL, toolProperty); + public Builder toolStats(MaterialToolProperty materialToolProperty) { + properties.setProperty(PropertyKey.TOOL, materialToolProperty); + return this; + } + + /** + * Use {@link ExtraToolProperty.Builder} to create a Tool Property Override. + */ + public Builder overrideToolStats(String toolId, ExtraToolProperty.OverrideToolProperty toolProperty) { + properties.ensureSet(PropertyKey.EXTRATOOL); + properties.getProperty(PropertyKey.EXTRATOOL).setOverrideProperty(toolId, toolProperty); return this; } diff --git a/src/main/java/gregtech/api/unification/material/Materials.java b/src/main/java/gregtech/api/unification/material/Materials.java index 30174ce8f44..086952d93d9 100644 --- a/src/main/java/gregtech/api/unification/material/Materials.java +++ b/src/main/java/gregtech/api/unification/material/Materials.java @@ -110,6 +110,9 @@ public static void register() { Materials.DyeRed, Materials.DyeBlack }; + // Register soft tools + SoftToolAddition.register(); + OrePrefix.init(); } diff --git a/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java b/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java index 3687efcf6d7..7e2b622bf9d 100644 --- a/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java +++ b/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java @@ -6,8 +6,8 @@ import gregtech.api.unification.Elements; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.properties.BlastProperty.GasTier; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import static gregtech.api.GTValues.*; import static gregtech.api.unification.material.Materials.*; @@ -31,7 +31,7 @@ public static void register() { .flags(EXT2_METAL, GENERATE_GEAR, GENERATE_SMALL_GEAR, GENERATE_RING, GENERATE_FRAME, GENERATE_SPRING, GENERATE_SPRING_SMALL, GENERATE_FINE_WIRE, GENERATE_DOUBLE_PLATE) .element(Elements.Al) - .toolStats(ToolProperty.Builder.of(6.0F, 7.5F, 768, 2) + .toolStats(MaterialToolProperty.Builder.of(6.0F, 7.5F, 768, 2) .enchantability(14).build()) .rotorStats(10.0f, 2.0f, 128) .cableProperties(V[EV], 1, 1) @@ -386,7 +386,7 @@ public static void register() { GENERATE_SPRING_SMALL, GENERATE_SPRING, EXCLUDE_BLOCK_CRAFTING_BY_HAND_RECIPES, BLAST_FURNACE_CALCITE_TRIPLE) .element(Elements.Fe) - .toolStats(ToolProperty.Builder.of(2.0F, 2.0F, 256, 2) + .toolStats(MaterialToolProperty.Builder.of(2.0F, 2.0F, 256, 2) .enchantability(14).build()) .rotorStats(7.0f, 2.5f, 256) .cableProperties(V[MV], 2, 3) @@ -833,7 +833,7 @@ public static void register() { .flags(EXT2_METAL, GENERATE_DOUBLE_PLATE, GENERATE_ROTOR, GENERATE_SMALL_GEAR, GENERATE_GEAR, GENERATE_FRAME) .element(Elements.Ti) - .toolStats(ToolProperty.Builder.of(8.0F, 6.0F, 1536, 3) + .toolStats(MaterialToolProperty.Builder.of(8.0F, 6.0F, 1536, 3) .enchantability(14).build()) .rotorStats(7.0f, 3.0f, 1600) .fluidPipeProperties(2426, 150, true, true, false, false) @@ -970,7 +970,7 @@ public static void register() { .flags(EXT_METAL, GENERATE_BOLT_SCREW, GENERATE_FRAME, GENERATE_GEAR, GENERATE_LONG_ROD, GENERATE_DOUBLE_PLATE) .element(Elements.Nt) - .toolStats(ToolProperty.Builder.of(180.0F, 100.0F, 65535, 6) + .toolStats(MaterialToolProperty.Builder.of(180.0F, 100.0F, 65535, 6) .attackSpeed(0.5F).enchantability(33).magnetic().unbreakable().build()) .rotorStats(24.0f, 12.0f, 655360) .fluidPipeProperties(100_000, 5000, true, true, true, true) @@ -993,7 +993,7 @@ public static void register() { .color(0x4BAFAF).iconSet(BRIGHT) .flags(EXT_METAL, GENERATE_FOIL, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .element(Elements.Dr) - .toolStats(ToolProperty.Builder.of(14.0F, 12.0F, 8192, 5) + .toolStats(MaterialToolProperty.Builder.of(14.0F, 12.0F, 8192, 5) .attackSpeed(0.3F).enchantability(33).magnetic().build()) .fluidPipeProperties(9625, 500, true, true, true, true) .build(); diff --git a/src/main/java/gregtech/api/unification/material/materials/FirstDegreeMaterials.java b/src/main/java/gregtech/api/unification/material/materials/FirstDegreeMaterials.java index 2863f07c1a9..3eaaeab5eef 100644 --- a/src/main/java/gregtech/api/unification/material/materials/FirstDegreeMaterials.java +++ b/src/main/java/gregtech/api/unification/material/materials/FirstDegreeMaterials.java @@ -7,8 +7,8 @@ import gregtech.api.fluids.store.FluidStorageKeys; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.properties.BlastProperty.GasTier; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import net.minecraft.init.Enchantments; import net.minecraftforge.fluids.FluidRegistry; @@ -102,7 +102,7 @@ public static void register() { .flags(EXT2_METAL, MORTAR_GRINDABLE, GENERATE_ROTOR, GENERATE_FRAME, GENERATE_SMALL_GEAR, GENERATE_FOIL, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Tin, 1, Copper, 3) - .toolStats(ToolProperty.Builder.of(3.0F, 2.0F, 192, 2) + .toolStats(MaterialToolProperty.Builder.of(3.0F, 2.0F, 192, 2) .enchantability(18).build()) .rotorStats(6.0f, 2.5f, 192) .fluidPipeProperties(1696, 20, true) @@ -216,7 +216,7 @@ public static void register() { .flags(GENERATE_BOLT_SCREW, GENERATE_LENS, GENERATE_GEAR, NO_SMASHING, NO_SMELTING, HIGH_SIFTER_OUTPUT, DISABLE_DECOMPOSITION, EXCLUDE_BLOCK_CRAFTING_BY_HAND_RECIPES) .components(Carbon, 1) - .toolStats(ToolProperty.Builder.of(6.0F, 7.0F, 768, 3) + .toolStats(MaterialToolProperty.Builder.of(6.0F, 7.0F, 768, 3) .attackSpeed(0.1F).enchantability(18).build()) .build(); @@ -301,7 +301,7 @@ public static void register() { .color(0xB4B478).iconSet(METALLIC) .flags(EXT2_METAL, MORTAR_GRINDABLE, GENERATE_FRAME, GENERATE_GEAR) .components(Iron, 2, Nickel, 1) - .toolStats(ToolProperty.Builder.of(4.0F, 3.0F, 384, 2) + .toolStats(MaterialToolProperty.Builder.of(4.0F, 3.0F, 384, 2) .enchantability(18) .enchantment(Enchantments.BANE_OF_ARTHROPODS, 3) .enchantment(Enchantments.EFFICIENCY, 1).build()) @@ -418,7 +418,7 @@ public static void register() { .color(0xFADCE1).iconSet(SHINY) .flags(EXT2_METAL, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Copper, 1, Silver, 4) - .toolStats(ToolProperty.Builder.of(3.0F, 8.0F, 768, 2) + .toolStats(MaterialToolProperty.Builder.of(3.0F, 8.0F, 768, 2) .attackSpeed(0.3F).enchantability(33) .enchantment(Enchantments.SMITE, 3).build()) .rotorStats(13.0f, 2.0f, 196) @@ -432,7 +432,7 @@ public static void register() { .color(0xFFE61E).iconSet(SHINY) .flags(EXT2_METAL, GENERATE_RING, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Copper, 1, Gold, 4) - .toolStats(ToolProperty.Builder.of(12.0F, 2.0F, 768, 2) + .toolStats(MaterialToolProperty.Builder.of(12.0F, 2.0F, 768, 2) .enchantability(33) .enchantment(Enchantments.FORTUNE, 2).build()) .rotorStats(14.0f, 2.0f, 152) @@ -600,7 +600,7 @@ public static void register() { .flags(EXT2_METAL, GENERATE_ROTOR, GENERATE_SMALL_GEAR, GENERATE_FRAME, GENERATE_LONG_ROD, GENERATE_FOIL, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Iron, 6, Chrome, 1, Manganese, 1, Nickel, 1) - .toolStats(ToolProperty.Builder.of(7.0F, 5.0F, 1024, 3) + .toolStats(MaterialToolProperty.Builder.of(7.0F, 5.0F, 1024, 3) .enchantability(14).build()) .rotorStats(7.0f, 4.0f, 480) .fluidPipeProperties(2428, 75, true, true, true, false) @@ -615,7 +615,7 @@ public static void register() { GENERATE_SPRING_SMALL, GENERATE_FRAME, DISABLE_DECOMPOSITION, GENERATE_FINE_WIRE, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Iron, 1) - .toolStats(ToolProperty.Builder.of(5.0F, 3.0F, 512, 3) + .toolStats(MaterialToolProperty.Builder.of(5.0F, 3.0F, 512, 3) .enchantability(14).build()) .rotorStats(6.0f, 3.0f, 512) .fluidPipeProperties(1855, 50, true) @@ -673,7 +673,7 @@ public static void register() { .color(0xB4B4E6).iconSet(SHINY) .flags(EXT2_METAL, GENERATE_GEAR, GENERATE_DOUBLE_PLATE, GENERATE_FRAME) .components(Cobalt, 5, Chrome, 2, Nickel, 1, Molybdenum, 1) - .toolStats(ToolProperty.Builder.of(10.0F, 7.0F, 2048, 4) + .toolStats(MaterialToolProperty.Builder.of(10.0F, 7.0F, 2048, 4) .attackSpeed(0.1F).enchantability(21).build()) .rotorStats(9.0f, 4.0f, 2048) .itemPipeProperties(128, 16) @@ -713,7 +713,7 @@ public static void register() { .flags(EXT_METAL, GENERATE_GEAR, GENERATE_FOIL, MORTAR_GRINDABLE, GENERATE_RING, GENERATE_LONG_ROD, GENERATE_BOLT_SCREW, DISABLE_DECOMPOSITION, BLAST_FURNACE_CALCITE_TRIPLE, GENERATE_DOUBLE_PLATE) .components(Iron, 1) - .toolStats(ToolProperty.Builder.of(2.0F, 2.0F, 384, 2) + .toolStats(MaterialToolProperty.Builder.of(2.0F, 2.0F, 384, 2) .attackSpeed(-0.2F).enchantability(5).build()) .rotorStats(6.0f, 3.5f, 384) .build(); @@ -1132,7 +1132,7 @@ public static void register() { .color(0x330066).iconSet(METALLIC) .flags(EXT2_METAL, GENERATE_FOIL, GENERATE_GEAR, DECOMPOSITION_BY_CENTRIFUGING, GENERATE_DOUBLE_PLATE) .components(Tungsten, 1, Carbon, 1) - .toolStats(ToolProperty.Builder.of(60.0F, 2.0F, 1024, 4) + .toolStats(MaterialToolProperty.Builder.of(60.0F, 2.0F, 1024, 4) .enchantability(21).build()) .rotorStats(12.0f, 4.0f, 1280) .fluidPipeProperties(3837, 200, true) diff --git a/src/main/java/gregtech/api/unification/material/materials/HigherDegreeMaterials.java b/src/main/java/gregtech/api/unification/material/materials/HigherDegreeMaterials.java index 8646df2403f..78b1d4914fe 100644 --- a/src/main/java/gregtech/api/unification/material/materials/HigherDegreeMaterials.java +++ b/src/main/java/gregtech/api/unification/material/materials/HigherDegreeMaterials.java @@ -4,7 +4,7 @@ import gregtech.api.fluids.FluidBuilder; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.properties.BlastProperty.GasTier; -import gregtech.api.unification.material.properties.ToolProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import static gregtech.api.GTValues.*; import static gregtech.api.unification.material.Materials.*; @@ -39,7 +39,7 @@ public static void register() { .color(0x8C6464).iconSet(METALLIC) .flags(EXT_METAL, GENERATE_GEAR) .components(RoseGold, 1, Brass, 1, Steel, 2, BlackSteel, 4) - .toolStats(ToolProperty.Builder.of(7.0F, 6.0F, 2560, 3) + .toolStats(MaterialToolProperty.Builder.of(7.0F, 6.0F, 2560, 3) .attackSpeed(0.1F).enchantability(21).build()) .blast(b -> b.temp(1813, GasTier.LOW).blastStats(VA[HV], 1000)) .build(); @@ -49,7 +49,7 @@ public static void register() { .color(0x64648C).iconSet(METALLIC) .flags(EXT_METAL, GENERATE_FRAME, GENERATE_GEAR) .components(SterlingSilver, 1, BismuthBronze, 1, Steel, 2, BlackSteel, 4) - .toolStats(ToolProperty.Builder.of(15.0F, 6.0F, 1024, 3) + .toolStats(MaterialToolProperty.Builder.of(15.0F, 6.0F, 1024, 3) .attackSpeed(0.1F).enchantability(33).build()) .blast(b -> b.temp(1813, GasTier.LOW).blastStats(VA[HV], 1000)) .build(); @@ -117,7 +117,7 @@ public static void register() { .color(0x336600).iconSet(METALLIC) .flags(EXT2_METAL, GENERATE_FRAME, GENERATE_RING, GENERATE_GEAR) .components(HSSG, 6, Cobalt, 1, Manganese, 1, Silicon, 1) - .toolStats(ToolProperty.Builder.of(5.0F, 10.0F, 3072, 4) + .toolStats(MaterialToolProperty.Builder.of(5.0F, 10.0F, 3072, 4) .attackSpeed(0.3F).enchantability(33).build()) .rotorStats(10.0f, 8.0f, 5120) .blast(b -> b diff --git a/src/main/java/gregtech/api/unification/material/materials/SecondDegreeMaterials.java b/src/main/java/gregtech/api/unification/material/materials/SecondDegreeMaterials.java index 218e3d043d4..5e39016c570 100644 --- a/src/main/java/gregtech/api/unification/material/materials/SecondDegreeMaterials.java +++ b/src/main/java/gregtech/api/unification/material/materials/SecondDegreeMaterials.java @@ -4,8 +4,8 @@ import gregtech.api.fluids.attribute.FluidAttributes; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.properties.BlastProperty.GasTier; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import net.minecraft.init.Enchantments; @@ -106,7 +106,7 @@ public static void register() { .color(0x6E6E6E).iconSet(METALLIC) .flags(EXT_METAL, GENERATE_GEAR) .components(Steel, 1) - .toolStats(ToolProperty.Builder.of(6.0F, 4.0F, 1024, 3) + .toolStats(MaterialToolProperty.Builder.of(6.0F, 4.0F, 1024, 3) .attackSpeed(0.3F).enchantability(33) .enchantment(Enchantments.LOOTING, 3) .enchantment(Enchantments.FORTUNE, 3).build()) @@ -119,7 +119,7 @@ public static void register() { .flags(EXT2_METAL, GENERATE_ROTOR, GENERATE_SMALL_GEAR, GENERATE_DENSE, GENERATE_FRAME, GENERATE_SPRING, GENERATE_FOIL, GENERATE_FINE_WIRE, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Steel, 1, Tungsten, 1) - .toolStats(ToolProperty.Builder.of(9.0F, 7.0F, 2048, 4) + .toolStats(MaterialToolProperty.Builder.of(9.0F, 7.0F, 2048, 4) .enchantability(14).build()) .rotorStats(8.0f, 4.0f, 2560) .fluidPipeProperties(3587, 225, true, true, false, false) @@ -136,7 +136,7 @@ public static void register() { .color(0xB4B4A0).iconSet(METALLIC) .flags(EXT2_METAL, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Brass, 7, Aluminium, 1, Cobalt, 1) - .toolStats(ToolProperty.Builder.of(2.5F, 2.0F, 1024, 2) + .toolStats(MaterialToolProperty.Builder.of(2.5F, 2.0F, 1024, 2) .attackSpeed(-0.2F).enchantability(5).build()) .rotorStats(8.0f, 2.0f, 256) .itemPipeProperties(2048, 1) @@ -287,7 +287,7 @@ public static void register() { .color(0xc0c0c0).iconSet(METALLIC) .flags(EXT2_METAL, GENERATE_DOUBLE_PLATE, GENERATE_FOIL, GENERATE_GEAR) .components(Vanadium, 1, Chrome, 1, Steel, 7) - .toolStats(ToolProperty.Builder.of(3.0F, 3.0F, 1536, 3) + .toolStats(MaterialToolProperty.Builder.of(3.0F, 3.0F, 1536, 3) .attackSpeed(-0.2F).enchantability(5).build()) .rotorStats(7.0f, 3.0f, 1920) .fluidPipeProperties(2073, 50, true, true, false, false) @@ -328,7 +328,7 @@ public static void register() { .flags(EXT2_METAL, GENERATE_SPRING, GENERATE_RING, GENERATE_ROTOR, GENERATE_SMALL_GEAR, GENERATE_FRAME, GENERATE_DENSE, GENERATE_FOIL, GENERATE_GEAR, GENERATE_DOUBLE_PLATE) .components(Naquadah, 2, Osmiridium, 1, Trinium, 1) - .toolStats(ToolProperty.Builder.of(40.0F, 12.0F, 3072, 5) + .toolStats(MaterialToolProperty.Builder.of(40.0F, 12.0F, 3072, 5) .attackSpeed(0.3F).enchantability(33).magnetic().build()) .rotorStats(8.0f, 5.0f, 5120) .cableProperties(V[UV], 2, 4) @@ -383,7 +383,7 @@ public static void register() { .color(0x002040).iconSet(FLINT) .flags(NO_SMASHING, MORTAR_GRINDABLE, DECOMPOSITION_BY_CENTRIFUGING) .components(SiliconDioxide, 1) - .toolStats(ToolProperty.Builder.of(0.0F, 1.0F, 64, 1) + .toolStats(MaterialToolProperty.Builder.of(0.0F, 1.0F, 64, 1) .enchantability(5).ignoreCraftingTools() .enchantment(Enchantments.FIRE_ASPECT, 2).build()) .build(); diff --git a/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java new file mode 100644 index 00000000000..a348ecb76ed --- /dev/null +++ b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java @@ -0,0 +1,39 @@ +package gregtech.api.unification.material.materials; + +import gregtech.api.items.toolitem.ToolClasses; +import gregtech.api.recipes.ModHandler; +import gregtech.api.unification.material.Material; +import gregtech.api.unification.material.Materials; +import gregtech.api.unification.material.properties.ExtraToolProperty; +import gregtech.api.unification.material.properties.PropertyKey; + +public class SoftToolAddition { + + public static final Material[] softMaterials = new Material[] { + Materials.Wood, Materials.Rubber, Materials.Polyethylene, + Materials.Polytetrafluoroethylene, Materials.Polybenzimidazole + }; + + public static void register() { + for (int i = 0; i < softMaterials.length; i++) { + + Material material = softMaterials[i]; + + if (ModHandler.isMaterialWood(material)) { + material.getProperties().ensureSet(PropertyKey.EXTRATOOL); + ExtraToolProperty extraToolProperty = material.getProperty(PropertyKey.EXTRATOOL); + + extraToolProperty.setOverrideProperty(ToolClasses.SOFT_MALLET, + ExtraToolProperty.Builder.of(4F, 1F, 48, 1).build()); + } else { + material.getProperties().ensureSet(PropertyKey.EXTRATOOL); + ExtraToolProperty extraToolProperty = material.getProperty(PropertyKey.EXTRATOOL); + + extraToolProperty.setOverrideProperty(ToolClasses.SOFT_MALLET, + ExtraToolProperty.Builder.of(4F, 1F, 128 * (1 << i), 1).build()); + extraToolProperty.setOverrideProperty(ToolClasses.PLUNGER, + ExtraToolProperty.Builder.of(4F, 0F, 128 * (1 << i), 1).build()); + } + } + } +} diff --git a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java new file mode 100644 index 00000000000..e9d406b8f70 --- /dev/null +++ b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java @@ -0,0 +1,164 @@ +package gregtech.api.unification.material.properties; + +import net.minecraft.enchantment.Enchantment; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; +import java.util.Map; + +public class ExtraToolProperty implements IMaterialProperty { + + /** + * Special override for certain kinds of tools. + */ + private final Map overrideMap; + + public static class OverrideToolProperty extends ToolProperty { + + public OverrideToolProperty() { + this.setToolSpeed(Float.NaN); + this.setToolAttackSpeed(Float.NaN); + this.setToolAttackDamage(Float.NaN); + this.setToolDurability(-1); + this.setToolHarvestLevel(-1); + this.setToolEnchantability(-1); + this.setDurabilityMultiplier(-1); + } + + // It does not make much sense to set these overrides: + public void setShouldIgnoreCraftingTools(boolean ignore) { + throw new UnsupportedOperationException(); + } + + public void setUnbreakable(boolean isUnbreakable) { + throw new UnsupportedOperationException(); + } + + public boolean isMagnetic() { + throw new UnsupportedOperationException(); + } + + private ToolProperty override(@NotNull ToolProperty property) { + // copy to prevent the previous map is produced + ToolProperty result = new ToolProperty(property); + + // Set the floating point number fields + if (!Float.isNaN(this.getToolSpeed())) + result.setToolSpeed(this.getToolSpeed()); + if (!Float.isNaN(this.getToolAttackSpeed())) + result.setToolAttackSpeed(this.getToolAttackSpeed()); + if (!Float.isNaN(this.getToolAttackDamage())) + result.setToolAttackDamage(this.getToolAttackDamage()); + + // Set the integer fields + if (this.getToolDurability() != -1) + result.setToolDurability(this.getToolDurability()); + if (this.getToolHarvestLevel() != -1) + result.setToolHarvestLevel(this.getToolHarvestLevel()); + if (this.getToolEnchantability() != -1) + result.setToolEnchantability(this.getToolEnchantability()); + if (this.getDurabilityMultiplier() != -1) + result.setDurabilityMultiplier(this.getDurabilityMultiplier()); + + // Merge the enchantment map + result.getEnchantments().putAll(this.getEnchantments()); + return result; + } + } + + public ExtraToolProperty() { + this.overrideMap = new HashMap<>(); + } + + public void setOverrideProperty(String toolId, OverrideToolProperty overrideProperty) { + this.overrideMap.put(toolId, overrideProperty); + } + + @Nullable + public OverrideToolProperty getOverrideProperty(String toolId) { + return this.overrideMap.get(toolId); + } + + public boolean hasOverrideProperty(String toolId) { + return this.overrideMap.containsKey(toolId); + } + + public ToolProperty getOverriddenResult(String toolId, @Nullable MaterialToolProperty materialToolProperty) { + if (materialToolProperty == null) materialToolProperty = new MaterialToolProperty(); + return overrideMap.getOrDefault(toolId, new OverrideToolProperty()) + .override(materialToolProperty); + } + + @Override + public void verifyProperty(MaterialProperties properties) { + // No check here, since these recipes should be self-generated. + // If they are overriding ToolProperty, then it is already generated. + } + + public static class Builder { + + private final OverrideToolProperty toolProperty; + + public static Builder of() { + return new Builder(); + } + + public static Builder of(int durability) { + Builder builder = new Builder(); + builder.durability(durability); + return builder; + } + + public static Builder of(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { + Builder builder = new Builder(); + builder.harvestSpeed(harvestSpeed).attackDamage(attackDamage).durability(durability) + .harvestLevel(harvestLevel); + return builder; + } + + public Builder() { + this.toolProperty = new OverrideToolProperty(); + } + + public Builder harvestSpeed(float harvestSpeed) { + toolProperty.setToolSpeed(harvestSpeed); + return this; + } + + public Builder attackDamage(float attackDamage) { + toolProperty.setToolAttackDamage(attackDamage); + return this; + } + + public Builder durability(int durability) { + toolProperty.setToolDurability(durability); + return this; + } + + public Builder attackSpeed(float attackSpeed) { + toolProperty.setToolAttackSpeed(attackSpeed); + return this; + } + + public Builder harvestLevel(int harvestLevel) { + toolProperty.setToolHarvestLevel(harvestLevel); + return this; + } + + public Builder enchantment(Enchantment enchantment, int level) { + toolProperty.addEnchantmentForTools(enchantment, level); + return this; + } + + public Builder durabilityMultiplier(int multiplier) { + toolProperty.setDurabilityMultiplier(multiplier); + return this; + } + + public OverrideToolProperty build() { + return this.toolProperty; + } + } +} diff --git a/src/main/java/gregtech/api/unification/material/properties/MaterialToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/MaterialToolProperty.java new file mode 100644 index 00000000000..ebd3346978c --- /dev/null +++ b/src/main/java/gregtech/api/unification/material/properties/MaterialToolProperty.java @@ -0,0 +1,73 @@ +package gregtech.api.unification.material.properties; + +import net.minecraft.enchantment.Enchantment; + +public class MaterialToolProperty extends ToolProperty implements IMaterialProperty { + + public MaterialToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { + super(harvestSpeed, attackDamage, durability, harvestLevel); + this.setToolEnchantability(10); + this.setDurabilityMultiplier(1); + } + + public MaterialToolProperty() { + this(1.0F, 1.0F, 100, 2); + } + + @Override + public void verifyProperty(MaterialProperties properties) { + if (!properties.hasProperty(PropertyKey.GEM)) properties.ensureSet(PropertyKey.INGOT, true); + } + + public static class Builder { + + private final MaterialToolProperty materialToolProperty; + + public static Builder of(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { + return new Builder(harvestSpeed, attackDamage, durability, harvestLevel); + } + + private Builder(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { + materialToolProperty = new MaterialToolProperty(harvestSpeed, attackDamage, durability, harvestLevel); + } + + public Builder enchantability(int enchantability) { + materialToolProperty.setToolEnchantability(enchantability); + return this; + } + + public Builder attackSpeed(float attackSpeed) { + materialToolProperty.setToolAttackSpeed(attackSpeed); + return this; + } + + public Builder ignoreCraftingTools() { + materialToolProperty.setShouldIgnoreCraftingTools(true); + return this; + } + + public Builder unbreakable() { + materialToolProperty.setUnbreakable(true); + return this; + } + + public Builder enchantment(Enchantment enchantment, int level) { + materialToolProperty.addEnchantmentForTools(enchantment, level); + return this; + } + + public Builder magnetic() { + materialToolProperty.setMagnetic(true); + return this; + } + + public Builder durabilityMultiplier(int multiplier) { + materialToolProperty.setDurabilityMultiplier(multiplier); + return this; + } + + public MaterialToolProperty build() { + return materialToolProperty; + } + } +} diff --git a/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java b/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java index 5dc2234a40e..3ccd75e4f93 100644 --- a/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java +++ b/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java @@ -13,7 +13,9 @@ public class PropertyKey { public static final PropertyKey ITEM_PIPE = new PropertyKey<>("item_pipe", ItemPipeProperties.class); public static final PropertyKey ORE = new PropertyKey<>("ore", OreProperty.class); - public static final PropertyKey TOOL = new PropertyKey<>("tool", ToolProperty.class); + public static final PropertyKey TOOL = new PropertyKey<>("tool", MaterialToolProperty.class); + public static final PropertyKey EXTRATOOL = new PropertyKey<>("extra_tool", + ExtraToolProperty.class); public static final PropertyKey ROTOR = new PropertyKey<>("rotor", RotorProperty.class); public static final PropertyKey WIRE = new PropertyKey<>("wire", WireProperties.class); public static final PropertyKey WOOD = new PropertyKey<>("wood", WoodProperty.class); diff --git a/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java index 99264c592e4..7ed7f0fac8f 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java @@ -7,7 +7,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; -public class ToolProperty implements IMaterialProperty { +public class ToolProperty { /** * Harvest speed of tools made from this Material. @@ -49,7 +49,12 @@ public class ToolProperty implements IMaterialProperty { *

* Default: 10 */ - private int enchantability = 10; + private int enchantability; + + /** + * A multiplier to the base durability for this material Mostly for modpack makers + */ + private int durabilityMultiplier; /** * If crafting tools should not be made from this material @@ -62,33 +67,42 @@ public class ToolProperty implements IMaterialProperty { private boolean isUnbreakable; /** - * If tools made of this material should be "magnetic," meaning items go - * directly into the player's inventory instead of dropping on the ground. + * If tools made of this material should be "magnetic," meaning items go directly into the player's inventory + * instead of dropping on the ground. */ private boolean isMagnetic; - /** - * A multiplier to the base durability for this material - * Mostly for modpack makers - */ - private int durabilityMultiplier = 1; - /** * Enchantment to be applied to tools made from this Material. */ - private final Object2ObjectMap enchantments = new Object2ObjectArrayMap<>(); + private final Object2ObjectMap enchantments; public ToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { this.harvestSpeed = harvestSpeed; this.attackDamage = attackDamage; this.durability = durability; this.harvestLevel = harvestLevel; + enchantments = new Object2ObjectArrayMap<>(); } public ToolProperty() { this(1.0F, 1.0F, 100, 2); } + public ToolProperty(ToolProperty property) { + harvestSpeed = property.harvestSpeed; + attackDamage = property.attackDamage; + attackSpeed = property.attackSpeed; + durability = property.durability; + harvestLevel = property.harvestLevel; + enchantability = property.enchantability; + durabilityMultiplier = property.durabilityMultiplier; + ignoreCraftingTools = property.ignoreCraftingTools; + isUnbreakable = property.isUnbreakable; + isMagnetic = property.isMagnetic; + enchantments = new Object2ObjectArrayMap<>(property.enchantments); + } + public float getToolSpeed() { return harvestSpeed; } @@ -173,11 +187,6 @@ public int getDurabilityMultiplier() { return durabilityMultiplier; } - @Override - public void verifyProperty(MaterialProperties properties) { - if (!properties.hasProperty(PropertyKey.GEM)) properties.ensureSet(PropertyKey.INGOT, true); - } - public void addEnchantmentForTools(Enchantment enchantment, int level) { this.addEnchantmentForTools(enchantment, level, 0); } @@ -185,56 +194,4 @@ public void addEnchantmentForTools(Enchantment enchantment, int level) { public void addEnchantmentForTools(Enchantment enchantment, double level, double levelGrowth) { enchantments.put(enchantment, new EnchantmentLevel(level, levelGrowth)); } - - public static class Builder { - - private final ToolProperty toolProperty; - - public static Builder of(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - return new Builder(harvestSpeed, attackDamage, durability, harvestLevel); - } - - private Builder(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - toolProperty = new ToolProperty(harvestSpeed, attackDamage, durability, harvestLevel); - } - - public Builder enchantability(int enchantability) { - toolProperty.setToolEnchantability(enchantability); - return this; - } - - public Builder attackSpeed(float attackSpeed) { - toolProperty.setToolAttackSpeed(attackSpeed); - return this; - } - - public Builder ignoreCraftingTools() { - toolProperty.setShouldIgnoreCraftingTools(true); - return this; - } - - public Builder unbreakable() { - toolProperty.setUnbreakable(true); - return this; - } - - public Builder enchantment(Enchantment enchantment, int level) { - toolProperty.addEnchantmentForTools(enchantment, level); - return this; - } - - public Builder magnetic() { - toolProperty.setMagnetic(true); - return this; - } - - public Builder durabilityMultiplier(int multiplier) { - toolProperty.setDurabilityMultiplier(multiplier); - return this; - } - - public ToolProperty build() { - return toolProperty; - } - } } diff --git a/src/main/java/gregtech/common/items/ToolItems.java b/src/main/java/gregtech/common/items/ToolItems.java index a7003d8f4c3..0c86eed1ecb 100644 --- a/src/main/java/gregtech/common/items/ToolItems.java +++ b/src/main/java/gregtech/common/items/ToolItems.java @@ -123,7 +123,7 @@ public static void init() { .sound(GTSoundEvents.SOFT_MALLET_TOOL) .symbol('r') .toolClasses(ToolClasses.SOFT_MALLET) - .markerItem(() -> ToolHelper.getAndSetToolData(SOFT_MALLET, Materials.Wood, 47, 1, 4F, 1F))); + .markerItem(() -> SOFT_MALLET.get(Materials.Wood))); MINING_HAMMER = register(ItemGTTool.Builder.of(GTValues.MODID, "mining_hammer") .toolStats(b -> b.blockBreaking().aoe(1, 1, 0) .efficiencyMultiplier(0.4F).attackDamage(1.5F).attackSpeed(-3.2F) @@ -329,7 +329,7 @@ public static void init() { .sound(GTSoundEvents.PLUNGER_TOOL) .oreDict(ToolOreDict.toolPlunger) .toolClasses(ToolClasses.PLUNGER) - .markerItem(() -> ToolHelper.getAndSetToolData(PLUNGER, Materials.Rubber, 255, 1, 4F, 0F))); + .markerItem(() -> PLUNGER.get(Materials.Rubber))); WIRECUTTER_LV = register(ItemGTTool.Builder.of(GTValues.MODID, "wire_cutter_lv") .toolStats(b -> b.blockBreaking().crafting().damagePerCraftingAction(4) .efficiencyMultiplier(2.0F) diff --git a/src/main/java/gregtech/integration/crafttweaker/material/CTMaterialBuilder.java b/src/main/java/gregtech/integration/crafttweaker/material/CTMaterialBuilder.java index d12a134adc5..17dcb2ec6ba 100644 --- a/src/main/java/gregtech/integration/crafttweaker/material/CTMaterialBuilder.java +++ b/src/main/java/gregtech/integration/crafttweaker/material/CTMaterialBuilder.java @@ -10,7 +10,7 @@ import gregtech.api.unification.material.info.MaterialFlag; import gregtech.api.unification.material.info.MaterialIconSet; import gregtech.api.unification.material.properties.BlastProperty; -import gregtech.api.unification.material.properties.ToolProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.stack.MaterialStack; import gregtech.api.util.GTUtility; import gregtech.api.util.Mods; @@ -153,7 +153,7 @@ public CTMaterialBuilder element(Element element) { public CTMaterialBuilder toolStats(float speed, float damage, int durability, int harvestLevel, @Optional int enchantability) { if (enchantability == 0) enchantability = 10; - backingBuilder.toolStats(ToolProperty.Builder.of(speed, damage, durability, harvestLevel) + backingBuilder.toolStats(MaterialToolProperty.Builder.of(speed, damage, durability, harvestLevel) .enchantability(enchantability).build()); return this; } diff --git a/src/main/java/gregtech/integration/crafttweaker/material/MaterialExpansion.java b/src/main/java/gregtech/integration/crafttweaker/material/MaterialExpansion.java index c0ae3b20efa..bbc06c6d25c 100644 --- a/src/main/java/gregtech/integration/crafttweaker/material/MaterialExpansion.java +++ b/src/main/java/gregtech/integration/crafttweaker/material/MaterialExpansion.java @@ -120,7 +120,7 @@ public static void setBurnTime(Material m, int burnTime) { @ZenGetter("toolSpeed") public static float toolSpeed(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolSpeed(); } else logError(m, "get the tool speed", "Tool"); @@ -129,7 +129,7 @@ public static float toolSpeed(Material m) { @ZenGetter("toolAttackDamage") public static float attackDamage(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolAttackDamage(); } else logError(m, "get the tool attack damage", "Tool"); @@ -138,7 +138,7 @@ public static float attackDamage(Material m) { @ZenGetter("toolDurability") public static int toolDurability(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolDurability(); } else logError(m, "get the tool durability", "Tool"); @@ -147,7 +147,7 @@ public static int toolDurability(Material m) { @ZenGetter("toolHarvestLevel") public static int toolHarvestLevel(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolHarvestLevel(); } else logError(m, "get the tool harvest level", "Tool"); @@ -156,7 +156,7 @@ public static int toolHarvestLevel(Material m) { @ZenGetter("toolEnchantability") public static int toolEnchant(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolEnchantability(); } else logError(m, "get the tool enchantability", "Tool"); @@ -173,7 +173,7 @@ public static void addToolEnchantment(Material m, IEnchantment enchantment) { @net.minecraftforge.fml.common.Optional.Method(modid = Mods.Names.CRAFT_TWEAKER) public static void addScaledToolEnchantment(Material m, IEnchantment enchantment, double levelGrowth) { if (checkFrozen("add tool enchantment")) return; - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { Enchantment enchantmentType = (Enchantment) enchantment.getDefinition().getInternal(); prop.addEnchantmentForTools(enchantmentType, enchantment.getLevel(), levelGrowth); @@ -191,7 +191,7 @@ public static void setToolStats(Material m, float toolSpeed, float toolAttackDam @Optional int enchantability, @Optional int toolHarvestLevel, @Optional boolean shouldIngoreCraftingTools) { if (checkFrozen("set tool stats")) return; - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { prop.setToolSpeed(toolSpeed); prop.setToolAttackDamage(toolAttackDamage); diff --git a/src/main/java/gregtech/integration/crafttweaker/material/MaterialPropertyExpansion.java b/src/main/java/gregtech/integration/crafttweaker/material/MaterialPropertyExpansion.java index 244d99174e1..2b03682e113 100644 --- a/src/main/java/gregtech/integration/crafttweaker/material/MaterialPropertyExpansion.java +++ b/src/main/java/gregtech/integration/crafttweaker/material/MaterialPropertyExpansion.java @@ -238,7 +238,7 @@ public static void addTools(Material m, float toolSpeed, float toolAttackDamage, m.getProperty(PropertyKey.TOOL).setToolEnchantability(toolEnchantability); m.getProperty(PropertyKey.TOOL).setDurabilityMultiplier(durabilityMultiplier); } else m.setProperty(PropertyKey.TOOL, - ToolProperty.Builder.of(toolSpeed, toolAttackDamage, toolDurability, toolHarvestLevel) + MaterialToolProperty.Builder.of(toolSpeed, toolAttackDamage, toolDurability, toolHarvestLevel) .attackSpeed(toolAttackSpeed).enchantability(toolEnchantability) .durabilityMultiplier(durabilityMultiplier).build()); } diff --git a/src/main/java/gregtech/integration/forestry/recipes/ForestryToolRecipes.java b/src/main/java/gregtech/integration/forestry/recipes/ForestryToolRecipes.java index 11213c4310c..44f326270a2 100644 --- a/src/main/java/gregtech/integration/forestry/recipes/ForestryToolRecipes.java +++ b/src/main/java/gregtech/integration/forestry/recipes/ForestryToolRecipes.java @@ -2,8 +2,8 @@ import gregtech.api.GTValues; import gregtech.api.unification.material.Material; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.UnificationEntry; import gregtech.integration.forestry.ForestryModule; @@ -18,7 +18,7 @@ public static void registerHandlers() { OrePrefix.stick.addProcessingHandler(PropertyKey.TOOL, ForestryToolRecipes::processScoop); } - private static void processScoop(OrePrefix prefix, Material material, ToolProperty property) { + private static void processScoop(OrePrefix prefix, Material material, MaterialToolProperty property) { ToolRecipeHandler.addToolRecipe(material, ForestryModule.SCOOP, false, "SWS", "SSS", "xSh", 'S', new UnificationEntry(OrePrefix.stick, material), diff --git a/src/main/java/gregtech/integration/groovy/GroovyExpansions.java b/src/main/java/gregtech/integration/groovy/GroovyExpansions.java index bd7e01ca643..16d52ec056c 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyExpansions.java +++ b/src/main/java/gregtech/integration/groovy/GroovyExpansions.java @@ -7,7 +7,8 @@ import gregtech.api.unification.Elements; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.event.MaterialEvent; -import gregtech.api.unification.material.properties.ToolProperty; +import gregtech.api.unification.material.properties.ExtraToolProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import net.minecraft.util.ResourceLocation; @@ -45,15 +46,25 @@ public static Material.Builder materialBuilder(MaterialEvent event, int id, Stri return materialBuilder(event, id, new ResourceLocation(domain, path)); } - public static ToolProperty.Builder toolBuilder(MaterialEvent event, float harvestSpeed, float attackDamage, - int durability, int harvestLevel) { - return ToolProperty.Builder.of(harvestSpeed, attackDamage, durability, harvestLevel); + public static MaterialToolProperty.Builder toolBuilder(MaterialEvent event, float harvestSpeed, float attackDamage, + int durability, int harvestLevel) { + return MaterialToolProperty.Builder.of(harvestSpeed, attackDamage, durability, harvestLevel); } - public static ToolProperty.Builder toolBuilder(MaterialEvent event) { + public static MaterialToolProperty.Builder toolBuilder(MaterialEvent event) { return toolBuilder(event, 1.0F, 1.0F, 100, 2); } + public static ExtraToolProperty.Builder overrideToolBuilder(MaterialEvent event) { + return ExtraToolProperty.Builder.of(); + } + + public static ExtraToolProperty.Builder overrideToolBuilder(MaterialEvent event, float harvestSpeed, + float attackDamage, + int durability, int harvestLevel) { + return ExtraToolProperty.Builder.of(harvestSpeed, attackDamage, durability, harvestLevel); + } + public static FluidBuilder fluidBuilder(MaterialEvent event) { return new FluidBuilder(); } diff --git a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java index f132c8ea481..ee78d5ec380 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java +++ b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java @@ -8,7 +8,8 @@ import gregtech.api.unification.material.info.MaterialFlag; import gregtech.api.unification.material.info.MaterialIconSet; import gregtech.api.unification.material.properties.BlastProperty; -import gregtech.api.unification.material.properties.ToolProperty; +import gregtech.api.unification.material.properties.ExtraToolProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.stack.MaterialStack; import net.minecraft.util.ResourceLocation; @@ -123,12 +124,18 @@ public static Material.Builder components(Material.Builder builder, Object... ob return builder.components(materialStacks.toArray(new MaterialStack[0])); } - public static Material.Builder toolStats(Material.Builder builder, ToolProperty.Builder toolBuilder) { + public static Material.Builder toolStats(Material.Builder builder, MaterialToolProperty.Builder toolBuilder) { return builder.toolStats(toolBuilder.build()); } public static Material.Builder toolStats(Material.Builder builder, float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - return builder.toolStats(ToolProperty.Builder.of(harvestSpeed, attackDamage, durability, harvestLevel).build()); + return builder.toolStats( + MaterialToolProperty.Builder.of(harvestSpeed, attackDamage, durability, harvestLevel).build()); + } + + public static Material.Builder overrideToolStats(Material.Builder builder, String toolId, + ExtraToolProperty.Builder overrideBuilder) { + return builder.overrideToolStats(toolId, overrideBuilder.build()); } } diff --git a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java index 96aa2b92cd1..0e2f3b9e801 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java +++ b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java @@ -313,9 +313,11 @@ public void onCompatLoaded(GroovyContainer container) { ExpansionHelper.mixinMethod(RecipeBuilder.class, GroovyExpansions.class, "property"); ExpansionHelper.mixinMethod(MaterialEvent.class, GroovyExpansions.class, "materialBuilder"); ExpansionHelper.mixinMethod(MaterialEvent.class, GroovyExpansions.class, "toolBuilder"); + ExpansionHelper.mixinMethod(MaterialEvent.class, GroovyExpansions.class, "overrideToolBuilder"); ExpansionHelper.mixinMethod(MaterialEvent.class, GroovyExpansions.class, "fluidBuilder"); ExpansionHelper.mixinMethod(MaterialEvent.class, GroovyExpansions.class, "addElement"); ExpansionHelper.mixinMethod(PostMaterialEvent.class, GroovyExpansions.class, "toolBuilder"); + ExpansionHelper.mixinMethod(PostMaterialEvent.class, GroovyExpansions.class, "overrideToolBuilder"); ExpansionHelper.mixinMethod(PostMaterialEvent.class, GroovyExpansions.class, "fluidBuilder"); ExpansionHelper.mixinMethod(FluidBuilder.class, GroovyExpansions.class, "acidic"); } diff --git a/src/main/java/gregtech/integration/groovy/MaterialExpansion.java b/src/main/java/gregtech/integration/groovy/MaterialExpansion.java index 6d5f5e7ac2f..3a69abb1165 100644 --- a/src/main/java/gregtech/integration/groovy/MaterialExpansion.java +++ b/src/main/java/gregtech/integration/groovy/MaterialExpansion.java @@ -6,10 +6,11 @@ import gregtech.api.unification.material.info.MaterialIconSet; import gregtech.api.unification.material.properties.BlastProperty; import gregtech.api.unification.material.properties.DustProperty; +import gregtech.api.unification.material.properties.ExtraToolProperty; import gregtech.api.unification.material.properties.FluidProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.OreProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import net.minecraft.enchantment.Enchantment; @@ -96,7 +97,7 @@ public static void setBurnTime(Material m, int burnTime) { // Tool Property // /////////////////////////////////// public static float toolSpeed(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolSpeed(); } else logError(m, "get the tool speed", "Tool"); @@ -104,7 +105,7 @@ public static float toolSpeed(Material m) { } public static float attackDamage(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolAttackDamage(); } else logError(m, "get the tool attack damage", "Tool"); @@ -112,7 +113,7 @@ public static float attackDamage(Material m) { } public static int toolDurability(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolDurability(); } else logError(m, "get the tool durability", "Tool"); @@ -120,7 +121,7 @@ public static int toolDurability(Material m) { } public static int toolHarvestLevel(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolHarvestLevel(); } else logError(m, "get the tool harvest level", "Tool"); @@ -128,7 +129,7 @@ public static int toolHarvestLevel(Material m) { } public static int toolEnchantability(Material m) { - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { return prop.getToolEnchantability(); } else logError(m, "get the tool enchantability", "Tool"); @@ -141,7 +142,7 @@ public static void addToolEnchantment(Material m, Enchantment enchantment, int l public static void addScaledToolEnchantment(Material m, Enchantment enchantment, int level, double levelGrowth) { if (checkFrozen("add tool enchantment")) return; - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { prop.addEnchantmentForTools(enchantment, level, levelGrowth); } else logError(m, "change tool enchantments", "Tool"); @@ -175,7 +176,7 @@ public static void setToolStats(Material m, float toolSpeed, float toolAttackDam int enchantability, int toolHarvestLevel, boolean shouldIngoreCraftingTools) { if (checkFrozen("set tool stats")) return; - ToolProperty prop = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty prop = m.getProperty(PropertyKey.TOOL); if (prop != null) { prop.setToolSpeed(toolSpeed); prop.setToolAttackDamage(toolAttackDamage); @@ -186,6 +187,19 @@ public static void setToolStats(Material m, float toolSpeed, float toolAttackDam } else logError(m, "change tool stats", "Tool"); } + //////////////////////////////////// + // Extra Tool Property // + //////////////////////////////////// + + public static void setOverrideToolStats(Material m, String toolId, ExtraToolProperty.Builder overrideBuilder) { + if (checkFrozen("set overriding tool stats")) return; + m.getProperties().ensureSet(PropertyKey.EXTRATOOL); + ExtraToolProperty prop = m.getProperty(PropertyKey.EXTRATOOL); + if (prop != null) { + prop.setOverrideProperty(toolId, overrideBuilder.build()); + } else logError(m, "change tool stats", "Tool"); + } + // Wire/Item Pipe/Fluid Pipe stuff? //////////////////////////////////// diff --git a/src/main/java/gregtech/integration/groovy/MaterialPropertyExpansion.java b/src/main/java/gregtech/integration/groovy/MaterialPropertyExpansion.java index 79cc7c810aa..cb3ac846adf 100644 --- a/src/main/java/gregtech/integration/groovy/MaterialPropertyExpansion.java +++ b/src/main/java/gregtech/integration/groovy/MaterialPropertyExpansion.java @@ -13,9 +13,9 @@ import gregtech.api.unification.material.properties.GemProperty; import gregtech.api.unification.material.properties.IngotProperty; import gregtech.api.unification.material.properties.ItemPipeProperties; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.OreProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.material.properties.WireProperties; import gregtech.api.unification.material.properties.WoodProperty; @@ -269,13 +269,13 @@ public static void addItemPipes(Material m, int priority, float transferRate) { } else m.setProperty(PropertyKey.ITEM_PIPE, new ItemPipeProperties(priority, transferRate)); } - public static void addTools(Material m, ToolProperty.Builder builder) { + public static void addTools(Material m, MaterialToolProperty.Builder builder) { addTools(m, builder.build()); } - public static void addTools(Material m, ToolProperty prop) { + public static void addTools(Material m, MaterialToolProperty prop) { if (checkFrozen("add Tools to a material")) return; - ToolProperty property = m.getProperty(PropertyKey.TOOL); + MaterialToolProperty property = m.getProperty(PropertyKey.TOOL); if (property != null) { property.setToolSpeed(prop.getToolSpeed()); property.setToolAttackDamage(prop.getToolAttackDamage()); @@ -313,7 +313,7 @@ public static void addTools(Material m, float toolSpeed, float toolAttackDamage, int durabilityMultiplier) { if (toolEnchantability == 0) toolEnchantability = 10; if (durabilityMultiplier <= 0) durabilityMultiplier = 1; - addTools(m, ToolProperty.Builder.of(toolSpeed, toolAttackDamage, toolDurability, toolHarvestLevel) + addTools(m, MaterialToolProperty.Builder.of(toolSpeed, toolAttackDamage, toolDurability, toolHarvestLevel) .attackSpeed(toolAttackSpeed) .enchantability(toolEnchantability) .durabilityMultiplier(durabilityMultiplier)); diff --git a/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java b/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java index 84e5cd91450..c33821d80d9 100644 --- a/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java +++ b/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java @@ -5,14 +5,14 @@ import gregtech.api.capability.IElectricItem; import gregtech.api.items.metaitem.MetaItem.MetaValueItem; import gregtech.api.items.toolitem.IGTTool; -import gregtech.api.items.toolitem.ToolHelper; import gregtech.api.recipes.ModHandler; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.MarkerMaterials; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; +import gregtech.api.unification.material.materials.SoftToolAddition; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.UnificationEntry; import gregtech.common.crafting.ToolHeadReplaceRecipe; @@ -122,7 +122,7 @@ public static void registerPowerUnitRecipes() { } } - private static void processTool(OrePrefix prefix, Material material, ToolProperty property) { + private static void processTool(OrePrefix prefix, Material material, MaterialToolProperty property) { UnificationEntry stick = new UnificationEntry(OrePrefix.stick, Materials.Wood); UnificationEntry plate = new UnificationEntry(OrePrefix.plate, material); UnificationEntry ingot = new UnificationEntry(material.hasProperty(GEM) ? OrePrefix.gem : OrePrefix.ingot, @@ -236,7 +236,7 @@ private static void processTool(OrePrefix prefix, Material material, ToolPropert } } - private static void processElectricTool(OrePrefix prefix, Material material, ToolProperty property) { + private static void processElectricTool(OrePrefix prefix, Material material, MaterialToolProperty property) { final int voltageMultiplier = material.getBlastTemperature() > 2800 ? VA[LV] : VA[ULV]; OrePrefix toolPrefix; @@ -415,31 +415,23 @@ private static void registerMortarRecipes() { } private static void registerSoftToolRecipes() { - final Material[] softMaterials = new Material[] { - Materials.Wood, Materials.Rubber, Materials.Polyethylene, - Materials.Polytetrafluoroethylene, Materials.Polybenzimidazole - }; + final Material[] softMaterials = SoftToolAddition.softMaterials; final UnificationEntry stick = new UnificationEntry(OrePrefix.stick, Materials.Wood); - for (int i = 0; i < softMaterials.length; i++) { - Material material = softMaterials[i]; - + for (Material material : softMaterials) { if (ModHandler.isMaterialWood(material)) { - ModHandler.addMirroredShapedRecipe(String.format("soft_mallet_%s", material), - ToolHelper.getAndSetToolData(ToolItems.SOFT_MALLET, material, 47, 1, 4F, 1F), + addToolRecipe(material, ToolItems.SOFT_MALLET, true, "II ", "IIS", "II ", 'I', new UnificationEntry(OrePrefix.plank, material), 'S', stick); } else { - ModHandler.addMirroredShapedRecipe(String.format("soft_mallet_%s", material), - ToolHelper.getAndSetToolData(ToolItems.SOFT_MALLET, material, 128 * (1 << i) - 1, 1, 4F, 1F), + addToolRecipe(material, ToolItems.SOFT_MALLET, true, "II ", "IIS", "II ", 'I', new UnificationEntry(OrePrefix.ingot, material), 'S', stick); - ModHandler.addMirroredShapedRecipe(String.format("plunger_%s", material), - ToolHelper.getAndSetToolData(ToolItems.PLUNGER, material, 128 * (i << 1) - 1, 1, 4F, 0F), + addToolRecipe(material, ToolItems.PLUNGER, true, "xPP", " SP", "S f", 'P', new UnificationEntry(OrePrefix.plate, material), 'S', stick);