From 26c0c890c1855be3447fa186628a95cb7ed7cd52 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Mon, 30 Dec 2024 02:49:03 +0800 Subject: [PATCH 01/13] Added repairing recipe workaround for specially registered tools This fix will eliminate the NullPointerException caused from repairing tools without toolProperty properly set for the material. Therefore, the current soft-mallet/plumber duplications will be fixed since they are separately registered currently. --- .../gregtech/api/items/toolitem/IGTTool.java | 76 +++++++++++++------ .../asm/hooks/RecipeRepairItemHooks.java | 2 +- .../minecraft/RecipeRepairItemMixin.java | 2 +- 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/api/items/toolitem/IGTTool.java b/src/main/java/gregtech/api/items/toolitem/IGTTool.java index 94ae45effb9..0b891ee8816 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -150,13 +150,20 @@ default ItemStack getRaw() { return stack; } - default ItemStack get(Material material) { + /** + * This is a safer wrapper for materials without toolProperty properly set. In this case, the missing data is + * inferred from the referenceStack. This method supports specially made tools that is registered separately. + * + * @return A tool made from the given material + */ + default ItemStack get(Material material, ItemStack referenceStack) { ItemStack stack = new ItemStack(get()); NBTTagCompound stackCompound = GTUtility.getOrCreateNbtCompound(stack); stackCompound.setBoolean(DISALLOW_CONTAINER_ITEM_KEY, false); NBTTagCompound toolTag = getToolTag(stack); + NBTTagCompound referenceToolTag = getToolTag(referenceStack); IGTToolDefinition toolStats = getToolStats(); // don't show the normal vanilla damage and attack speed tooltips, @@ -177,33 +184,47 @@ default ItemStack get(Material material) { // 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(); - - // 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); + int durability; + boolean isUnbreakable; + if (toolProperty != null) { + // Tool material modifiers. + durability = toolProperty.getToolDurability() * toolProperty.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 = (int) (durability * toolStats.getDurabilityMultiplier(stack)); + } else { + durability += (int) (toolStats.getBaseDurability(stack) * toolStats.getDurabilityMultiplier(stack)); + } + durability--; // Adjust for MC + + // Get unbreakability + isUnbreakable = toolProperty.getUnbreakable(); + + // Set tool and material enchantments + Object2IntMap enchantments = new Object2IntOpenHashMap<>(); + toolProperty.getEnchantments().forEach((enchantment, level) -> enchantments.put(enchantment, + level.getLevel(toolProperty.getToolHarvestLevel()))); + toolStats.getDefaultEnchantments(stack).forEach((enchantment, level) -> enchantments.put(enchantment, + level.getLevel(toolProperty.getToolHarvestLevel()))); + enchantments.forEach((enchantment, level) -> { + if (stack.getItem().canApplyAtEnchantingTable(stack, enchantment)) { + stack.addEnchantment(enchantment, level); + } + }); } else { - durability += toolStats.getBaseDurability(stack) * toolStats.getDurabilityMultiplier(stack); + // In this case, simply get from the reference tool + durability = referenceToolTag.getInteger(MAX_DURABILITY_KEY); + isUnbreakable = referenceToolTag.getBoolean(UNBREAKABLE_KEY); } - toolTag.setInteger(MAX_DURABILITY_KEY, durability - 1); - toolTag.setInteger(DURABILITY_KEY, 0); - if (toolProperty.getUnbreakable()) { + if (isUnbreakable) { 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()))); - toolStats.getDefaultEnchantments(stack).forEach((enchantment, level) -> enchantments.put(enchantment, - level.getLevel(toolProperty.getToolHarvestLevel()))); - enchantments.forEach((enchantment, level) -> { - if (stack.getItem().canApplyAtEnchantingTable(stack, enchantment)) { - stack.addEnchantment(enchantment, level); - } - }); + toolTag.setInteger(MAX_DURABILITY_KEY, durability); + toolTag.setInteger(DURABILITY_KEY, 0); // Set behaviours NBTTagCompound behaviourTag = getBehaviorsTag(stack); @@ -218,13 +239,20 @@ default ItemStack get(Material material) { behaviourTag.setInteger(AOE_LAYER_KEY, aoeDefinition.layer); } - if (toolProperty.isMagnetic()) { + if (toolProperty != null && toolProperty.isMagnetic()) { behaviourTag.setBoolean(RELOCATE_MINED_BLOCKS_KEY, true); } return stack; } + /** + * @return A tool made from the given material. The tool property for the material must be set. + */ + default ItemStack get(Material material) { + return get(material, ItemStack.EMPTY); + } + default ItemStack get(Material material, long defaultCharge, long defaultMaxCharge) { ItemStack stack = get(material); if (isElectric()) { diff --git a/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java b/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java index 7956c412a68..a00ec3da35a 100644 --- a/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java +++ b/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java @@ -96,7 +96,7 @@ public static ItemStack getCraftingResult(InventoryCrafting inv) { // two GT tools, so use own logic to produce the correct output IGTTool tool = (IGTTool) first.getItem(); - ItemStack output = tool.get(tool.getToolMaterial(first)); + ItemStack output = tool.get(tool.getToolMaterial(first), first); NBTTagCompound outputTag = ToolHelper.getToolTag(output); outputTag.setInteger(ToolHelper.DURABILITY_KEY, i1); diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 5cd275b6cf8..461a5216a16 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -76,7 +76,7 @@ public class RecipeRepairItemMixin { if (itemstack2.getItemDamage() == 0 && itemstack3.getItemDamage() == 0) { return ItemStack.EMPTY; } else { - ItemStack output = first.get(first.getToolMaterial(itemstack2)); + ItemStack output = first.get(first.getToolMaterial(itemstack2), itemstack2); NBTTagCompound outputTag = ToolHelper.getToolTag(output); outputTag.setInteger(ToolHelper.DURABILITY_KEY, itemDamage); return output; From e9089958137f6f9b094f041e3701dc69991a244c Mon Sep 17 00:00:00 2001 From: LittleCube Date: Wed, 1 Jan 2025 15:53:27 +0800 Subject: [PATCH 02/13] add ExtraToolProperty --- .../properties/ExtraToolProperty.java | 145 +++++++++++++ .../material/properties/PropertyKey.java | 1 + .../properties/SimpleToolProperty.java | 197 ++++++++++++++++++ .../material/properties/ToolProperty.java | 181 +--------------- 4 files changed, 353 insertions(+), 171 deletions(-) create mode 100644 src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java create mode 100644 src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java 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..ee88442a699 --- /dev/null +++ b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java @@ -0,0 +1,145 @@ +package gregtech.api.unification.material.properties; + +import net.minecraft.enchantment.Enchantment; + +import org.jetbrains.annotations.Nullable; + +import javax.tools.Tool; +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 SimpleToolProperty { + + public OverrideToolProperty() { + this.setToolSpeed(Float.NaN); + this.setToolAttackSpeed(Float.NaN); + this.setToolAttackDamage(Float.NaN); + this.setToolDurability(-1); + super.setToolHarvestLevel(-1); + this.setToolEnchantability(-1); + this.setDurabilityMultiplier(-1); + } + + // It does not make much sense to set these overrides: + public void setToolHarvestLevel(int harvestLevel) { + throw new UnsupportedOperationException(); + } + + public void setShouldIgnoreCraftingTools(boolean ignore) { + throw new UnsupportedOperationException(); + } + + public void setUnbreakable(boolean isUnbreakable) { + throw new UnsupportedOperationException(); + } + + public boolean isMagnetic() { + throw new UnsupportedOperationException(); + } + + public SimpleToolProperty override(SimpleToolProperty property) { + // Set the floating point number fields + if (!Float.isNaN(this.getToolSpeed())) + property.setToolSpeed(this.getToolSpeed()); + if (!Float.isNaN(this.getToolAttackSpeed())) + property.setToolAttackSpeed(this.getToolAttackSpeed()); + if (!Float.isNaN(this.getToolAttackDamage())) + property.setToolAttackDamage(this.getToolAttackDamage()); + + // Set the integer fields + if (this.getToolDurability() != -1) + property.setToolDurability(this.getToolDurability()); + if (this.getToolEnchantability() != -1) + property.setToolEnchantability(this.getToolEnchantability()); + if (this.getDurabilityMultiplier() != -1) + property.setDurabilityMultiplier(this.getDurabilityMultiplier()); + + // Merge the enchantment map + property.getEnchantments().putAll(this.getEnchantments()); + return property; + } + } + + public ExtraToolProperty() { + this.overrideMap = new HashMap<>(); + } + + public void setOverrideProperty(String toolClass, OverrideToolProperty overrideProperty) { + this.overrideMap.put(toolClass, overrideProperty); + } + + @Nullable + public OverrideToolProperty getOverrideProperty(String toolClass) { + return this.overrideMap.get(toolClass); + } + + public boolean hasOverrideProperty(String toolClass) { + return getOverrideProperty(toolClass) != null; + } + + public SimpleToolProperty getOverriddenResult(ToolProperty toolProperty, String toolClass){ + return overrideMap.getOrDefault(toolClass, new OverrideToolProperty()).override((SimpleToolProperty) toolProperty); + } + + @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 Overrider { + + private final OverrideToolProperty toolProperty; + + public static Overrider of() { + return new Overrider(); + } + + public static Overrider of(float harvestSpeed, float attackDamage, int durability) { + Overrider overrider = new Overrider(); + overrider.harvestSpeed(harvestSpeed).attackDamage(attackDamage).durability(durability); + return overrider; + } + + public Overrider() { + this.toolProperty = new OverrideToolProperty(); + } + + public Overrider harvestSpeed(float harvestSpeed) { + toolProperty.setToolSpeed(harvestSpeed); + return this; + } + + public Overrider attackDamage(float attackDamage) { + toolProperty.setToolAttackDamage(attackDamage); + return this; + } + + public Overrider durability(int durability) { + toolProperty.setToolDurability(durability); + return this; + } + + public Overrider attackSpeed(float attackSpeed) { + toolProperty.setToolAttackSpeed(attackSpeed); + return this; + } + + public Overrider enchantment(Enchantment enchantment, int level) { + toolProperty.addEnchantmentForTools(enchantment, level); + return this; + } + + public Overrider durabilityMultiplier(int multiplier) { + toolProperty.setDurabilityMultiplier(multiplier); + return this; + } + } +} 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..05e24d16651 100644 --- a/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java +++ b/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java @@ -14,6 +14,7 @@ public class PropertyKey { 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 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/SimpleToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java new file mode 100644 index 00000000000..894ad7aec50 --- /dev/null +++ b/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java @@ -0,0 +1,197 @@ +package gregtech.api.unification.material.properties; + +import gregtech.api.items.toolitem.EnchantmentLevel; + +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; + +import net.minecraft.enchantment.Enchantment; + +public class SimpleToolProperty { + + /** + * Harvest speed of tools made from this Material. + *

+ * Default: 1.0F + */ + private float harvestSpeed; + + /** + * Attack damage of tools made from this Material + *

+ * Default: 1.0F + */ + private float attackDamage; + + /** + * Attack speed of tools made from this Material + *

+ * Default: 0.0F + */ + private float attackSpeed; + + /** + * Durability of tools made from this Material. + *

+ * Default: 100 + */ + private int durability; + + /** + * Harvest level of tools made of this Material. + *

+ * Default: 2 (Iron). + */ + private int harvestLevel; + + /** + * Enchantability of tools made from this Material. + *

+ * Default: 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 + */ + private boolean ignoreCraftingTools; + + /** + * If tools made of this material should be unbreakable and ignore durability checks. + */ + 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. + */ + private boolean isMagnetic; + + /** + * Enchantment to be applied to tools made from this Material. + */ + private final Object2ObjectMap enchantments; + + public SimpleToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { + this.harvestSpeed = harvestSpeed; + this.attackDamage = attackDamage; + this.durability = durability; + this.harvestLevel = harvestLevel; + enchantments = new Object2ObjectArrayMap<>(); + } + + public SimpleToolProperty() { + this(1.0F, 1.0F, 100, 2); + } + + public SimpleToolProperty(SimpleToolProperty 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; + } + + public void setToolSpeed(float toolSpeed) { + this.harvestSpeed = toolSpeed; + } + + public float getToolAttackDamage() { + return attackDamage; + } + + public void setToolAttackDamage(float toolAttackDamage) { + this.attackDamage = toolAttackDamage; + } + + public float getToolAttackSpeed() { + return attackSpeed; + } + + public void setToolAttackSpeed(float toolAttackSpeed) { + this.attackSpeed = toolAttackSpeed; + } + + public int getToolDurability() { + return durability; + } + + public void setToolDurability(int toolDurability) { + this.durability = toolDurability; + } + + public int getToolHarvestLevel() { + return this.harvestLevel; + } + + public void setToolHarvestLevel(int toolHarvestLevel) { + this.harvestLevel = toolHarvestLevel; + } + + public int getToolEnchantability() { + return enchantability; + } + + public void setToolEnchantability(int toolEnchantability) { + this.enchantability = toolEnchantability; + } + + public boolean getShouldIgnoreCraftingTools() { + return ignoreCraftingTools; + } + + public void setShouldIgnoreCraftingTools(boolean ignore) { + this.ignoreCraftingTools = ignore; + } + + public boolean getUnbreakable() { + return isUnbreakable; + } + + public void setUnbreakable(boolean isUnbreakable) { + this.isUnbreakable = isUnbreakable; + } + + public Object2ObjectMap getEnchantments() { + return enchantments; + } + + public void setMagnetic(boolean isMagnetic) { + this.isMagnetic = isMagnetic; + } + + public boolean isMagnetic() { + return isMagnetic; + } + + public void setDurabilityMultiplier(int multiplier) { + this.durabilityMultiplier = multiplier; + } + + public int getDurabilityMultiplier() { + return durabilityMultiplier; + } + + public void addEnchantmentForTools(Enchantment enchantment, int level) { + this.addEnchantmentForTools(enchantment, level, 0); + } + + public void addEnchantmentForTools(Enchantment enchantment, double level, double levelGrowth) { + enchantments.put(enchantment, new EnchantmentLevel(level, levelGrowth)); + } +} 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..fefa498ac07 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java @@ -1,176 +1,23 @@ package gregtech.api.unification.material.properties; -import gregtech.api.items.toolitem.EnchantmentLevel; - import net.minecraft.enchantment.Enchantment; -import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMap; - -public class ToolProperty implements IMaterialProperty { - - /** - * Harvest speed of tools made from this Material. - *

- * Default: 1.0F - */ - private float harvestSpeed; - - /** - * Attack damage of tools made from this Material - *

- * Default: 1.0F - */ - private float attackDamage; - - /** - * Attack speed of tools made from this Material - *

- * Default: 0.0F - */ - private float attackSpeed; - - /** - * Durability of tools made from this Material. - *

- * Default: 100 - */ - private int durability; - - /** - * Harvest level of tools made of this Material. - *

- * Default: 2 (Iron). - */ - private int harvestLevel; - - /** - * Enchantability of tools made from this Material. - *

- * Default: 10 - */ - private int enchantability = 10; - - /** - * If crafting tools should not be made from this material - */ - private boolean ignoreCraftingTools; - - /** - * If tools made of this material should be unbreakable and ignore durability checks. - */ - 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. - */ - 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<>(); - - public ToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - this.harvestSpeed = harvestSpeed; - this.attackDamage = attackDamage; - this.durability = durability; - this.harvestLevel = harvestLevel; - } - - public ToolProperty() { - this(1.0F, 1.0F, 100, 2); - } - - public float getToolSpeed() { - return harvestSpeed; - } - - public void setToolSpeed(float toolSpeed) { - this.harvestSpeed = toolSpeed; - } - - public float getToolAttackDamage() { - return attackDamage; - } - - public void setToolAttackDamage(float toolAttackDamage) { - this.attackDamage = toolAttackDamage; - } - - public float getToolAttackSpeed() { - return attackSpeed; - } - - public void setToolAttackSpeed(float toolAttackSpeed) { - this.attackSpeed = toolAttackSpeed; - } - - public int getToolDurability() { - return durability; - } - - public void setToolDurability(int toolDurability) { - this.durability = toolDurability; - } - - public int getToolHarvestLevel() { - return this.harvestLevel; - } +import org.jetbrains.annotations.Nullable; - public void setToolHarvestLevel(int toolHarvestLevel) { - this.harvestLevel = toolHarvestLevel; - } +import java.util.HashMap; +import java.util.Map; - public int getToolEnchantability() { - return enchantability; - } +public class ToolProperty extends SimpleToolProperty implements IMaterialProperty { - public void setToolEnchantability(int toolEnchantability) { - this.enchantability = toolEnchantability; - } - public boolean getShouldIgnoreCraftingTools() { - return ignoreCraftingTools; - } - - public void setShouldIgnoreCraftingTools(boolean ignore) { - this.ignoreCraftingTools = ignore; - } - - public boolean getUnbreakable() { - return isUnbreakable; - } - - public void setUnbreakable(boolean isUnbreakable) { - this.isUnbreakable = isUnbreakable; - } - - public Object2ObjectMap getEnchantments() { - return enchantments; - } - - public void setMagnetic(boolean isMagnetic) { - this.isMagnetic = isMagnetic; - } - - public boolean isMagnetic() { - return isMagnetic; - } - - public void setDurabilityMultiplier(int multiplier) { - this.durabilityMultiplier = multiplier; + public ToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { + super(harvestSpeed, attackDamage, durability, harvestLevel); + this.setToolEnchantability(10); + this.setDurabilityMultiplier(1); } - public int getDurabilityMultiplier() { - return durabilityMultiplier; + public ToolProperty() { + this(1.0F, 1.0F, 100, 2); } @Override @@ -178,14 +25,6 @@ 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); - } - - public void addEnchantmentForTools(Enchantment enchantment, double level, double levelGrowth) { - enchantments.put(enchantment, new EnchantmentLevel(level, levelGrowth)); - } - public static class Builder { private final ToolProperty toolProperty; From b180442ff03929714422885829e2284b629b77ea Mon Sep 17 00:00:00 2001 From: LittleCube Date: Wed, 1 Jan 2025 17:12:46 +0800 Subject: [PATCH 03/13] Fixed overriding issue --- .../properties/ExtraToolProperty.java | 80 ++++++++++++------- .../asm/hooks/RecipeRepairItemHooks.java | 2 +- .../minecraft/RecipeRepairItemMixin.java | 2 +- 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java index ee88442a699..ac2172cdd22 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java @@ -2,9 +2,9 @@ import net.minecraft.enchantment.Enchantment; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.tools.Tool; import java.util.HashMap; import java.util.Map; @@ -22,16 +22,12 @@ public OverrideToolProperty() { this.setToolAttackSpeed(Float.NaN); this.setToolAttackDamage(Float.NaN); this.setToolDurability(-1); - super.setToolHarvestLevel(-1); + this.setToolHarvestLevel(-1); this.setToolEnchantability(-1); this.setDurabilityMultiplier(-1); } // It does not make much sense to set these overrides: - public void setToolHarvestLevel(int harvestLevel) { - throw new UnsupportedOperationException(); - } - public void setShouldIgnoreCraftingTools(boolean ignore) { throw new UnsupportedOperationException(); } @@ -44,26 +40,31 @@ public boolean isMagnetic() { throw new UnsupportedOperationException(); } - public SimpleToolProperty override(SimpleToolProperty property) { + private SimpleToolProperty override(@NotNull SimpleToolProperty property) { + // copy to prevent the previous map is produced + SimpleToolProperty result = new SimpleToolProperty(property); + // Set the floating point number fields if (!Float.isNaN(this.getToolSpeed())) - property.setToolSpeed(this.getToolSpeed()); + result.setToolSpeed(this.getToolSpeed()); if (!Float.isNaN(this.getToolAttackSpeed())) - property.setToolAttackSpeed(this.getToolAttackSpeed()); + result.setToolAttackSpeed(this.getToolAttackSpeed()); if (!Float.isNaN(this.getToolAttackDamage())) - property.setToolAttackDamage(this.getToolAttackDamage()); + result.setToolAttackDamage(this.getToolAttackDamage()); // Set the integer fields if (this.getToolDurability() != -1) - property.setToolDurability(this.getToolDurability()); + result.setToolDurability(this.getToolDurability()); + if (this.getToolHarvestLevel() != -1) + result.setToolHarvestLevel(this.getToolHarvestLevel()); if (this.getToolEnchantability() != -1) - property.setToolEnchantability(this.getToolEnchantability()); + result.setToolEnchantability(this.getToolEnchantability()); if (this.getDurabilityMultiplier() != -1) - property.setDurabilityMultiplier(this.getDurabilityMultiplier()); + result.setDurabilityMultiplier(this.getDurabilityMultiplier()); // Merge the enchantment map - property.getEnchantments().putAll(this.getEnchantments()); - return property; + result.getEnchantments().putAll(this.getEnchantments()); + return result; } } @@ -84,8 +85,10 @@ public boolean hasOverrideProperty(String toolClass) { return getOverrideProperty(toolClass) != null; } - public SimpleToolProperty getOverriddenResult(ToolProperty toolProperty, String toolClass){ - return overrideMap.getOrDefault(toolClass, new OverrideToolProperty()).override((SimpleToolProperty) toolProperty); + public SimpleToolProperty getOverriddenResult(String toolClass, @Nullable ToolProperty toolProperty) { + if (toolProperty == null) toolProperty = new ToolProperty(); + return overrideMap.getOrDefault(toolClass, new OverrideToolProperty()) + .override(toolProperty); } @Override @@ -94,52 +97,67 @@ public void verifyProperty(MaterialProperties properties) { // If they are overriding ToolProperty, then it is already generated. } - public static class Overrider { + public static class Builder { private final OverrideToolProperty toolProperty; - public static Overrider of() { - return new Overrider(); + public static Builder of() { + return new Builder(); + } + + public static Builder of(int durability) { + Builder builder = new Builder(); + builder.durability(durability); + return builder; } - public static Overrider of(float harvestSpeed, float attackDamage, int durability) { - Overrider overrider = new Overrider(); - overrider.harvestSpeed(harvestSpeed).attackDamage(attackDamage).durability(durability); - return overrider; + 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 Overrider() { + public Builder() { this.toolProperty = new OverrideToolProperty(); } - public Overrider harvestSpeed(float harvestSpeed) { + public Builder harvestSpeed(float harvestSpeed) { toolProperty.setToolSpeed(harvestSpeed); return this; } - public Overrider attackDamage(float attackDamage) { + public Builder attackDamage(float attackDamage) { toolProperty.setToolAttackDamage(attackDamage); return this; } - public Overrider durability(int durability) { + public Builder durability(int durability) { toolProperty.setToolDurability(durability); return this; } - public Overrider attackSpeed(float attackSpeed) { + public Builder attackSpeed(float attackSpeed) { toolProperty.setToolAttackSpeed(attackSpeed); return this; } - public Overrider enchantment(Enchantment enchantment, int level) { + public Builder harvestLevel(int harvestLevel) { + toolProperty.setToolHarvestLevel(harvestLevel); + return this; + } + + public Builder enchantment(Enchantment enchantment, int level) { toolProperty.addEnchantmentForTools(enchantment, level); return this; } - public Overrider durabilityMultiplier(int multiplier) { + public Builder durabilityMultiplier(int multiplier) { toolProperty.setDurabilityMultiplier(multiplier); return this; } + + public OverrideToolProperty build() { + return this.toolProperty; + } } } diff --git a/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java b/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java index a00ec3da35a..7956c412a68 100644 --- a/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java +++ b/src/main/java/gregtech/asm/hooks/RecipeRepairItemHooks.java @@ -96,7 +96,7 @@ public static ItemStack getCraftingResult(InventoryCrafting inv) { // two GT tools, so use own logic to produce the correct output IGTTool tool = (IGTTool) first.getItem(); - ItemStack output = tool.get(tool.getToolMaterial(first), first); + ItemStack output = tool.get(tool.getToolMaterial(first)); NBTTagCompound outputTag = ToolHelper.getToolTag(output); outputTag.setInteger(ToolHelper.DURABILITY_KEY, i1); diff --git a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java index 461a5216a16..5cd275b6cf8 100644 --- a/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java +++ b/src/main/java/gregtech/mixins/minecraft/RecipeRepairItemMixin.java @@ -76,7 +76,7 @@ public class RecipeRepairItemMixin { if (itemstack2.getItemDamage() == 0 && itemstack3.getItemDamage() == 0) { return ItemStack.EMPTY; } else { - ItemStack output = first.get(first.getToolMaterial(itemstack2), itemstack2); + ItemStack output = first.get(first.getToolMaterial(itemstack2)); NBTTagCompound outputTag = ToolHelper.getToolTag(output); outputTag.setInteger(ToolHelper.DURABILITY_KEY, itemDamage); return output; From 05e56fcbc575ba6b351be27d948ac4f1f2b8eeca Mon Sep 17 00:00:00 2001 From: LittleCube Date: Wed, 1 Jan 2025 17:13:38 +0800 Subject: [PATCH 04/13] Integrated soft tools using the new ExtraToolProperty --- .../gregtech/api/items/toolitem/IGTTool.java | 96 +++++++++---------- .../api/unification/material/Materials.java | 3 + .../material/materials/SoftToolAddition.java | 42 ++++++++ .../recipe/handlers/ToolRecipeHandler.java | 20 ++-- 4 files changed, 95 insertions(+), 66 deletions(-) create mode 100644 src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java diff --git a/src/main/java/gregtech/api/items/toolitem/IGTTool.java b/src/main/java/gregtech/api/items/toolitem/IGTTool.java index 0b891ee8816..713a7b90af7 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -20,6 +20,7 @@ import gregtech.api.unification.material.Materials; import gregtech.api.unification.material.properties.DustProperty; import gregtech.api.unification.material.properties.PropertyKey; +import gregtech.api.unification.material.properties.SimpleToolProperty; import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.UnificationEntry; @@ -151,19 +152,16 @@ default ItemStack getRaw() { } /** - * This is a safer wrapper for materials without toolProperty properly set. In this case, the missing data is - * inferred from the referenceStack. This method supports specially made tools that is registered separately. - * - * @return A tool made from the given material + * @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 referenceStack) { + default ItemStack get(Material material) { ItemStack stack = new ItemStack(get()); NBTTagCompound stackCompound = GTUtility.getOrCreateNbtCompound(stack); stackCompound.setBoolean(DISALLOW_CONTAINER_ITEM_KEY, false); NBTTagCompound toolTag = getToolTag(stack); - NBTTagCompound referenceToolTag = getToolTag(referenceStack); IGTToolDefinition toolStats = getToolStats(); // don't show the normal vanilla damage and attack speed tooltips, @@ -177,55 +175,56 @@ default ItemStack get(Material material, ItemStack referenceStack) { AoESymmetrical aoeDefinition = getToolStats().getAoEDefinition(stack); // Set other tool stats (durability) - ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); - + System.out.println(this.getToolId()); + SimpleToolProperty finalToolProperty; + { + ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); + if (material.hasProperty(PropertyKey.EXTRATOOL)) { + System.out.println("Find Override Property!"); + System.out.println(material); + finalToolProperty = material.getProperty(PropertyKey.EXTRATOOL) + .getOverriddenResult(this.getToolId(), toolProperty); + } else { + finalToolProperty = material.getProperty(PropertyKey.TOOL); + } + } // 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; - boolean isUnbreakable; - if (toolProperty != null) { - // Tool material modifiers. - durability = toolProperty.getToolDurability() * toolProperty.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 = (int) (durability * toolStats.getDurabilityMultiplier(stack)); - } else { - durability += (int) (toolStats.getBaseDurability(stack) * toolStats.getDurabilityMultiplier(stack)); - } - durability--; // Adjust for MC - - // Get unbreakability - isUnbreakable = toolProperty.getUnbreakable(); - - // Set tool and material enchantments - Object2IntMap enchantments = new Object2IntOpenHashMap<>(); - toolProperty.getEnchantments().forEach((enchantment, level) -> enchantments.put(enchantment, - level.getLevel(toolProperty.getToolHarvestLevel()))); - toolStats.getDefaultEnchantments(stack).forEach((enchantment, level) -> enchantments.put(enchantment, - level.getLevel(toolProperty.getToolHarvestLevel()))); - enchantments.forEach((enchantment, level) -> { - if (stack.getItem().canApplyAtEnchantingTable(stack, enchantment)) { - stack.addEnchantment(enchantment, level); - } - }); + // 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 = (int) (durability * toolStats.getDurabilityMultiplier(stack)); } else { - // In this case, simply get from the reference tool - durability = referenceToolTag.getInteger(MAX_DURABILITY_KEY); - isUnbreakable = referenceToolTag.getBoolean(UNBREAKABLE_KEY); + durability += (int) (toolStats.getBaseDurability(stack) * toolStats.getDurabilityMultiplier(stack)); } - if (isUnbreakable) { - stackCompound.setBoolean(UNBREAKABLE_KEY, true); - } + durability -= 1; // Finally adjust for MC toolTag.setInteger(MAX_DURABILITY_KEY, durability); toolTag.setInteger(DURABILITY_KEY, 0); + if (finalToolProperty.getUnbreakable()) { + stackCompound.setBoolean(UNBREAKABLE_KEY, true); + } + + // Set tool and material enchantments + Object2IntMap enchantments = new Object2IntOpenHashMap<>(); + finalToolProperty.getEnchantments().forEach((enchantment, level) -> enchantments.put(enchantment, + level.getLevel(finalToolProperty.getToolHarvestLevel()))); + toolStats.getDefaultEnchantments(stack).forEach((enchantment, level) -> enchantments.put(enchantment, + level.getLevel(finalToolProperty.getToolHarvestLevel()))); + enchantments.forEach((enchantment, level) -> { + if (stack.getItem().canApplyAtEnchantingTable(stack, enchantment)) { + stack.addEnchantment(enchantment, level); + } + }); + // Set behaviours NBTTagCompound behaviourTag = getBehaviorsTag(stack); getToolStats().getBehaviors().forEach(behavior -> behavior.addBehaviorNBT(stack, behaviourTag)); @@ -239,20 +238,13 @@ default ItemStack get(Material material, ItemStack referenceStack) { behaviourTag.setInteger(AOE_LAYER_KEY, aoeDefinition.layer); } - if (toolProperty != null && toolProperty.isMagnetic()) { + if (finalToolProperty.isMagnetic()) { behaviourTag.setBoolean(RELOCATE_MINED_BLOCKS_KEY, true); } return stack; } - /** - * @return A tool made from the given material. The tool property for the material must be set. - */ - default ItemStack get(Material material) { - return get(material, ItemStack.EMPTY); - } - default ItemStack get(Material material, long defaultCharge, long defaultMaxCharge) { ItemStack stack = get(material); if (isElectric()) { 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/SoftToolAddition.java b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java new file mode 100644 index 00000000000..a849e4de317 --- /dev/null +++ b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java @@ -0,0 +1,42 @@ +package gregtech.api.unification.material.materials; + +import gregtech.api.items.toolitem.ToolClasses; +import gregtech.api.recipes.ModHandler; +import gregtech.api.unification.material.properties.ExtraToolProperty; +import gregtech.api.unification.material.properties.PropertyKey; + +import gregtech.api.unification.material.Material; +import gregtech.api.unification.material.Materials; + +public class SoftToolAddition { + + public static final Material[] softMaterials = new Material[] { + Materials.Wood, Materials.Rubber, Materials.Polyethylene, + Materials.Polytetrafluoroethylene, Materials.Polybenzimidazole + }; + + private static ExtraToolProperty ensureExtraToolProperty(Material material) { + if (material.getProperty(PropertyKey.EXTRATOOL) == null) + material.setProperty(PropertyKey.EXTRATOOL, new ExtraToolProperty()); + return material.getProperty(PropertyKey.EXTRATOOL); + } + + + public static void register() { + for (int i = 0; i < softMaterials.length; i++) { + + Material material = softMaterials[i]; + + if (ModHandler.isMaterialWood(material)) { + ensureExtraToolProperty(material).setOverrideProperty(ToolClasses.SOFT_MALLET, + ExtraToolProperty.Builder.of(4F, 1F, 48, 1).build()); + } else { + ExtraToolProperty extraToolProperty = ensureExtraToolProperty(material); + 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/loaders/recipe/handlers/ToolRecipeHandler.java b/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java index 1997631a38c..d84ba659893 100644 --- a/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java +++ b/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java @@ -5,12 +5,12 @@ 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.PropertyKey; import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.ore.OrePrefix; @@ -406,31 +406,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); From 912776525f1d1ad2ced480d1061acf9a68dc796f Mon Sep 17 00:00:00 2001 From: LittleCube Date: Wed, 1 Jan 2025 18:34:06 +0800 Subject: [PATCH 05/13] Obtain markerItem of mallets and plungers from its own get method --- src/main/java/gregtech/common/items/ToolItems.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/items/ToolItems.java b/src/main/java/gregtech/common/items/ToolItems.java index 5545387ef7c..d824442ff92 100644 --- a/src/main/java/gregtech/common/items/ToolItems.java +++ b/src/main/java/gregtech/common/items/ToolItems.java @@ -115,7 +115,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) @@ -321,7 +321,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) From 2cfcfdbb86ce117c30cc23ee1811b784817b3a32 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Mon, 6 Jan 2025 20:49:48 +0800 Subject: [PATCH 06/13] Spotless formatting --- src/main/java/gregtech/api/items/toolitem/IGTTool.java | 2 +- .../unification/material/materials/SoftToolAddition.java | 6 ++---- .../unification/material/properties/ExtraToolProperty.java | 3 ++- .../api/unification/material/properties/PropertyKey.java | 3 ++- .../unification/material/properties/SimpleToolProperty.java | 4 ++-- .../api/unification/material/properties/ToolProperty.java | 6 ------ 6 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/gregtech/api/items/toolitem/IGTTool.java b/src/main/java/gregtech/api/items/toolitem/IGTTool.java index 713a7b90af7..81d5459b595 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -153,7 +153,7 @@ default ItemStack getRaw() { /** * @return A tool made from the given material. The tool property (at least overriding) for the material must be - * set. + * set. */ default ItemStack get(Material material) { ItemStack stack = new ItemStack(get()); diff --git a/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java index a849e4de317..c8672d92c89 100644 --- a/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java +++ b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java @@ -2,11 +2,10 @@ import gregtech.api.items.toolitem.ToolClasses; import gregtech.api.recipes.ModHandler; -import gregtech.api.unification.material.properties.ExtraToolProperty; -import gregtech.api.unification.material.properties.PropertyKey; - 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 { @@ -21,7 +20,6 @@ private static ExtraToolProperty ensureExtraToolProperty(Material material) { return material.getProperty(PropertyKey.EXTRATOOL); } - public static void register() { for (int i = 0; i < softMaterials.length; i++) { diff --git a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java index ac2172cdd22..d8c6eca4872 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java @@ -113,7 +113,8 @@ public static Builder of(int durability) { 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); + builder.harvestSpeed(harvestSpeed).attackDamage(attackDamage).durability(durability) + .harvestLevel(harvestLevel); return builder; } 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 05e24d16651..4306d000ba7 100644 --- a/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java +++ b/src/main/java/gregtech/api/unification/material/properties/PropertyKey.java @@ -14,7 +14,8 @@ public class PropertyKey { 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 EXTRATOOL = new PropertyKey<>("extra_tool", ExtraToolProperty.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/SimpleToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java index 894ad7aec50..c672f726298 100644 --- a/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java @@ -2,11 +2,11 @@ import gregtech.api.items.toolitem.EnchantmentLevel; +import net.minecraft.enchantment.Enchantment; + import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; -import net.minecraft.enchantment.Enchantment; - public class SimpleToolProperty { /** 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 fefa498ac07..e1c4de1f0a0 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java @@ -2,14 +2,8 @@ import net.minecraft.enchantment.Enchantment; -import org.jetbrains.annotations.Nullable; - -import java.util.HashMap; -import java.util.Map; - public class ToolProperty extends SimpleToolProperty implements IMaterialProperty { - public ToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { super(harvestSpeed, attackDamage, durability, harvestLevel); this.setToolEnchantability(10); From c38866d9d242c1b22cb72dfc3a4a82a9527acad7 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Mon, 6 Jan 2025 21:46:11 +0800 Subject: [PATCH 07/13] Change soft tool property registration to already existing method (ensureSet) --- .../material/materials/SoftToolAddition.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java index c8672d92c89..a348ecb76ed 100644 --- a/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java +++ b/src/main/java/gregtech/api/unification/material/materials/SoftToolAddition.java @@ -14,22 +14,21 @@ public class SoftToolAddition { Materials.Polytetrafluoroethylene, Materials.Polybenzimidazole }; - private static ExtraToolProperty ensureExtraToolProperty(Material material) { - if (material.getProperty(PropertyKey.EXTRATOOL) == null) - material.setProperty(PropertyKey.EXTRATOOL, new ExtraToolProperty()); - return material.getProperty(PropertyKey.EXTRATOOL); - } - public static void register() { for (int i = 0; i < softMaterials.length; i++) { Material material = softMaterials[i]; if (ModHandler.isMaterialWood(material)) { - ensureExtraToolProperty(material).setOverrideProperty(ToolClasses.SOFT_MALLET, + 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 { - ExtraToolProperty extraToolProperty = ensureExtraToolProperty(material); + 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, From 09df4b3c432714c50bd05c9ed6b601baf92b8165 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Mon, 6 Jan 2025 22:20:31 +0800 Subject: [PATCH 08/13] Remove accidentally left debugging output --- src/main/java/gregtech/api/items/toolitem/IGTTool.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/gregtech/api/items/toolitem/IGTTool.java b/src/main/java/gregtech/api/items/toolitem/IGTTool.java index 81d5459b595..ee59cd55f3d 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -175,13 +175,10 @@ default ItemStack get(Material material) { AoESymmetrical aoeDefinition = getToolStats().getAoEDefinition(stack); // Set other tool stats (durability) - System.out.println(this.getToolId()); SimpleToolProperty finalToolProperty; { ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); if (material.hasProperty(PropertyKey.EXTRATOOL)) { - System.out.println("Find Override Property!"); - System.out.println(material); finalToolProperty = material.getProperty(PropertyKey.EXTRATOOL) .getOverriddenResult(this.getToolId(), toolProperty); } else { From d61efe3ee5fe5cc89339c9bb485b111679eb8126 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Mon, 6 Jan 2025 23:10:59 +0800 Subject: [PATCH 09/13] Fix many properties are not properly overridden --- .../gregtech/api/items/toolitem/IGTTool.java | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/api/items/toolitem/IGTTool.java b/src/main/java/gregtech/api/items/toolitem/IGTTool.java index ee59cd55f3d..fa59429a1a5 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -175,16 +175,7 @@ default ItemStack get(Material material) { AoESymmetrical aoeDefinition = getToolStats().getAoEDefinition(stack); // Set other tool stats (durability) - SimpleToolProperty finalToolProperty; - { - ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); - if (material.hasProperty(PropertyKey.EXTRATOOL)) { - finalToolProperty = material.getProperty(PropertyKey.EXTRATOOL) - .getOverriddenResult(this.getToolId(), toolProperty); - } else { - finalToolProperty = material.getProperty(PropertyKey.TOOL); - } - } + SimpleToolProperty finalToolProperty = getToolProperty(material); // Durability formula we are working with: // Final Durability = (material durability * material durability multiplier) + (tool definition durability * // definition durability multiplier) - 1 @@ -270,8 +261,23 @@ default Material getToolMaterial(ItemStack stack) { } @Nullable - default ToolProperty getToolProperty(ItemStack stack) { - return getToolMaterial(stack).getProperty(PropertyKey.TOOL); + default SimpleToolProperty getToolProperty(Material material) { + SimpleToolProperty finalToolProperty; + { + ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); + if (material.hasProperty(PropertyKey.EXTRATOOL)) { + finalToolProperty = material.getProperty(PropertyKey.EXTRATOOL) + .getOverriddenResult(this.getToolId(), toolProperty); + } else { + finalToolProperty = toolProperty; + } + } + return finalToolProperty; + } + + @Nullable + default SimpleToolProperty getToolProperty(ItemStack stack) { + return getToolProperty(getToolMaterial(stack)); } @Nullable @@ -280,32 +286,32 @@ default DustProperty getDustProperty(ItemStack stack) { } default float getMaterialToolSpeed(ItemStack stack) { - ToolProperty toolProperty = getToolProperty(stack); + SimpleToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0F : toolProperty.getToolSpeed(); } default float getMaterialAttackDamage(ItemStack stack) { - ToolProperty toolProperty = getToolProperty(stack); + SimpleToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0F : toolProperty.getToolAttackDamage(); } default float getMaterialAttackSpeed(ItemStack stack) { - ToolProperty toolProperty = getToolProperty(stack); + SimpleToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0F : toolProperty.getToolAttackSpeed(); } default int getMaterialDurability(ItemStack stack) { - ToolProperty toolProperty = getToolProperty(stack); + SimpleToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0 : toolProperty.getToolDurability() * toolProperty.getDurabilityMultiplier(); } default int getMaterialEnchantability(ItemStack stack) { - ToolProperty toolProperty = getToolProperty(stack); + SimpleToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0 : toolProperty.getToolEnchantability(); } default int getMaterialHarvestLevel(ItemStack stack) { - ToolProperty toolProperty = getToolProperty(stack); + SimpleToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0 : toolProperty.getToolHarvestLevel(); } @@ -866,7 +872,7 @@ default AoESymmetrical getAoEDefinition(ItemStack stack) { } } - ToolProperty property = getToolProperty(stack); + SimpleToolProperty property = getToolProperty(stack); if (property == null) return false; // Check for any special enchantments specified by the material of this Tool From 7169eb896b4c54f9fa2fee0d3440235bfba0a077 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Mon, 6 Jan 2025 23:11:49 +0800 Subject: [PATCH 10/13] Add GroovyScript integration --- .../api/unification/material/Material.java | 10 ++++++++++ .../integration/groovy/GroovyExpansions.java | 11 +++++++++++ .../groovy/GroovyMaterialBuilderExpansion.java | 6 ++++++ .../integration/groovy/GroovyScriptModule.java | 2 ++ .../integration/groovy/MaterialExpansion.java | 14 ++++++++++++++ 5 files changed, 43 insertions(+) diff --git a/src/main/java/gregtech/api/unification/material/Material.java b/src/main/java/gregtech/api/unification/material/Material.java index 29c4c9fd9e4..72e3990a37d 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; @@ -936,6 +937,15 @@ public Builder toolStats(ToolProperty toolProperty) { return this; } + /** + * Use {@link ExtraToolProperty.Builder} to create a Tool Property Override. + */ + public Builder overrideToolStats(String toolClass, ExtraToolProperty.OverrideToolProperty toolProperty) { + properties.ensureSet(PropertyKey.EXTRATOOL); + properties.getProperty(PropertyKey.EXTRATOOL).setOverrideProperty(toolClass, toolProperty); + return this; + } + public Builder rotorStats(float speed, float damage, int durability) { properties.setProperty(PropertyKey.ROTOR, new RotorProperty(speed, damage, durability)); return this; diff --git a/src/main/java/gregtech/integration/groovy/GroovyExpansions.java b/src/main/java/gregtech/integration/groovy/GroovyExpansions.java index bd7e01ca643..1a2305f09e4 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyExpansions.java +++ b/src/main/java/gregtech/integration/groovy/GroovyExpansions.java @@ -7,6 +7,7 @@ import gregtech.api.unification.Elements; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.event.MaterialEvent; +import gregtech.api.unification.material.properties.ExtraToolProperty; import gregtech.api.unification.material.properties.ToolProperty; import net.minecraft.util.ResourceLocation; @@ -54,6 +55,16 @@ public static ToolProperty.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..6a097d8db92 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java +++ b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java @@ -8,6 +8,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.ExtraToolProperty; import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.stack.MaterialStack; @@ -131,4 +132,9 @@ public static Material.Builder toolStats(Material.Builder builder, float harvest int durability, int harvestLevel) { return builder.toolStats(ToolProperty.Builder.of(harvestSpeed, attackDamage, durability, harvestLevel).build()); } + + public static Material.Builder overrideToolStats(Material.Builder builder, String toolClass, + ExtraToolProperty.Builder overrideBuilder) { + return builder.overrideToolStats(toolClass, 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..652277bc3e2 100644 --- a/src/main/java/gregtech/integration/groovy/MaterialExpansion.java +++ b/src/main/java/gregtech/integration/groovy/MaterialExpansion.java @@ -6,6 +6,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.FluidProperty; import gregtech.api.unification.material.properties.OreProperty; import gregtech.api.unification.material.properties.PropertyKey; @@ -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 toolClass, 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(toolClass, overrideBuilder.build()); + } else logError(m, "change tool stats", "Tool"); + } + // Wire/Item Pipe/Fluid Pipe stuff? //////////////////////////////////// From f1237eb9db0c16371f438e34b05b1aaa77cbfe12 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Tue, 7 Jan 2025 00:25:09 +0800 Subject: [PATCH 11/13] Fix misleading variable name (toolClass -> toolId) --- .../api/unification/material/Material.java | 4 ++-- .../material/properties/ExtraToolProperty.java | 16 ++++++++-------- .../groovy/GroovyMaterialBuilderExpansion.java | 4 ++-- .../integration/groovy/MaterialExpansion.java | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/gregtech/api/unification/material/Material.java b/src/main/java/gregtech/api/unification/material/Material.java index 72e3990a37d..66871358bee 100644 --- a/src/main/java/gregtech/api/unification/material/Material.java +++ b/src/main/java/gregtech/api/unification/material/Material.java @@ -940,9 +940,9 @@ public Builder toolStats(ToolProperty toolProperty) { /** * Use {@link ExtraToolProperty.Builder} to create a Tool Property Override. */ - public Builder overrideToolStats(String toolClass, ExtraToolProperty.OverrideToolProperty toolProperty) { + public Builder overrideToolStats(String toolId, ExtraToolProperty.OverrideToolProperty toolProperty) { properties.ensureSet(PropertyKey.EXTRATOOL); - properties.getProperty(PropertyKey.EXTRATOOL).setOverrideProperty(toolClass, toolProperty); + properties.getProperty(PropertyKey.EXTRATOOL).setOverrideProperty(toolId, toolProperty); return this; } diff --git a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java index d8c6eca4872..1e7a42c6b11 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java @@ -72,22 +72,22 @@ public ExtraToolProperty() { this.overrideMap = new HashMap<>(); } - public void setOverrideProperty(String toolClass, OverrideToolProperty overrideProperty) { - this.overrideMap.put(toolClass, overrideProperty); + public void setOverrideProperty(String toolId, OverrideToolProperty overrideProperty) { + this.overrideMap.put(toolId, overrideProperty); } @Nullable - public OverrideToolProperty getOverrideProperty(String toolClass) { - return this.overrideMap.get(toolClass); + public OverrideToolProperty getOverrideProperty(String toolId) { + return this.overrideMap.get(toolId); } - public boolean hasOverrideProperty(String toolClass) { - return getOverrideProperty(toolClass) != null; + public boolean hasOverrideProperty(String toolId) { + return getOverrideProperty(toolId) != null; } - public SimpleToolProperty getOverriddenResult(String toolClass, @Nullable ToolProperty toolProperty) { + public SimpleToolProperty getOverriddenResult(String toolId, @Nullable ToolProperty toolProperty) { if (toolProperty == null) toolProperty = new ToolProperty(); - return overrideMap.getOrDefault(toolClass, new OverrideToolProperty()) + return overrideMap.getOrDefault(toolId, new OverrideToolProperty()) .override(toolProperty); } diff --git a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java index 6a097d8db92..e8acd54b925 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java +++ b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java @@ -133,8 +133,8 @@ public static Material.Builder toolStats(Material.Builder builder, float harvest return builder.toolStats(ToolProperty.Builder.of(harvestSpeed, attackDamage, durability, harvestLevel).build()); } - public static Material.Builder overrideToolStats(Material.Builder builder, String toolClass, + public static Material.Builder overrideToolStats(Material.Builder builder, String toolId, ExtraToolProperty.Builder overrideBuilder) { - return builder.overrideToolStats(toolClass, overrideBuilder.build()); + return builder.overrideToolStats(toolId, overrideBuilder.build()); } } diff --git a/src/main/java/gregtech/integration/groovy/MaterialExpansion.java b/src/main/java/gregtech/integration/groovy/MaterialExpansion.java index 652277bc3e2..2e13841470d 100644 --- a/src/main/java/gregtech/integration/groovy/MaterialExpansion.java +++ b/src/main/java/gregtech/integration/groovy/MaterialExpansion.java @@ -191,12 +191,12 @@ public static void setToolStats(Material m, float toolSpeed, float toolAttackDam // Extra Tool Property // //////////////////////////////////// - public static void setOverrideToolStats(Material m, String toolClass, ExtraToolProperty.Builder overrideBuilder) { + 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(toolClass, overrideBuilder.build()); + prop.setOverrideProperty(toolId, overrideBuilder.build()); } else logError(m, "change tool stats", "Tool"); } From f6ddb77898c4e98b59c9e345f56235af941889b5 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Sun, 9 Feb 2025 18:32:22 +0800 Subject: [PATCH 12/13] refactor ToolProperty -> MaterialToolProperty and SimpleToolProperty -> ToolProperty --- .../items/materialitem/MetaPrefixItem.java | 4 +- .../gregtech/api/items/toolitem/IGTTool.java | 30 +-- .../api/items/toolitem/ToolHelper.java | 10 +- .../api/unification/material/Material.java | 26 +-- .../material/materials/ElementMaterials.java | 12 +- .../materials/FirstDegreeMaterials.java | 22 +- .../materials/HigherDegreeMaterials.java | 8 +- .../materials/SecondDegreeMaterials.java | 14 +- .../properties/ExtraToolProperty.java | 12 +- .../properties/MaterialToolProperty.java | 73 ++++++ .../material/properties/PropertyKey.java | 2 +- .../properties/SimpleToolProperty.java | 197 ---------------- .../material/properties/ToolProperty.java | 216 ++++++++++++++---- .../material/CTMaterialBuilder.java | 4 +- .../material/MaterialExpansion.java | 14 +- .../material/MaterialPropertyExpansion.java | 2 +- .../forestry/recipes/ForestryToolRecipes.java | 4 +- .../integration/groovy/GroovyExpansions.java | 10 +- .../GroovyMaterialBuilderExpansion.java | 7 +- .../integration/groovy/MaterialExpansion.java | 16 +- .../groovy/MaterialPropertyExpansion.java | 10 +- .../recipe/handlers/ToolRecipeHandler.java | 6 +- 22 files changed, 350 insertions(+), 349 deletions(-) create mode 100644 src/main/java/gregtech/api/unification/material/properties/MaterialToolProperty.java delete mode 100644 src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java 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 08adf2d7f52..bb81e9dd570 100644 --- a/src/main/java/gregtech/api/items/toolitem/IGTTool.java +++ b/src/main/java/gregtech/api/items/toolitem/IGTTool.java @@ -16,8 +16,8 @@ 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.SimpleToolProperty; import gregtech.api.unification.material.properties.ToolProperty; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.UnificationEntry; @@ -183,7 +183,7 @@ default ItemStack get(Material material) { AoESymmetrical aoeDefinition = getToolStats().getAoEDefinition(stack); // Set other tool stats (durability) - SimpleToolProperty finalToolProperty = getToolProperty(material); + ToolProperty finalToolProperty = getToolProperty(material); // Durability formula we are working with: // Final Durability = (material durability * material durability multiplier) + (tool definition durability * // definition durability multiplier) - 1 @@ -269,22 +269,22 @@ default Material getToolMaterial(ItemStack stack) { } @Nullable - default SimpleToolProperty getToolProperty(Material material) { - SimpleToolProperty finalToolProperty; + default ToolProperty getToolProperty(Material material) { + ToolProperty finalToolProperty; { - ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); + MaterialToolProperty materialToolProperty = material.getProperty(PropertyKey.TOOL); if (material.hasProperty(PropertyKey.EXTRATOOL)) { finalToolProperty = material.getProperty(PropertyKey.EXTRATOOL) - .getOverriddenResult(this.getToolId(), toolProperty); + .getOverriddenResult(this.getToolId(), materialToolProperty); } else { - finalToolProperty = toolProperty; + finalToolProperty = materialToolProperty; } } return finalToolProperty; } @Nullable - default SimpleToolProperty getToolProperty(ItemStack stack) { + default ToolProperty getToolProperty(ItemStack stack) { return getToolProperty(getToolMaterial(stack)); } @@ -294,32 +294,32 @@ default DustProperty getDustProperty(ItemStack stack) { } default float getMaterialToolSpeed(ItemStack stack) { - SimpleToolProperty toolProperty = getToolProperty(stack); + ToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0F : toolProperty.getToolSpeed(); } default float getMaterialAttackDamage(ItemStack stack) { - SimpleToolProperty toolProperty = getToolProperty(stack); + ToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0F : toolProperty.getToolAttackDamage(); } default float getMaterialAttackSpeed(ItemStack stack) { - SimpleToolProperty toolProperty = getToolProperty(stack); + ToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0F : toolProperty.getToolAttackSpeed(); } default int getMaterialDurability(ItemStack stack) { - SimpleToolProperty toolProperty = getToolProperty(stack); + ToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0 : toolProperty.getToolDurability() * toolProperty.getDurabilityMultiplier(); } default int getMaterialEnchantability(ItemStack stack) { - SimpleToolProperty toolProperty = getToolProperty(stack); + ToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0 : toolProperty.getToolEnchantability(); } default int getMaterialHarvestLevel(ItemStack stack) { - SimpleToolProperty toolProperty = getToolProperty(stack); + ToolProperty toolProperty = getToolProperty(stack); return toolProperty == null ? 0 : toolProperty.getToolHarvestLevel(); } @@ -886,7 +886,7 @@ default List getBehaviors(ItemStack stack) { } } - SimpleToolProperty property = getToolProperty(stack); + ToolProperty property = getToolProperty(stack); if (property == null) return false; // Check for any special enchantments specified by the material of this Tool 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 66871358bee..d0f42cbe1ac 100644 --- a/src/main/java/gregtech/api/unification/material/Material.java +++ b/src/main/java/gregtech/api/unification/material/Material.java @@ -20,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; @@ -638,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. */ @@ -650,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. @@ -673,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) { @@ -684,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. */ @@ -712,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. @@ -727,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. @@ -764,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. @@ -778,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.
@@ -813,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. @@ -930,10 +930,10 @@ 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; } 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/properties/ExtraToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java index 1e7a42c6b11..78441d7a375 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java @@ -15,7 +15,7 @@ public class ExtraToolProperty implements IMaterialProperty { */ private final Map overrideMap; - public static class OverrideToolProperty extends SimpleToolProperty { + public static class OverrideToolProperty extends ToolProperty { public OverrideToolProperty() { this.setToolSpeed(Float.NaN); @@ -40,9 +40,9 @@ public boolean isMagnetic() { throw new UnsupportedOperationException(); } - private SimpleToolProperty override(@NotNull SimpleToolProperty property) { + private ToolProperty override(@NotNull ToolProperty property) { // copy to prevent the previous map is produced - SimpleToolProperty result = new SimpleToolProperty(property); + ToolProperty result = new ToolProperty(property); // Set the floating point number fields if (!Float.isNaN(this.getToolSpeed())) @@ -85,10 +85,10 @@ public boolean hasOverrideProperty(String toolId) { return getOverrideProperty(toolId) != null; } - public SimpleToolProperty getOverriddenResult(String toolId, @Nullable ToolProperty toolProperty) { - if (toolProperty == null) toolProperty = new ToolProperty(); + public ToolProperty getOverriddenResult(String toolId, @Nullable MaterialToolProperty materialToolProperty) { + if (materialToolProperty == null) materialToolProperty = new MaterialToolProperty(); return overrideMap.getOrDefault(toolId, new OverrideToolProperty()) - .override(toolProperty); + .override(materialToolProperty); } @Override 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 4306d000ba7..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,7 @@ 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); diff --git a/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java deleted file mode 100644 index c672f726298..00000000000 --- a/src/main/java/gregtech/api/unification/material/properties/SimpleToolProperty.java +++ /dev/null @@ -1,197 +0,0 @@ -package gregtech.api.unification.material.properties; - -import gregtech.api.items.toolitem.EnchantmentLevel; - -import net.minecraft.enchantment.Enchantment; - -import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMap; - -public class SimpleToolProperty { - - /** - * Harvest speed of tools made from this Material. - *

- * Default: 1.0F - */ - private float harvestSpeed; - - /** - * Attack damage of tools made from this Material - *

- * Default: 1.0F - */ - private float attackDamage; - - /** - * Attack speed of tools made from this Material - *

- * Default: 0.0F - */ - private float attackSpeed; - - /** - * Durability of tools made from this Material. - *

- * Default: 100 - */ - private int durability; - - /** - * Harvest level of tools made of this Material. - *

- * Default: 2 (Iron). - */ - private int harvestLevel; - - /** - * Enchantability of tools made from this Material. - *

- * Default: 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 - */ - private boolean ignoreCraftingTools; - - /** - * If tools made of this material should be unbreakable and ignore durability checks. - */ - 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. - */ - private boolean isMagnetic; - - /** - * Enchantment to be applied to tools made from this Material. - */ - private final Object2ObjectMap enchantments; - - public SimpleToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - this.harvestSpeed = harvestSpeed; - this.attackDamage = attackDamage; - this.durability = durability; - this.harvestLevel = harvestLevel; - enchantments = new Object2ObjectArrayMap<>(); - } - - public SimpleToolProperty() { - this(1.0F, 1.0F, 100, 2); - } - - public SimpleToolProperty(SimpleToolProperty 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; - } - - public void setToolSpeed(float toolSpeed) { - this.harvestSpeed = toolSpeed; - } - - public float getToolAttackDamage() { - return attackDamage; - } - - public void setToolAttackDamage(float toolAttackDamage) { - this.attackDamage = toolAttackDamage; - } - - public float getToolAttackSpeed() { - return attackSpeed; - } - - public void setToolAttackSpeed(float toolAttackSpeed) { - this.attackSpeed = toolAttackSpeed; - } - - public int getToolDurability() { - return durability; - } - - public void setToolDurability(int toolDurability) { - this.durability = toolDurability; - } - - public int getToolHarvestLevel() { - return this.harvestLevel; - } - - public void setToolHarvestLevel(int toolHarvestLevel) { - this.harvestLevel = toolHarvestLevel; - } - - public int getToolEnchantability() { - return enchantability; - } - - public void setToolEnchantability(int toolEnchantability) { - this.enchantability = toolEnchantability; - } - - public boolean getShouldIgnoreCraftingTools() { - return ignoreCraftingTools; - } - - public void setShouldIgnoreCraftingTools(boolean ignore) { - this.ignoreCraftingTools = ignore; - } - - public boolean getUnbreakable() { - return isUnbreakable; - } - - public void setUnbreakable(boolean isUnbreakable) { - this.isUnbreakable = isUnbreakable; - } - - public Object2ObjectMap getEnchantments() { - return enchantments; - } - - public void setMagnetic(boolean isMagnetic) { - this.isMagnetic = isMagnetic; - } - - public boolean isMagnetic() { - return isMagnetic; - } - - public void setDurabilityMultiplier(int multiplier) { - this.durabilityMultiplier = multiplier; - } - - public int getDurabilityMultiplier() { - return durabilityMultiplier; - } - - public void addEnchantmentForTools(Enchantment enchantment, int level) { - this.addEnchantmentForTools(enchantment, level, 0); - } - - public void addEnchantmentForTools(Enchantment enchantment, double level, double levelGrowth) { - enchantments.put(enchantment, new EnchantmentLevel(level, levelGrowth)); - } -} 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 e1c4de1f0a0..7ed7f0fac8f 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ToolProperty.java @@ -1,73 +1,197 @@ package gregtech.api.unification.material.properties; +import gregtech.api.items.toolitem.EnchantmentLevel; + import net.minecraft.enchantment.Enchantment; -public class ToolProperty extends SimpleToolProperty implements IMaterialProperty { +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; + +public class ToolProperty { + + /** + * Harvest speed of tools made from this Material. + *

+ * Default: 1.0F + */ + private float harvestSpeed; + + /** + * Attack damage of tools made from this Material + *

+ * Default: 1.0F + */ + private float attackDamage; + + /** + * Attack speed of tools made from this Material + *

+ * Default: 0.0F + */ + private float attackSpeed; + + /** + * Durability of tools made from this Material. + *

+ * Default: 100 + */ + private int durability; + + /** + * Harvest level of tools made of this Material. + *

+ * Default: 2 (Iron). + */ + private int harvestLevel; + + /** + * Enchantability of tools made from this Material. + *

+ * Default: 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 + */ + private boolean ignoreCraftingTools; + + /** + * If tools made of this material should be unbreakable and ignore durability checks. + */ + 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. + */ + private boolean isMagnetic; + + /** + * Enchantment to be applied to tools made from this Material. + */ + private final Object2ObjectMap enchantments; public ToolProperty(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - super(harvestSpeed, attackDamage, durability, harvestLevel); - this.setToolEnchantability(10); - this.setDurabilityMultiplier(1); + this.harvestSpeed = harvestSpeed; + this.attackDamage = attackDamage; + this.durability = durability; + this.harvestLevel = harvestLevel; + enchantments = new Object2ObjectArrayMap<>(); } public ToolProperty() { this(1.0F, 1.0F, 100, 2); } - @Override - public void verifyProperty(MaterialProperties properties) { - if (!properties.hasProperty(PropertyKey.GEM)) properties.ensureSet(PropertyKey.INGOT, true); + 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; + } + + public void setToolSpeed(float toolSpeed) { + this.harvestSpeed = toolSpeed; + } + + public float getToolAttackDamage() { + return attackDamage; + } + + public void setToolAttackDamage(float toolAttackDamage) { + this.attackDamage = toolAttackDamage; + } + + public float getToolAttackSpeed() { + return attackSpeed; + } + + public void setToolAttackSpeed(float toolAttackSpeed) { + this.attackSpeed = toolAttackSpeed; + } + + public int getToolDurability() { + return durability; + } + + public void setToolDurability(int toolDurability) { + this.durability = toolDurability; } - public static class Builder { + public int getToolHarvestLevel() { + return this.harvestLevel; + } - private final ToolProperty toolProperty; + public void setToolHarvestLevel(int toolHarvestLevel) { + this.harvestLevel = toolHarvestLevel; + } - public static Builder of(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - return new Builder(harvestSpeed, attackDamage, durability, harvestLevel); - } + public int getToolEnchantability() { + return enchantability; + } - private Builder(float harvestSpeed, float attackDamage, int durability, int harvestLevel) { - toolProperty = new ToolProperty(harvestSpeed, attackDamage, durability, harvestLevel); - } + public void setToolEnchantability(int toolEnchantability) { + this.enchantability = toolEnchantability; + } - public Builder enchantability(int enchantability) { - toolProperty.setToolEnchantability(enchantability); - return this; - } + public boolean getShouldIgnoreCraftingTools() { + return ignoreCraftingTools; + } - public Builder attackSpeed(float attackSpeed) { - toolProperty.setToolAttackSpeed(attackSpeed); - return this; - } + public void setShouldIgnoreCraftingTools(boolean ignore) { + this.ignoreCraftingTools = ignore; + } - public Builder ignoreCraftingTools() { - toolProperty.setShouldIgnoreCraftingTools(true); - return this; - } + public boolean getUnbreakable() { + return isUnbreakable; + } - public Builder unbreakable() { - toolProperty.setUnbreakable(true); - return this; - } + public void setUnbreakable(boolean isUnbreakable) { + this.isUnbreakable = isUnbreakable; + } - public Builder enchantment(Enchantment enchantment, int level) { - toolProperty.addEnchantmentForTools(enchantment, level); - return this; - } + public Object2ObjectMap getEnchantments() { + return enchantments; + } - public Builder magnetic() { - toolProperty.setMagnetic(true); - return this; - } + public void setMagnetic(boolean isMagnetic) { + this.isMagnetic = isMagnetic; + } + + public boolean isMagnetic() { + return isMagnetic; + } + + public void setDurabilityMultiplier(int multiplier) { + this.durabilityMultiplier = multiplier; + } + + public int getDurabilityMultiplier() { + return durabilityMultiplier; + } - public Builder durabilityMultiplier(int multiplier) { - toolProperty.setDurabilityMultiplier(multiplier); - return this; - } + public void addEnchantmentForTools(Enchantment enchantment, int level) { + this.addEnchantmentForTools(enchantment, level, 0); + } - public ToolProperty build() { - return toolProperty; - } + public void addEnchantmentForTools(Enchantment enchantment, double level, double levelGrowth) { + enchantments.put(enchantment, new EnchantmentLevel(level, levelGrowth)); } } 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 1a2305f09e4..16d52ec056c 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyExpansions.java +++ b/src/main/java/gregtech/integration/groovy/GroovyExpansions.java @@ -8,7 +8,7 @@ import gregtech.api.unification.material.Material; import gregtech.api.unification.material.event.MaterialEvent; import gregtech.api.unification.material.properties.ExtraToolProperty; -import gregtech.api.unification.material.properties.ToolProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import net.minecraft.util.ResourceLocation; @@ -46,12 +46,12 @@ 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); } diff --git a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java index e8acd54b925..ee78d5ec380 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java +++ b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java @@ -9,7 +9,7 @@ import gregtech.api.unification.material.info.MaterialIconSet; import gregtech.api.unification.material.properties.BlastProperty; import gregtech.api.unification.material.properties.ExtraToolProperty; -import gregtech.api.unification.material.properties.ToolProperty; +import gregtech.api.unification.material.properties.MaterialToolProperty; import gregtech.api.unification.stack.MaterialStack; import net.minecraft.util.ResourceLocation; @@ -124,13 +124,14 @@ 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, diff --git a/src/main/java/gregtech/integration/groovy/MaterialExpansion.java b/src/main/java/gregtech/integration/groovy/MaterialExpansion.java index 2e13841470d..3a69abb1165 100644 --- a/src/main/java/gregtech/integration/groovy/MaterialExpansion.java +++ b/src/main/java/gregtech/integration/groovy/MaterialExpansion.java @@ -8,9 +8,9 @@ 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; @@ -97,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"); @@ -105,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"); @@ -113,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"); @@ -121,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"); @@ -129,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"); @@ -142,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"); @@ -176,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); 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 ae7b694e177..c33821d80d9 100644 --- a/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java +++ b/src/main/java/gregtech/loaders/recipe/handlers/ToolRecipeHandler.java @@ -11,8 +11,8 @@ 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; From c22f8172b5fb8a0067aac57f28c0699921729ed4 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Sun, 9 Feb 2025 18:34:58 +0800 Subject: [PATCH 13/13] Use actual map methods --- .../api/unification/material/properties/ExtraToolProperty.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java index 78441d7a375..e9d406b8f70 100644 --- a/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java +++ b/src/main/java/gregtech/api/unification/material/properties/ExtraToolProperty.java @@ -82,7 +82,7 @@ public OverrideToolProperty getOverrideProperty(String toolId) { } public boolean hasOverrideProperty(String toolId) { - return getOverrideProperty(toolId) != null; + return this.overrideMap.containsKey(toolId); } public ToolProperty getOverriddenResult(String toolId, @Nullable MaterialToolProperty materialToolProperty) {