diff --git a/gradle.properties b/gradle.properties index de5e645..5ae1b52 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ org.gradle.jvmargs=-Xmx1G # Dependencies appeng_version=15.0.18 architectury_version=9.2.14 - gtceu_version=7.1.4 + gtceu_version=7.2.0 ldlib_version=1.0.40.b registrate_version=MC1.20-1.3.11 rhino_version=2001.2.3-build.6 diff --git a/run/config/gtmutils.yaml b/run/config/gtmutils.yaml new file mode 100644 index 0000000..aed9593 --- /dev/null +++ b/run/config/gtmutils.yaml @@ -0,0 +1,49 @@ +features: + # Whether the Sterile Cleaning Maintenance Hatch is enabled. + sterileHatchEnabled: true + + # Whether the 64A energy converters are enabled. + converters64aEnabled: true + + # Whether the Omni-breaker is enabled. + omnibreakerEnabled: true + + # What tier the Omni-breaker is, if enabled. (ULV = 0, LV = 1, MV = 2, ...) + # (Unless the default recipe is overridden, can only support LV to IV!) + omnibreakerTier: 5 + + # The energy capacity of the Omni-breaker. + omnibreakerEnergyCapacity: 40960000 + + # Whether the Wireless Active Transformer is enabled. + pterbEnabled: true + + # Base amount of WAT coolant to drain every second. + # (Setting both this amount and the IO multiplier to 0 disables the coolant mechanic.) + pterbCoolantBaseDrain: 10 + + # Multiplier over IO amount for additional coolant drain. + # (Setting both this and the base drain amount to 0 disables the coolant mechanic.) + pterbCoolantIOMultiplier: 3.0E-5 + + # Whether the coins/credits are enabled. + coinsEnabled: true + + # Whether the custom MV tools are enabled. + customMVToolsEnabled: false + + # Whether the custom HV tools are enabled. + customHVToolsEnabled: false + + # Whether the custom EV tools are enabled. + customEVToolsEnabled: false + + # Whether the custom IV tools are enabled. + customIVToolsEnabled: false + + # Whether the custom LuV tools are enabled. + customLuVToolsEnabled: true + + # Whether the custom ZPM tools are enabled. + customZPMToolsEnabled: true + diff --git a/src/generated/resources/assets/gtmutils/lang/en_ud.json b/src/generated/resources/assets/gtmutils/lang/en_ud.json index e94ef4c..34992fe 100644 --- a/src/generated/resources/assets/gtmutils/lang/en_ud.json +++ b/src/generated/resources/assets/gtmutils/lang/en_ud.json @@ -18,6 +18,12 @@ "block.gtmutils.zpm_64a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ ɹ§Ɐǝ§ㄣ9 ɹ§WԀZɔ§", "config.gtmutils.option.coinsEnabled": "pǝןqɐuƎsuıoɔ", "config.gtmutils.option.converters64aEnabled": "pǝןqɐuƎɐㄣ9sɹǝʇɹǝʌuoɔ", + "config.gtmutils.option.customEVToolsEnabled": "pǝןqɐuƎsןoo⟘ΛƎɯoʇsnɔ", + "config.gtmutils.option.customHVToolsEnabled": "pǝןqɐuƎsןoo⟘ΛHɯoʇsnɔ", + "config.gtmutils.option.customIVToolsEnabled": "pǝןqɐuƎsןoo⟘ΛIɯoʇsnɔ", + "config.gtmutils.option.customLuVToolsEnabled": "pǝןqɐuƎsןoo⟘ΛnꞀɯoʇsnɔ", + "config.gtmutils.option.customMVToolsEnabled": "pǝןqɐuƎsןoo⟘ΛWɯoʇsnɔ", + "config.gtmutils.option.customZPMToolsEnabled": "pǝןqɐuƎsןoo⟘WԀZɯoʇsnɔ", "config.gtmutils.option.features": "sǝɹnʇɐǝɟ", "config.gtmutils.option.omnibreakerEnabled": "pǝןqɐuƎɹǝʞɐǝɹqıuɯo", "config.gtmutils.option.omnibreakerEnergyCapacity": "ʎʇıɔɐdɐƆʎbɹǝuƎɹǝʞɐǝɹqıuɯo", @@ -35,18 +41,48 @@ "gtmutils.multiblock.pterb_machine.coolant_usage": "puoɔǝs ɹǝd %s ɟo Ꞁ%s suıɐɹᗡɔ§", "gtmutils.pterb.current_frequency": "%s :ʎɔuǝnbǝɹɟ ʇuǝɹɹnƆ", "gtmutils.pterb_machine.invalid_frequency": "¡0 ʎɔuǝnbǝɹɟ uo ʞɹoʍ ʇou ןןıʍ s⟘ⱯM", + "item.gtceu.tool.ev_buzzsaw": ")ΛƎ( ʍɐszznᗺ %s", + "item.gtceu.tool.ev_chainsaw": ")ΛƎ( ʍɐsuıɐɥƆ %s", + "item.gtceu.tool.ev_screwdriver": ")ΛƎ( ɹǝʌıɹpʍǝɹɔS ɔıɹʇɔǝןƎ %s", + "item.gtceu.tool.ev_wirecutter": ")ΛƎ( ɹǝʇʇnƆ ǝɹıM %s", + "item.gtceu.tool.ev_wrench": ")ΛƎ( ɥɔuǝɹM %s", + "item.gtceu.tool.hv_buzzsaw": ")ΛH( ʍɐszznᗺ %s", + "item.gtceu.tool.hv_chainsaw": ")ΛH( ʍɐsuıɐɥƆ %s", + "item.gtceu.tool.hv_screwdriver": ")ΛH( ɹǝʌıɹpʍǝɹɔS ɔıɹʇɔǝןƎ %s", + "item.gtceu.tool.iv_buzzsaw": ")ΛI( ʍɐszznᗺ %s", + "item.gtceu.tool.iv_chainsaw": ")ΛI( ʍɐsuıɐɥƆ %s", + "item.gtceu.tool.iv_screwdriver": ")ΛI( ɹǝʌıɹpʍǝɹɔS ɔıɹʇɔǝןƎ %s", + "item.gtceu.tool.luv_buzzsaw": ")ΛnꞀ( ʍɐszznᗺ %s", + "item.gtceu.tool.luv_chainsaw": ")ΛnꞀ( ʍɐsuıɐɥƆ %s", + "item.gtceu.tool.luv_drill": ")ΛnꞀ( ןןıɹᗡ %s", + "item.gtceu.tool.luv_screwdriver": ")ΛnꞀ( ɹǝʌıɹpʍǝɹɔS ɔıɹʇɔǝןƎ %s", + "item.gtceu.tool.luv_wirecutter": ")ΛnꞀ( ɹǝʇʇnƆ ǝɹıM %s", + "item.gtceu.tool.luv_wrench": ")ΛnꞀ( ɥɔuǝɹM %s", + "item.gtceu.tool.mv_buzzsaw": ")ΛW( ʍɐszznᗺ %s", + "item.gtceu.tool.mv_chainsaw": ")ΛW( ʍɐsuıɐɥƆ %s", + "item.gtceu.tool.mv_screwdriver": ")ΛW( ɹǝʌıɹpʍǝɹɔS ɔıɹʇɔǝןƎ %s", + "item.gtceu.tool.mv_wirecutter": ")ΛW( ɹǝʇʇnƆ ǝɹıM %s", + "item.gtceu.tool.mv_wrench": ")ΛW( ɥɔuǝɹM %s", + "item.gtceu.tool.zpm_buzzsaw": ")WԀZ( ʍɐszznᗺ %s", + "item.gtceu.tool.zpm_chainsaw": ")WԀZ( ʍɐsuıɐɥƆ %s", + "item.gtceu.tool.zpm_drill": ")WԀZ( ןןıɹᗡ %s", + "item.gtceu.tool.zpm_screwdriver": ")WԀZ( ɹǝʌıɹpʍǝɹɔS ɔıɹʇɔǝןƎ %s", + "item.gtceu.tool.zpm_wirecutter": ")WԀZ( ɹǝʇʇnƆ ǝɹıM %s", + "item.gtceu.tool.zpm_wrench": ")WԀZ( ɥɔuǝɹM %s", "item.gtmutils.ancient_gold_coin": "uıoƆ pןo⅁ ʇuǝıɔuⱯ", "item.gtmutils.chocolate_coin": "uıoƆ ǝʇɐןoɔoɥƆ", "item.gtmutils.copper_credit": "ʇıpǝɹƆ ɹǝddoƆ", "item.gtmutils.cupronickel_credit": "ʇıpǝɹƆ ןǝʞɔıuoɹdnƆ", "item.gtmutils.doge_coin": "uıoƆ ǝboᗡ", "item.gtmutils.gold_credit": "ʇıpǝɹƆ pןo⅁", + "item.gtmutils.luv_power_unit": "ʇıu∩ ɹǝʍoԀ ΛnꞀ", "item.gtmutils.naquadah_credit": "ʇıpǝɹƆ ɥɐpɐnbɐN", "item.gtmutils.neutronium_credit": "ʇıpǝɹƆ ɯnıuoɹʇnǝN", "item.gtmutils.omnibreaker": "ɹǝʞɐǝɹq-ıuɯO", "item.gtmutils.osmium_credit": "ʇıpǝɹƆ ɯnıɯsO", "item.gtmutils.platinum_credit": "ʇıpǝɹƆ ɯnuıʇɐןԀ", "item.gtmutils.silver_credit": "ʇıpǝɹƆ ɹǝʌןıS", + "item.gtmutils.zpm_power_unit": "ʇıu∩ ɹǝʍoԀ WԀZ", "itemGroup.gtmutils.creative_tab": "sǝıʇıןıʇ∩ uɹǝpoW ɥɔǝ⟘bǝɹ⅁", "material.gtmutils.quantum_coolant": "ʇuɐןooƆ ɯnʇuɐnὉ", "tooltip.omnibreaker.can_break_anything": "¡⅁NIH⟘ʎNⱯ ǝuıɯ-ɐʇsuı uɐɔ ɹǝʞɐǝɹq-ıuɯO ǝɥ⟘", diff --git a/src/generated/resources/assets/gtmutils/lang/en_us.json b/src/generated/resources/assets/gtmutils/lang/en_us.json index 4969c7c..c171ef3 100644 --- a/src/generated/resources/assets/gtmutils/lang/en_us.json +++ b/src/generated/resources/assets/gtmutils/lang/en_us.json @@ -18,6 +18,12 @@ "block.gtmutils.zpm_64a_energy_converter": "§cZPM§r 64§eA§r Energy Converter", "config.gtmutils.option.coinsEnabled": "coinsEnabled", "config.gtmutils.option.converters64aEnabled": "converters64aEnabled", + "config.gtmutils.option.customEVToolsEnabled": "customEVToolsEnabled", + "config.gtmutils.option.customHVToolsEnabled": "customHVToolsEnabled", + "config.gtmutils.option.customIVToolsEnabled": "customIVToolsEnabled", + "config.gtmutils.option.customLuVToolsEnabled": "customLuVToolsEnabled", + "config.gtmutils.option.customMVToolsEnabled": "customMVToolsEnabled", + "config.gtmutils.option.customZPMToolsEnabled": "customZPMToolsEnabled", "config.gtmutils.option.features": "features", "config.gtmutils.option.omnibreakerEnabled": "omnibreakerEnabled", "config.gtmutils.option.omnibreakerEnergyCapacity": "omnibreakerEnergyCapacity", @@ -35,18 +41,48 @@ "gtmutils.multiblock.pterb_machine.coolant_usage": "§cDrains %sL of %s per second", "gtmutils.pterb.current_frequency": "Current frequency: %s", "gtmutils.pterb_machine.invalid_frequency": "WATs will not work on frequency 0!", + "item.gtceu.tool.ev_buzzsaw": "%s Buzzsaw (EV)", + "item.gtceu.tool.ev_chainsaw": "%s Chainsaw (EV)", + "item.gtceu.tool.ev_screwdriver": "%s Electric Screwdriver (EV)", + "item.gtceu.tool.ev_wirecutter": "%s Wire Cutter (EV)", + "item.gtceu.tool.ev_wrench": "%s Wrench (EV)", + "item.gtceu.tool.hv_buzzsaw": "%s Buzzsaw (HV)", + "item.gtceu.tool.hv_chainsaw": "%s Chainsaw (HV)", + "item.gtceu.tool.hv_screwdriver": "%s Electric Screwdriver (HV)", + "item.gtceu.tool.iv_buzzsaw": "%s Buzzsaw (IV)", + "item.gtceu.tool.iv_chainsaw": "%s Chainsaw (IV)", + "item.gtceu.tool.iv_screwdriver": "%s Electric Screwdriver (IV)", + "item.gtceu.tool.luv_buzzsaw": "%s Buzzsaw (LuV)", + "item.gtceu.tool.luv_chainsaw": "%s Chainsaw (LuV)", + "item.gtceu.tool.luv_drill": "%s Drill (LuV)", + "item.gtceu.tool.luv_screwdriver": "%s Electric Screwdriver (LuV)", + "item.gtceu.tool.luv_wirecutter": "%s Wire Cutter (LuV)", + "item.gtceu.tool.luv_wrench": "%s Wrench (LuV)", + "item.gtceu.tool.mv_buzzsaw": "%s Buzzsaw (MV)", + "item.gtceu.tool.mv_chainsaw": "%s Chainsaw (MV)", + "item.gtceu.tool.mv_screwdriver": "%s Electric Screwdriver (MV)", + "item.gtceu.tool.mv_wirecutter": "%s Wire Cutter (MV)", + "item.gtceu.tool.mv_wrench": "%s Wrench (MV)", + "item.gtceu.tool.zpm_buzzsaw": "%s Buzzsaw (ZPM)", + "item.gtceu.tool.zpm_chainsaw": "%s Chainsaw (ZPM)", + "item.gtceu.tool.zpm_drill": "%s Drill (ZPM)", + "item.gtceu.tool.zpm_screwdriver": "%s Electric Screwdriver (ZPM)", + "item.gtceu.tool.zpm_wirecutter": "%s Wire Cutter (ZPM)", + "item.gtceu.tool.zpm_wrench": "%s Wrench (ZPM)", "item.gtmutils.ancient_gold_coin": "Ancient Gold Coin", "item.gtmutils.chocolate_coin": "Chocolate Coin", "item.gtmutils.copper_credit": "Copper Credit", "item.gtmutils.cupronickel_credit": "Cupronickel Credit", "item.gtmutils.doge_coin": "Doge Coin", "item.gtmutils.gold_credit": "Gold Credit", + "item.gtmutils.luv_power_unit": "LuV Power Unit", "item.gtmutils.naquadah_credit": "Naquadah Credit", "item.gtmutils.neutronium_credit": "Neutronium Credit", "item.gtmutils.omnibreaker": "Omni-breaker", "item.gtmutils.osmium_credit": "Osmium Credit", "item.gtmutils.platinum_credit": "Platinum Credit", "item.gtmutils.silver_credit": "Silver Credit", + "item.gtmutils.zpm_power_unit": "ZPM Power Unit", "itemGroup.gtmutils.creative_tab": "GregTech Modern Utilities", "material.gtmutils.quantum_coolant": "Quantum Coolant", "tooltip.omnibreaker.can_break_anything": "The Omni-breaker can insta-mine ANYTHING!", diff --git a/src/generated/resources/assets/gtmutils/models/item/luv_power_unit.json b/src/generated/resources/assets/gtmutils/models/item/luv_power_unit.json new file mode 100644 index 0000000..5d8400b --- /dev/null +++ b/src/generated/resources/assets/gtmutils/models/item/luv_power_unit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_luv" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtmutils/models/item/zpm_power_unit.json b/src/generated/resources/assets/gtmutils/models/item/zpm_power_unit.json new file mode 100644 index 0000000..57e3153 --- /dev/null +++ b/src/generated/resources/assets/gtmutils/models/item/zpm_power_unit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_zpm" + } +} \ No newline at end of file diff --git a/src/main/java/net/neganote/gtutilities/GTMUtilitiesGTAddon.java b/src/main/java/net/neganote/gtutilities/GTMUtilitiesGTAddon.java index 6053f57..d41f5cb 100644 --- a/src/main/java/net/neganote/gtutilities/GTMUtilitiesGTAddon.java +++ b/src/main/java/net/neganote/gtutilities/GTMUtilitiesGTAddon.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import net.minecraft.data.recipes.FinishedRecipe; +import net.neganote.gtutilities.common.tools.recipe.UtilToolRecipes; import net.neganote.gtutilities.recipe.UtilRecipes; import java.util.function.Consumer; @@ -34,6 +35,7 @@ public void registerTagPrefixes() { @Override public void addRecipes(Consumer provider) { UtilRecipes.init(provider); + UtilToolRecipes.init(provider); } // If you have custom ingredient types, uncomment this & change to match your capability. diff --git a/src/main/java/net/neganote/gtutilities/GregTechModernUtilities.java b/src/main/java/net/neganote/gtutilities/GregTechModernUtilities.java index aa07ed9..b7dba01 100644 --- a/src/main/java/net/neganote/gtutilities/GregTechModernUtilities.java +++ b/src/main/java/net/neganote/gtutilities/GregTechModernUtilities.java @@ -27,8 +27,10 @@ import net.neganote.gtutilities.client.renderer.UtilShaders; import net.neganote.gtutilities.common.data.UtilPlaceholders; import net.neganote.gtutilities.common.item.UtilItems; +import net.neganote.gtutilities.common.item.UtilToolItems; import net.neganote.gtutilities.common.machine.UtilMachines; import net.neganote.gtutilities.common.materials.UtilMaterials; +import net.neganote.gtutilities.common.tools.UtilToolConnection; import net.neganote.gtutilities.config.UtilConfig; import net.neganote.gtutilities.datagen.UtilDatagen; @@ -93,6 +95,7 @@ public static void init() { .register(); } UtilItems.init(); + UtilToolItems.init(); REGISTRATE.registerRegistrate(); UtilDatagen.init(); UtilPlaceholders.init(); @@ -142,7 +145,7 @@ private void addMaterials(MaterialEvent event) { // This is optional, though. private void modifyMaterials(PostMaterialEvent event) { - // CustomMaterials.modify(); + UtilToolConnection.modifyMaterials(); } private void registerRecipeTypes(GTCEuAPI.RegisterEvent event) { diff --git a/src/main/java/net/neganote/gtutilities/common/item/UtilToolItems.java b/src/main/java/net/neganote/gtutilities/common/item/UtilToolItems.java new file mode 100644 index 0000000..a2f7b96 --- /dev/null +++ b/src/main/java/net/neganote/gtutilities/common/item/UtilToolItems.java @@ -0,0 +1,43 @@ +package net.neganote.gtutilities.common.item; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.item.ComponentItem; +import com.gregtechceu.gtceu.api.item.component.ElectricStats; + +import net.neganote.gtutilities.config.UtilConfig; + +import com.tterrag.registrate.util.entry.ItemEntry; + +import static net.neganote.gtutilities.GregTechModernUtilities.REGISTRATE; + +/** + * Item registry file for the LuV and ZPM tool power units. + */ +public class UtilToolItems { + + public static ItemEntry POWER_UNIT_ZPM = null; + public static ItemEntry POWER_UNIT_LUV = null; + + static { + + if (UtilConfig.INSTANCE.features.customLuVToolsEnabled) { + POWER_UNIT_LUV = REGISTRATE.item("luv_power_unit", ComponentItem::create) + .lang("LuV Power Unit") + .properties(p -> p.stacksTo(8)) + .model((ctx, prov) -> prov.generated(ctx, prov.modLoc("item/tools/power_unit_luv"))) + .onRegister((c) -> c.attachComponents(ElectricStats.createElectricItem(102400000L, GTValues.LuV))) + .register(); + } + + if (UtilConfig.INSTANCE.features.customZPMToolsEnabled) { + POWER_UNIT_ZPM = REGISTRATE.item("zpm_power_unit", ComponentItem::create) + .lang("ZPM Power Unit") + .properties(p -> p.stacksTo(8)) + .model((ctx, prov) -> prov.generated(ctx, prov.modLoc("item/tools/power_unit_zpm"))) + .onRegister((c) -> c.attachComponents(ElectricStats.createElectricItem(409600000L, GTValues.ZPM))) + .register(); + } + } + + public static void init() {} +} diff --git a/src/main/java/net/neganote/gtutilities/common/tools/UtilToolConnection.java b/src/main/java/net/neganote/gtutilities/common/tools/UtilToolConnection.java new file mode 100644 index 0000000..ff6c554 --- /dev/null +++ b/src/main/java/net/neganote/gtutilities/common/tools/UtilToolConnection.java @@ -0,0 +1,133 @@ +package net.neganote.gtutilities.common.tools; + +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.ToolProperty; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; + +import net.neganote.gtutilities.config.UtilConfig; + +/** + * Custom tool type connection to base gtm tool tiers. + */ +public class UtilToolConnection { + + public static void modifyMaterials() { + for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + ToolProperty toolProperty = material.getProperty(PropertyKey.TOOL); + + if (toolProperty == null) { + continue; + } + + // Custom MV Tools + if (UtilConfig.INSTANCE.features.customMVToolsEnabled) { + if (toolProperty.hasType(GTToolType.SCREWDRIVER_LV)) { + toolProperty.addTypes(UtilToolType.SCREWDRIVER_MV); + } + if (toolProperty.hasType(GTToolType.BUZZSAW)) { + toolProperty.addTypes(UtilToolType.BUZZSAW_MV); + } + if (toolProperty.hasType(GTToolType.CHAINSAW_LV)) { + toolProperty.addTypes(UtilToolType.CHAINSAW_MV); + } + if (toolProperty.hasType(GTToolType.WIRE_CUTTER_LV)) { + toolProperty.addTypes(UtilToolType.WIRE_CUTTER_MV); + } + if (toolProperty.hasType(GTToolType.WRENCH_LV)) { + toolProperty.addTypes(UtilToolType.WRENCH_MV); + } + } + + // Custom HV Tools + if (UtilConfig.INSTANCE.features.customHVToolsEnabled) { + if (toolProperty.hasType(GTToolType.SCREWDRIVER_LV)) { + toolProperty.addTypes(UtilToolType.SCREWDRIVER_HV); + } + if (toolProperty.hasType(GTToolType.BUZZSAW)) { + toolProperty.addTypes(UtilToolType.BUZZSAW_HV); + } + if (toolProperty.hasType(GTToolType.CHAINSAW_LV)) { + toolProperty.addTypes(UtilToolType.CHAINSAW_HV); + } + } + + // Custom EV Tools + if (UtilConfig.INSTANCE.features.customEVToolsEnabled) { + if (toolProperty.hasType(GTToolType.SCREWDRIVER_LV)) { + toolProperty.addTypes(UtilToolType.SCREWDRIVER_EV); + } + if (toolProperty.hasType(GTToolType.BUZZSAW)) { + toolProperty.addTypes(UtilToolType.BUZZSAW_EV); + } + if (toolProperty.hasType(GTToolType.CHAINSAW_LV)) { + toolProperty.addTypes(UtilToolType.CHAINSAW_EV); + } + if (toolProperty.hasType(GTToolType.WIRE_CUTTER_LV)) { + toolProperty.addTypes(UtilToolType.WIRE_CUTTER_EV); + } + if (toolProperty.hasType(GTToolType.WRENCH_LV)) { + toolProperty.addTypes(UtilToolType.WRENCH_EV); + } + } + + // Custom IV Tools + if (UtilConfig.INSTANCE.features.customIVToolsEnabled) { + if (toolProperty.hasType(GTToolType.SCREWDRIVER_LV)) { + toolProperty.addTypes(UtilToolType.SCREWDRIVER_IV); + } + if (toolProperty.hasType(GTToolType.BUZZSAW)) { + toolProperty.addTypes(UtilToolType.BUZZSAW_IV); + } + if (toolProperty.hasType(GTToolType.CHAINSAW_LV)) { + toolProperty.addTypes(UtilToolType.CHAINSAW_IV); + } + } + + // Custom LuV Tools + if (UtilConfig.INSTANCE.features.customLuVToolsEnabled) { + if (toolProperty.hasType(GTToolType.SCREWDRIVER_LV)) { + toolProperty.addTypes(UtilToolType.SCREWDRIVER_LuV); + } + if (toolProperty.hasType(GTToolType.BUZZSAW)) { + toolProperty.addTypes(UtilToolType.BUZZSAW_LuV); + } + if (toolProperty.hasType(GTToolType.CHAINSAW_LV)) { + toolProperty.addTypes(UtilToolType.CHAINSAW_LuV); + } + if (toolProperty.hasType(GTToolType.WIRE_CUTTER_LV)) { + toolProperty.addTypes(UtilToolType.WIRE_CUTTER_LuV); + } + if (toolProperty.hasType(GTToolType.WRENCH_LV)) { + toolProperty.addTypes(UtilToolType.WRENCH_LuV); + } + if (toolProperty.hasType(GTToolType.DRILL_LV)) { + toolProperty.addTypes(UtilToolType.DRILL_LUV); + } + } + + // Custom ZPM Tools + if (UtilConfig.INSTANCE.features.customZPMToolsEnabled) { + if (toolProperty.hasType(GTToolType.SCREWDRIVER_LV)) { + toolProperty.addTypes(UtilToolType.SCREWDRIVER_ZPM); + } + if (toolProperty.hasType(GTToolType.BUZZSAW)) { + toolProperty.addTypes(UtilToolType.BUZZSAW_ZPM); + } + if (toolProperty.hasType(GTToolType.CHAINSAW_LV)) { + toolProperty.addTypes(UtilToolType.CHAINSAW_ZPM); + } + if (toolProperty.hasType(GTToolType.WIRE_CUTTER_LV)) { + toolProperty.addTypes(UtilToolType.WIRE_CUTTER_ZPM); + } + if (toolProperty.hasType(GTToolType.WRENCH_LV)) { + toolProperty.addTypes(UtilToolType.WRENCH_ZPM); + } + if (toolProperty.hasType(GTToolType.DRILL_LV)) { + toolProperty.addTypes(UtilToolType.DRILL_ZPM); + } + } + } + } +} diff --git a/src/main/java/net/neganote/gtutilities/common/tools/UtilToolHelper.java b/src/main/java/net/neganote/gtutilities/common/tools/UtilToolHelper.java new file mode 100644 index 0000000..521cee5 --- /dev/null +++ b/src/main/java/net/neganote/gtutilities/common/tools/UtilToolHelper.java @@ -0,0 +1,30 @@ +package net.neganote.gtutilities.common.tools; + +import net.minecraft.world.item.ItemStack; +import net.neganote.gtutilities.common.item.UtilToolItems; +import net.neganote.gtutilities.config.UtilConfig; + +import java.util.function.Supplier; + +/** + * Helper for the LuV and ZPM broken tool stacks. + */ +public class UtilToolHelper { + + public static final Supplier SUPPLY_POWER_UNIT_LUV; + public static final Supplier SUPPLY_POWER_UNIT_ZPM; + + static { + if (UtilConfig.INSTANCE.features.customLuVToolsEnabled) { + SUPPLY_POWER_UNIT_LUV = () -> UtilToolItems.POWER_UNIT_LUV.get().getDefaultInstance(); + } else { + SUPPLY_POWER_UNIT_LUV = () -> ItemStack.EMPTY; + } + + if (UtilConfig.INSTANCE.features.customZPMToolsEnabled) { + SUPPLY_POWER_UNIT_ZPM = () -> UtilToolItems.POWER_UNIT_ZPM.get().getDefaultInstance(); + } else { + SUPPLY_POWER_UNIT_ZPM = () -> ItemStack.EMPTY; + } + } +} diff --git a/src/main/java/net/neganote/gtutilities/common/tools/UtilToolType.java b/src/main/java/net/neganote/gtutilities/common/tools/UtilToolType.java new file mode 100644 index 0000000..777a46c --- /dev/null +++ b/src/main/java/net/neganote/gtutilities/common/tools/UtilToolType.java @@ -0,0 +1,467 @@ +package net.neganote.gtutilities.common.tools; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.item.tool.ToolHelper; +import com.gregtechceu.gtceu.common.data.GTSoundEntries; +import com.gregtechceu.gtceu.common.data.item.GTToolActions; +import com.gregtechceu.gtceu.common.item.tool.behavior.*; +import com.gregtechceu.gtceu.data.recipe.CustomTags; + +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.entity.animal.IronGolem; +import net.minecraft.world.entity.monster.Spider; +import net.minecraftforge.common.ToolActions; + +/** + * Custom ToolTypes + */ +public final class UtilToolType { + + /** + * Custom Screwdrivers + */ + + public static final GTToolType SCREWDRIVER_MV = GTToolType.builder("mv_screwdriver") + .idFormat("mv_%s_screwdriver") + .toolTag(CustomTags.CRAFTING_SCREWDRIVERS) + .toolTag(CustomTags.SCREWDRIVERS) + .toolStats(b -> b.crafting().sneakBypassUse() + .attackDamage(-1.0F).attackSpeed(3.0F).durabilityMultiplier(2.0F) + .behaviors(new EntityDamageBehavior(3.0F, Spider.class)) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_MV)) + .sound(GTSoundEntries.SCREWDRIVER_TOOL) + .electric(GTValues.MV) + .toolClasses(GTToolType.SCREWDRIVER) + .defaultActions(GTToolActions.DEFAULT_SCREWDRIVER_ACTIONS) + .build(); + public static final GTToolType SCREWDRIVER_HV = GTToolType.builder("hv_screwdriver") + .idFormat("hv_%s_screwdriver") + .toolTag(CustomTags.CRAFTING_SCREWDRIVERS) + .toolTag(CustomTags.SCREWDRIVERS) + .toolStats(b -> b.crafting().sneakBypassUse() + .attackDamage(-1.0F).attackSpeed(3.0F).durabilityMultiplier(3.0F) + .behaviors(new EntityDamageBehavior(3.0F, Spider.class)) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_HV)) + .sound(GTSoundEntries.SCREWDRIVER_TOOL) + .electric(GTValues.HV) + .toolClasses(GTToolType.SCREWDRIVER) + .defaultActions(GTToolActions.DEFAULT_SCREWDRIVER_ACTIONS) + .build(); + public static final GTToolType SCREWDRIVER_EV = GTToolType.builder("ev_screwdriver") + .idFormat("ev_%s_screwdriver") + .toolTag(CustomTags.CRAFTING_SCREWDRIVERS) + .toolTag(CustomTags.SCREWDRIVERS) + .toolStats(b -> b.crafting().sneakBypassUse() + .attackDamage(-1.0F).attackSpeed(3.0F).durabilityMultiplier(4.0F) + .behaviors(new EntityDamageBehavior(3.0F, Spider.class)) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_EV)) + .sound(GTSoundEntries.SCREWDRIVER_TOOL) + .electric(GTValues.EV) + .toolClasses(GTToolType.SCREWDRIVER) + .defaultActions(GTToolActions.DEFAULT_SCREWDRIVER_ACTIONS) + .build(); + public static final GTToolType SCREWDRIVER_IV = GTToolType.builder("iv_screwdriver") + .idFormat("iv_%s_screwdriver") + .toolTag(CustomTags.CRAFTING_SCREWDRIVERS) + .toolTag(CustomTags.SCREWDRIVERS) + .toolStats(b -> b.crafting().sneakBypassUse() + .attackDamage(-1.0F).attackSpeed(3.0F).durabilityMultiplier(5.0F) + .behaviors(new EntityDamageBehavior(3.0F, Spider.class)) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_IV)) + .sound(GTSoundEntries.SCREWDRIVER_TOOL) + .electric(GTValues.IV) + .toolClasses(GTToolType.SCREWDRIVER) + .defaultActions(GTToolActions.DEFAULT_SCREWDRIVER_ACTIONS) + .build(); + public static final GTToolType SCREWDRIVER_LuV = GTToolType.builder("luv_screwdriver") + .idFormat("luv_%s_screwdriver") + .toolTag(CustomTags.CRAFTING_SCREWDRIVERS) + .toolTag(CustomTags.SCREWDRIVERS) + .toolStats(b -> b.crafting().sneakBypassUse() + .attackDamage(-1.0F).attackSpeed(3.0F).durabilityMultiplier(6.0F) + .behaviors(new EntityDamageBehavior(3.0F, Spider.class)) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_LUV)) + .sound(GTSoundEntries.SCREWDRIVER_TOOL) + .electric(GTValues.LuV) + .toolClasses(GTToolType.SCREWDRIVER) + .defaultActions(GTToolActions.DEFAULT_SCREWDRIVER_ACTIONS) + .build(); + public static final GTToolType SCREWDRIVER_ZPM = GTToolType.builder("zpm_screwdriver") + .idFormat("zpm_%s_screwdriver") + .toolTag(CustomTags.CRAFTING_SCREWDRIVERS) + .toolTag(CustomTags.SCREWDRIVERS) + .toolStats(b -> b.crafting().sneakBypassUse() + .attackDamage(-1.0F).attackSpeed(3.0F).durabilityMultiplier(7.0F) + .behaviors(new EntityDamageBehavior(3.0F, Spider.class)) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_ZPM)) + .sound(GTSoundEntries.SCREWDRIVER_TOOL) + .electric(GTValues.ZPM) + .toolClasses(GTToolType.SCREWDRIVER) + .defaultActions(GTToolActions.DEFAULT_SCREWDRIVER_ACTIONS) + .build(); + + /** + * Custom Chainsaws + */ + + public static final GTToolType CHAINSAW_MV = GTToolType.builder("mv_chainsaw") + .idFormat("mv_%s_chainsaw") + .toolTag(ItemTags.AXES) + .toolTag(CustomTags.CHAINSAWS) + .harvestTag(BlockTags.MINEABLE_WITH_AXE) + .harvestTag(BlockTags.SWORD_EFFICIENT) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking() + .efficiencyMultiplier(3.0F) + .attackDamage(5.0F).attackSpeed(-3.2F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_MV) + .behaviors(HarvestIceBehavior.INSTANCE, DisableShieldBehavior.INSTANCE, + TreeFellingBehavior.INSTANCE)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.MV) + .toolClasses(GTToolType.AXE) + .defaultActions(ToolActions.AXE_DIG, ToolActions.SWORD_DIG, ToolActions.HOE_DIG, + GTToolActions.SAW_DIG) + .build(); + public static final GTToolType CHAINSAW_HV = GTToolType.builder("hv_chainsaw") + .idFormat("hv_%s_chainsaw") + .toolTag(ItemTags.AXES) + .toolTag(CustomTags.CHAINSAWS) + .harvestTag(BlockTags.MINEABLE_WITH_AXE) + .harvestTag(BlockTags.SWORD_EFFICIENT) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking() + .efficiencyMultiplier(4.0F) + .attackDamage(5.0F).attackSpeed(-3.2F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_HV) + .behaviors(HarvestIceBehavior.INSTANCE, DisableShieldBehavior.INSTANCE, + TreeFellingBehavior.INSTANCE)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.HV) + .toolClasses(GTToolType.AXE) + .defaultActions(ToolActions.AXE_DIG, ToolActions.SWORD_DIG, ToolActions.HOE_DIG, + GTToolActions.SAW_DIG) + .build(); + public static final GTToolType CHAINSAW_EV = GTToolType.builder("ev_chainsaw") + .idFormat("ev_%s_chainsaw") + .toolTag(ItemTags.AXES) + .toolTag(CustomTags.CHAINSAWS) + .harvestTag(BlockTags.MINEABLE_WITH_AXE) + .harvestTag(BlockTags.SWORD_EFFICIENT) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking() + .efficiencyMultiplier(5.0F) + .attackDamage(5.0F).attackSpeed(-3.2F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_EV) + .behaviors(HarvestIceBehavior.INSTANCE, DisableShieldBehavior.INSTANCE, + TreeFellingBehavior.INSTANCE)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.EV) + .toolClasses(GTToolType.AXE) + .defaultActions(ToolActions.AXE_DIG, ToolActions.SWORD_DIG, ToolActions.HOE_DIG, + GTToolActions.SAW_DIG) + .build(); + public static final GTToolType CHAINSAW_IV = GTToolType.builder("iv_chainsaw") + .idFormat("iv_%s_chainsaw") + .toolTag(ItemTags.AXES) + .toolTag(CustomTags.CHAINSAWS) + .harvestTag(BlockTags.MINEABLE_WITH_AXE) + .harvestTag(BlockTags.SWORD_EFFICIENT) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking() + .efficiencyMultiplier(6.0F) + .attackDamage(5.0F).attackSpeed(-3.2F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_IV) + .behaviors(HarvestIceBehavior.INSTANCE, DisableShieldBehavior.INSTANCE, + TreeFellingBehavior.INSTANCE)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.IV) + .toolClasses(GTToolType.AXE) + .defaultActions(ToolActions.AXE_DIG, ToolActions.SWORD_DIG, ToolActions.HOE_DIG, + GTToolActions.SAW_DIG) + .build(); + public static final GTToolType CHAINSAW_LuV = GTToolType.builder("luv_chainsaw") + .idFormat("luv_%s_chainsaw") + .toolTag(ItemTags.AXES) + .toolTag(CustomTags.CHAINSAWS) + .harvestTag(BlockTags.MINEABLE_WITH_AXE) + .harvestTag(BlockTags.SWORD_EFFICIENT) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking() + .efficiencyMultiplier(7.0F) + .attackDamage(5.0F).attackSpeed(-3.2F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_LUV) + .behaviors(HarvestIceBehavior.INSTANCE, DisableShieldBehavior.INSTANCE, + TreeFellingBehavior.INSTANCE)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.LuV) + .toolClasses(GTToolType.AXE) + .defaultActions(ToolActions.AXE_DIG, ToolActions.SWORD_DIG, ToolActions.HOE_DIG, + GTToolActions.SAW_DIG) + .build(); + public static final GTToolType CHAINSAW_ZPM = GTToolType.builder("zpm_chainsaw") + .idFormat("zpm_%s_chainsaw") + .toolTag(ItemTags.AXES) + .toolTag(CustomTags.CHAINSAWS) + .harvestTag(BlockTags.MINEABLE_WITH_AXE) + .harvestTag(BlockTags.SWORD_EFFICIENT) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking() + .efficiencyMultiplier(8.0F) + .attackDamage(5.0F).attackSpeed(-3.2F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_ZPM) + .behaviors(HarvestIceBehavior.INSTANCE, DisableShieldBehavior.INSTANCE, + TreeFellingBehavior.INSTANCE)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.ZPM) + .toolClasses(GTToolType.AXE) + .defaultActions(ToolActions.AXE_DIG, ToolActions.SWORD_DIG, ToolActions.HOE_DIG, + GTToolActions.SAW_DIG) + .build(); + + /** + * Custom Drills + */ + + public static final GTToolType DRILL_LUV = GTToolType.builder("luv_drill") + .idFormat("luv_%s_drill") + .toolTag(CustomTags.DRILLS) + .toolTag(ItemTags.PICKAXES) + .toolTag(ItemTags.SHOVELS) + .toolTag(ItemTags.HOES) + .toolTag(ItemTags.CLUSTER_MAX_HARVESTABLES) + .harvestTag(BlockTags.MINEABLE_WITH_PICKAXE) + .harvestTag(BlockTags.MINEABLE_WITH_SHOVEL) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking().aoe(5, 5, 10) // <--- THIS IS THE KEY CHANGE + .attackDamage(1.0F).attackSpeed(-3.2F).durabilityMultiplier(8.0F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_LUV) + .behaviors(AOEConfigUIBehavior.INSTANCE, TorchPlaceBehavior.INSTANCE)) + .sound(GTSoundEntries.DRILL_TOOL, true) + .electric(GTValues.LuV) + .toolClassNames("drill") + .defaultActions(GTToolActions.DEFAULT_DRILL_ACTIONS) + .build(); + public static final GTToolType DRILL_ZPM = GTToolType.builder("zpm_drill") + .idFormat("zpm_%s_drill") + .toolTag(CustomTags.DRILLS) + .toolTag(ItemTags.PICKAXES) + .toolTag(ItemTags.SHOVELS) + .toolTag(ItemTags.HOES) + .toolTag(ItemTags.CLUSTER_MAX_HARVESTABLES) + .harvestTag(BlockTags.MINEABLE_WITH_PICKAXE) + .harvestTag(BlockTags.MINEABLE_WITH_SHOVEL) + .harvestTag(BlockTags.MINEABLE_WITH_HOE) + .toolStats(b -> b.blockBreaking().aoe(6, 6, 12) + .attackDamage(1.0F).attackSpeed(-3.2F).durabilityMultiplier(9.0F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_ZPM) + .behaviors(AOEConfigUIBehavior.INSTANCE, TorchPlaceBehavior.INSTANCE)) + .sound(GTSoundEntries.DRILL_TOOL, true) + .electric(GTValues.ZPM) + .toolClassNames("drill") + .defaultActions(GTToolActions.DEFAULT_DRILL_ACTIONS) + .build(); + + /** + * Custom Wrenches + */ + + public static final GTToolType WRENCH_MV = GTToolType.builder("mv_wrench") + .idFormat("mv_%s_wrench") + .toolTag(CustomTags.CRAFTING_WRENCHES) + .toolTag(CustomTags.WRENCHES) + .toolTag(CustomTags.WRENCH) + .harvestTag(CustomTags.MINEABLE_WITH_WRENCH) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .efficiencyMultiplier(3.0F) + .attackDamage(1.0F).attackSpeed(-2.8F) + .behaviors(BlockRotatingBehavior.INSTANCE, new EntityDamageBehavior(3.0F, IronGolem.class), + ToolModeSwitchBehavior.INSTANCE) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_MV)) + .sound(GTSoundEntries.WRENCH_TOOL, true) + .electric(GTValues.MV) + .toolClasses(GTToolType.WRENCH) + .defaultActions(GTToolActions.WRENCH_DIG, GTToolActions.WRENCH_DISMANTLE, GTToolActions.WRENCH_CONNECT) + .build(); + public static final GTToolType WRENCH_EV = GTToolType.builder("ev_wrench") + .idFormat("ev_%s_wrench") + .toolTag(CustomTags.CRAFTING_WRENCHES) + .toolTag(CustomTags.WRENCHES) + .toolTag(CustomTags.WRENCH) + .harvestTag(CustomTags.MINEABLE_WITH_WRENCH) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .efficiencyMultiplier(5.0F) + .attackDamage(1.0F).attackSpeed(-2.8F) + .behaviors(BlockRotatingBehavior.INSTANCE, new EntityDamageBehavior(3.0F, IronGolem.class), + ToolModeSwitchBehavior.INSTANCE) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_EV)) + .sound(GTSoundEntries.WRENCH_TOOL, true) + .electric(GTValues.EV) + .toolClasses(GTToolType.WRENCH) + .defaultActions(GTToolActions.WRENCH_DIG, GTToolActions.WRENCH_DISMANTLE, GTToolActions.WRENCH_CONNECT) + .build(); + public static final GTToolType WRENCH_LuV = GTToolType.builder("luv_wrench") + .idFormat("luv_%s_wrench") + .toolTag(CustomTags.CRAFTING_WRENCHES) + .toolTag(CustomTags.WRENCHES) + .toolTag(CustomTags.WRENCH) + .harvestTag(CustomTags.MINEABLE_WITH_WRENCH) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .efficiencyMultiplier(7.0F) + .attackDamage(1.0F).attackSpeed(-2.8F) + .behaviors(BlockRotatingBehavior.INSTANCE, new EntityDamageBehavior(3.0F, IronGolem.class), + ToolModeSwitchBehavior.INSTANCE) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_LUV)) + .sound(GTSoundEntries.WRENCH_TOOL, true) + .electric(GTValues.LuV) + .toolClasses(GTToolType.WRENCH) + .defaultActions(GTToolActions.WRENCH_DIG, GTToolActions.WRENCH_DISMANTLE, GTToolActions.WRENCH_CONNECT) + .build(); + public static final GTToolType WRENCH_ZPM = GTToolType.builder("zpm_wrench") + .idFormat("zpm_%s_wrench") + .toolTag(CustomTags.CRAFTING_WRENCHES) + .toolTag(CustomTags.WRENCHES) + .toolTag(CustomTags.WRENCH) + .harvestTag(CustomTags.MINEABLE_WITH_WRENCH) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .efficiencyMultiplier(8.0F) + .attackDamage(1.0F).attackSpeed(-2.8F) + .behaviors(BlockRotatingBehavior.INSTANCE, new EntityDamageBehavior(3.0F, IronGolem.class), + ToolModeSwitchBehavior.INSTANCE) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_LV)) + .sound(GTSoundEntries.WRENCH_TOOL, true) + .electric(GTValues.ZPM) + .toolClasses(GTToolType.WRENCH) + .defaultActions(GTToolActions.WRENCH_DIG, GTToolActions.WRENCH_DISMANTLE, GTToolActions.WRENCH_CONNECT) + .build(); + + /** + * Custom Wire cutters + */ + + public static final GTToolType WIRE_CUTTER_MV = GTToolType.builder("mv_wirecutter") + .idFormat("mv_%s_wire_cutter") + .toolTag(CustomTags.CRAFTING_WIRE_CUTTERS) + .toolTag(CustomTags.WIRE_CUTTERS) + .harvestTag(CustomTags.MINEABLE_WITH_WIRE_CUTTER) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .damagePerCraftingAction(4).attackDamage(-1.0F).attackSpeed(-2.4F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_MV)) + .sound(GTSoundEntries.WIRECUTTER_TOOL, true) + .electric(GTValues.MV) + .toolClasses(GTToolType.WIRE_CUTTER) + .defaultActions(GTToolActions.DEFAULT_WIRE_CUTTER_ACTIONS) + .build(); + public static final GTToolType WIRE_CUTTER_EV = GTToolType.builder("ev_wirecutter") + .idFormat("ev_%s_wire_cutter") + .toolTag(CustomTags.CRAFTING_WIRE_CUTTERS) + .toolTag(CustomTags.WIRE_CUTTERS) + .harvestTag(CustomTags.MINEABLE_WITH_WIRE_CUTTER) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .damagePerCraftingAction(4).attackDamage(-1.0F).attackSpeed(-2.4F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_EV)) + .sound(GTSoundEntries.WIRECUTTER_TOOL, true) + .electric(GTValues.EV) + .toolClasses(GTToolType.WIRE_CUTTER) + .defaultActions(GTToolActions.DEFAULT_WIRE_CUTTER_ACTIONS) + .build(); + public static final GTToolType WIRE_CUTTER_LuV = GTToolType.builder("luv_wirecutter") + .idFormat("luv_%s_wire_cutter") + .toolTag(CustomTags.CRAFTING_WIRE_CUTTERS) + .toolTag(CustomTags.WIRE_CUTTERS) + .harvestTag(CustomTags.MINEABLE_WITH_WIRE_CUTTER) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .damagePerCraftingAction(4).attackDamage(-1.0F).attackSpeed(-2.4F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_LUV)) + .sound(GTSoundEntries.WIRECUTTER_TOOL, true) + .electric(GTValues.LuV) + .toolClasses(GTToolType.WIRE_CUTTER) + .defaultActions(GTToolActions.DEFAULT_WIRE_CUTTER_ACTIONS) + .build(); + public static final GTToolType WIRE_CUTTER_ZPM = GTToolType.builder("zpm_wirecutter") + .idFormat("zpm_%s_wire_cutter") + .toolTag(CustomTags.CRAFTING_WIRE_CUTTERS) + .toolTag(CustomTags.WIRE_CUTTERS) + .harvestTag(CustomTags.MINEABLE_WITH_WIRE_CUTTER) + .toolStats(b -> b.blockBreaking().crafting().sneakBypassUse() + .damagePerCraftingAction(4).attackDamage(-1.0F).attackSpeed(-2.4F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_ZPM)) + .sound(GTSoundEntries.WIRECUTTER_TOOL, true) + .electric(GTValues.ZPM) + .toolClasses(GTToolType.WIRE_CUTTER) + .defaultActions(GTToolActions.DEFAULT_WIRE_CUTTER_ACTIONS) + .build(); + + /** + * Custom Buzzsaws + */ + + public static final GTToolType BUZZSAW_MV = GTToolType.builder("mv_buzzsaw") + .toolTag(CustomTags.CRAFTING_SAWS) + .idFormat("mv_%s_buzzsaw") + .toolTag(CustomTags.SAWS) + .toolTag(CustomTags.BUZZSAWS) + .toolStats(b -> b.crafting().attackDamage(1.5F).attackSpeed(-3.2F).durabilityMultiplier(2.0F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_MV)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.MV) + .toolClasses(GTToolType.SAW) + .build(); + public static final GTToolType BUZZSAW_HV = GTToolType.builder("hv_buzzsaw") + .toolTag(CustomTags.CRAFTING_SAWS) + .idFormat("hv_%s_buzzsaw") + .toolTag(CustomTags.SAWS) + .toolTag(CustomTags.BUZZSAWS) + .toolStats(b -> b.crafting().attackDamage(1.5F).attackSpeed(-3.2F).durabilityMultiplier(3.0F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_HV)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.HV) + .toolClasses(GTToolType.SAW) + .build(); + public static final GTToolType BUZZSAW_EV = GTToolType.builder("ev_buzzsaw") + .toolTag(CustomTags.CRAFTING_SAWS) + .idFormat("ev_%s_buzzsaw") + .toolTag(CustomTags.SAWS) + .toolTag(CustomTags.BUZZSAWS) + .toolStats(b -> b.crafting().attackDamage(1.5F).attackSpeed(-3.2F).durabilityMultiplier(4.0F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_EV)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.EV) + .toolClasses(GTToolType.SAW) + .build(); + public static final GTToolType BUZZSAW_IV = GTToolType.builder("iv_buzzsaw") + .toolTag(CustomTags.CRAFTING_SAWS) + .idFormat("iv_%s_buzzsaw") + .toolTag(CustomTags.SAWS) + .toolTag(CustomTags.BUZZSAWS) + .toolStats(b -> b.crafting().attackDamage(1.5F).attackSpeed(-3.2F).durabilityMultiplier(5.0F) + .brokenStack(ToolHelper.SUPPLY_POWER_UNIT_IV)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.IV) + .toolClasses(GTToolType.SAW) + .build(); + public static final GTToolType BUZZSAW_LuV = GTToolType.builder("luv_buzzsaw") + .toolTag(CustomTags.CRAFTING_SAWS) + .idFormat("luv_%s_buzzsaw") + .toolTag(CustomTags.SAWS) + .toolTag(CustomTags.BUZZSAWS) + .toolStats(b -> b.crafting().attackDamage(1.5F).attackSpeed(-3.2F).durabilityMultiplier(6.0F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_LUV)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.LuV) + .toolClasses(GTToolType.SAW) + .build(); + public static final GTToolType BUZZSAW_ZPM = GTToolType.builder("zpm_buzzsaw") + .toolTag(CustomTags.CRAFTING_SAWS) + .idFormat("zpm_%s_buzzsaw") + .toolTag(CustomTags.SAWS) + .toolTag(CustomTags.BUZZSAWS) + .toolStats(b -> b.crafting().attackDamage(1.5F).attackSpeed(-3.2F).durabilityMultiplier(7.0F) + .brokenStack(UtilToolHelper.SUPPLY_POWER_UNIT_ZPM)) + .sound(GTSoundEntries.CHAINSAW_TOOL, true) + .electric(GTValues.ZPM) + .toolClasses(GTToolType.SAW) + .build(); +} diff --git a/src/main/java/net/neganote/gtutilities/common/tools/recipe/UtilToolRecipeHelper.java b/src/main/java/net/neganote/gtutilities/common/tools/recipe/UtilToolRecipeHelper.java new file mode 100644 index 0000000..3cbc4fa --- /dev/null +++ b/src/main/java/net/neganote/gtutilities/common/tools/recipe/UtilToolRecipeHelper.java @@ -0,0 +1,194 @@ +package net.neganote.gtutilities.common.tools.recipe; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; +import com.gregtechceu.gtceu.api.capability.IElectricItem; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.ToolProperty; +import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; +import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.common.data.GTMaterialItems; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.neganote.gtutilities.common.item.UtilToolItems; +import net.neganote.gtutilities.common.tools.UtilToolType; + +import com.tterrag.registrate.util.entry.ItemEntry; +import it.unimi.dsi.fastutil.ints.Int2ReferenceArrayMap; +import it.unimi.dsi.fastutil.ints.Int2ReferenceMap; + +import java.util.function.Consumer; + +import javax.annotation.ParametersAreNonnullByDefault; + +import static com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlags.*; +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; + +/** + * Recipes for custom tools. + */ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class UtilToolRecipeHelper { + + public static final Int2ReferenceMap> powerUnitItems = new Int2ReferenceArrayMap<>( + GTValues.tiersBetween(GTValues.LV, GTValues.ZPM), + new ItemEntry[] { GTItems.POWER_UNIT_LV, GTItems.POWER_UNIT_MV, GTItems.POWER_UNIT_HV, + GTItems.POWER_UNIT_EV, GTItems.POWER_UNIT_IV, UtilToolItems.POWER_UNIT_LUV, + UtilToolItems.POWER_UNIT_ZPM }); + + private UtilToolRecipeHelper() {} + + public static void run(Consumer provider, Material material) { + ToolProperty property = material.getProperty(PropertyKey.TOOL); + if (property == null) { + return; + } + + processElectricTool(provider, property, material); + } + + private static void processElectricTool(Consumer provider, ToolProperty property, + Material material) { + if (!material.shouldGenerateRecipesFor(plate)) { + return; + } + + final int voltageMultiplier = material.getBlastTemperature() > 2800 ? GTValues.VA[GTValues.LV] : + GTValues.VA[GTValues.ULV]; + TagPrefix toolPrefix; + + if (material.hasFlag(GENERATE_PLATE)) { + final MaterialEntry plate = new MaterialEntry(TagPrefix.plate, material); + final MaterialEntry steelPlate = new MaterialEntry(TagPrefix.plate, GTMaterials.Steel); + final MaterialEntry steelRing = new MaterialEntry(TagPrefix.ring, GTMaterials.Steel); + + // chainsaw + if (property.hasType(GTToolType.CHAINSAW_LV)) { + toolPrefix = TagPrefix.toolHeadChainsaw; + VanillaRecipeHelper.addShapedRecipe(provider, String.format("chainsaw_head_%s", material.getName()), + ChemicalHelper.get(toolPrefix, material), + "SRS", "XhX", "SRS", + 'X', plate, + 'S', steelPlate, + 'R', steelRing); + + addElectricToolRecipe(provider, toolPrefix, + new GTToolType[] { UtilToolType.CHAINSAW_MV, UtilToolType.CHAINSAW_HV, + UtilToolType.CHAINSAW_EV, UtilToolType.CHAINSAW_IV, UtilToolType.CHAINSAW_LuV, + UtilToolType.CHAINSAW_ZPM, }, + material); + } + + // drill + if (property.hasType(GTToolType.DRILL_LV)) { + toolPrefix = TagPrefix.toolHeadDrill; + VanillaRecipeHelper.addShapedRecipe(provider, String.format("drill_head_%s", material.getName()), + ChemicalHelper.get(toolPrefix, material), + "XSX", "XSX", "ShS", + 'X', plate, + 'S', steelPlate); + + addElectricToolRecipe(provider, toolPrefix, + new GTToolType[] { UtilToolType.DRILL_LUV, UtilToolType.DRILL_ZPM }, material); + } + + // electric wire cutters + if (property.hasType(GTToolType.WIRE_CUTTER_LV)) { + toolPrefix = toolHeadWireCutter; + addElectricToolRecipe(provider, toolPrefix, + new GTToolType[] { UtilToolType.WIRE_CUTTER_MV, UtilToolType.WIRE_CUTTER_EV, + UtilToolType.WIRE_CUTTER_LuV, UtilToolType.WIRE_CUTTER_ZPM }, + material); + + VanillaRecipeHelper.addShapedRecipe(provider, String.format("wirecutter_head_%s", material.getName()), + ChemicalHelper.get(toolPrefix, material), + "XfX", "X X", "SRS", + 'X', plate, + 'R', steelRing, + 'S', new MaterialEntry(screw, GTMaterials.Steel)); + } + + // buzzsaw + if (property.hasType(GTToolType.BUZZSAW)) { + toolPrefix = TagPrefix.toolHeadBuzzSaw; + addElectricToolRecipe(provider, toolPrefix, + new GTToolType[] { UtilToolType.BUZZSAW_MV, UtilToolType.BUZZSAW_HV, + UtilToolType.BUZZSAW_EV, UtilToolType.BUZZSAW_IV, UtilToolType.BUZZSAW_LuV, + UtilToolType.BUZZSAW_ZPM, }, + material); + + VanillaRecipeHelper.addShapedRecipe(provider, String.format("buzzsaw_blade_%s", material.getName()), + ChemicalHelper.get(toolPrefix, material), + "sXh", "X X", "fXx", + 'X', plate); + } + // wrench + if (property.hasType(GTToolType.WRENCH_LV)) { + toolPrefix = TagPrefix.toolHeadWrench; + addElectricToolRecipe(provider, toolPrefix, + new GTToolType[] { UtilToolType.WRENCH_MV, UtilToolType.WRENCH_EV, + UtilToolType.WRENCH_LuV, UtilToolType.WRENCH_ZPM }, + material); + + VanillaRecipeHelper.addShapedRecipe(provider, String.format("wrench_head_%s", material.getName()), + ChemicalHelper.get(toolPrefix, material), + "hXW", "XRX", "WXd", + 'X', plate, + 'R', steelRing, + 'W', new MaterialEntry(TagPrefix.screw, GTMaterials.Steel)); + } + + } + + // screwdriver + if (property.hasType(GTToolType.SCREWDRIVER_LV)) { + + if (material.hasFlag(GENERATE_LONG_ROD)) { + toolPrefix = TagPrefix.toolHeadScrewdriver; + addElectricToolRecipe(provider, toolPrefix, + new GTToolType[] { UtilToolType.SCREWDRIVER_MV, UtilToolType.SCREWDRIVER_HV, + UtilToolType.SCREWDRIVER_EV, UtilToolType.SCREWDRIVER_IV, + UtilToolType.SCREWDRIVER_LuV, UtilToolType.SCREWDRIVER_ZPM, }, + material); + + VanillaRecipeHelper.addShapedRecipe(provider, String.format("screwdriver_tip_%s", material.getName()), + ChemicalHelper.get(toolPrefix, material), + "fR", " h", + 'R', new MaterialEntry(TagPrefix.rodLong, material)); + } + + } + } + + private static void addElectricToolRecipe(Consumer provider, TagPrefix toolHead, + GTToolType[] toolItems, + Material material) { + for (GTToolType toolType : toolItems) { + if (!material.getProperty(PropertyKey.TOOL).hasType(toolType)) continue; + + int tier = toolType.electricTier; + ItemStack powerUnitStack = powerUnitItems.get(tier).asStack(); + IElectricItem powerUnit = GTCapabilityHelper.getElectricItem(powerUnitStack); + ItemStack tool = GTMaterialItems.TOOL_ITEMS.get(material, toolType).get().get(0, powerUnit.getMaxCharge()); + VanillaRecipeHelper.addShapedEnergyTransferRecipe(provider, + true, true, true, + String.format("%s_%s", material.getName(), toolType.name), + Ingredient.of(powerUnitStack), + tool, + "wHd", " U ", + 'H', new MaterialEntry(toolHead, material), + 'U', powerUnitStack); + } + } +} diff --git a/src/main/java/net/neganote/gtutilities/common/tools/recipe/UtilToolRecipes.java b/src/main/java/net/neganote/gtutilities/common/tools/recipe/UtilToolRecipes.java new file mode 100644 index 0000000..01cb4b1 --- /dev/null +++ b/src/main/java/net/neganote/gtutilities/common/tools/recipe/UtilToolRecipes.java @@ -0,0 +1,112 @@ +package net.neganote.gtutilities.common.tools.recipe; + +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; +import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; +import com.gregtechceu.gtceu.utils.ToolItemHelper; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.neganote.gtutilities.common.item.UtilToolItems; +import net.neganote.gtutilities.config.UtilConfig; + +import com.tterrag.registrate.util.entry.ItemEntry; +import it.unimi.dsi.fastutil.ints.Int2ReferenceArrayMap; +import it.unimi.dsi.fastutil.ints.Int2ReferenceMap; + +import java.util.List; +import java.util.function.Consumer; + +import javax.annotation.ParametersAreNonnullByDefault; + +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; +import static net.neganote.gtutilities.common.tools.recipe.UtilToolRecipeHelper.powerUnitItems; + +/** + * Handles Custom tool & power unit recipes. + */ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public final class UtilToolRecipes { + + private UtilToolRecipes() {} + + // --- Tier Maps --- + private static final Int2ReferenceMap> motorItems = new Int2ReferenceArrayMap<>(); + private static final Int2ReferenceMap baseMaterials = new Int2ReferenceArrayMap<>(); + private static final Int2ReferenceMap>> batteryItems = new Int2ReferenceArrayMap<>(); + + public static void init(Consumer provider) { + initTierMaps(); + registerPowerUnitRecipes(provider); + + for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + UtilToolRecipeHelper.run(provider, material); + } + } + + private static void initTierMaps() { + if (UtilConfig.INSTANCE.features.customLuVToolsEnabled) { + motorItems.put(GTValues.LuV, GTItems.ELECTRIC_MOTOR_LuV); + baseMaterials.put(GTValues.LuV, GTMaterials.RhodiumPlatedPalladium); + batteryItems.put(GTValues.LuV, List.of( + GTItems.ENERGY_LAPOTRONIC_ORB_CLUSTER)); + powerUnitItems.put(GTValues.LuV, UtilToolItems.POWER_UNIT_LUV); + } + + if (UtilConfig.INSTANCE.features.customZPMToolsEnabled) { + motorItems.put(GTValues.ZPM, GTItems.ELECTRIC_MOTOR_ZPM); + baseMaterials.put(GTValues.ZPM, GTMaterials.NaquadahAlloy); + batteryItems.put(GTValues.ZPM, List.of( + GTItems.ENERGY_MODULE)); + powerUnitItems.put(GTValues.ZPM, UtilToolItems.POWER_UNIT_ZPM); + } + } + + /** + * Registers shaped recipes for the LuV and ZPM tool power units. + */ + private static void registerPowerUnitRecipes(Consumer provider) { + for (int tier : powerUnitItems.keySet()) { + var powerUnitEntry = powerUnitItems.get(tier); + var motorEntry = motorItems.get(tier); + var material = baseMaterials.get(tier); + var batteries = batteryItems.get(tier); + + if (powerUnitEntry == null || motorEntry == null || material == null || batteries == null || + batteries.isEmpty()) { + continue; + } + + for (ItemEntry batteryItem : batteries) { + ItemStack batteryStack = batteryItem.asStack(); + long maxCharge = GTCapabilityHelper.getElectricItem(batteryStack).getMaxCharge(); + + ItemStack powerUnitStack = ToolItemHelper.getMaxChargeOverrideStack(powerUnitEntry.get(), maxCharge); + + String recipeName = String.format( + "%s_%s", + BuiltInRegistries.ITEM.getKey(powerUnitEntry.get()).getPath(), + BuiltInRegistries.ITEM.getKey(batteryItem.get()).getPath()); + + VanillaRecipeHelper.addShapedEnergyTransferRecipe(provider, true, false, true, recipeName, + Ingredient.of(batteryStack), powerUnitStack, + "S d", "GMG", "PBP", + 'M', motorEntry.asStack(), + 'S', new MaterialEntry(screw, material), + 'P', new MaterialEntry(plate, material), + 'G', new MaterialEntry(gearSmall, material), + 'B', batteryStack); + } + } + } +} diff --git a/src/main/java/net/neganote/gtutilities/config/UtilConfig.java b/src/main/java/net/neganote/gtutilities/config/UtilConfig.java index 606d3d9..3630a6f 100644 --- a/src/main/java/net/neganote/gtutilities/config/UtilConfig.java +++ b/src/main/java/net/neganote/gtutilities/config/UtilConfig.java @@ -61,6 +61,30 @@ public static class FeatureConfigs { @Configurable @Configurable.Comment({ "Whether the coins/credits are enabled." }) public boolean coinsEnabled = false; + + @Configurable + @Configurable.Comment({ "Whether the custom MV tools are enabled." }) + public boolean customMVToolsEnabled = false; + + @Configurable + @Configurable.Comment({ "Whether the custom HV tools are enabled." }) + public boolean customHVToolsEnabled = false; + + @Configurable + @Configurable.Comment({ "Whether the custom EV tools are enabled." }) + public boolean customEVToolsEnabled = false; + + @Configurable + @Configurable.Comment({ "Whether the custom IV tools are enabled." }) + public boolean customIVToolsEnabled = false; + + @Configurable + @Configurable.Comment({ "Whether the custom LuV tools are enabled." }) + public boolean customLuVToolsEnabled = false; + + @Configurable + @Configurable.Comment({ "Whether the custom ZPM tools are enabled." }) + public boolean customZPMToolsEnabled = false; } public static boolean coolantEnabled() { diff --git a/src/main/java/net/neganote/gtutilities/datagen/lang/UtilLangHandler.java b/src/main/java/net/neganote/gtutilities/datagen/lang/UtilLangHandler.java index 090e68e..bd1d711 100644 --- a/src/main/java/net/neganote/gtutilities/datagen/lang/UtilLangHandler.java +++ b/src/main/java/net/neganote/gtutilities/datagen/lang/UtilLangHandler.java @@ -26,6 +26,40 @@ public static void init(RegistrateLangProvider provider) { provider.add("tooltip.omnibreaker.right_click_function", "Break individual blocks with right-click!"); provider.add("tooltip.omnibreaker.modern_vajra", "A Modern Vajra"); + provider.add("item.gtceu.tool.mv_screwdriver", "%s Electric Screwdriver (MV)"); + provider.add("item.gtceu.tool.hv_screwdriver", "%s Electric Screwdriver (HV)"); + provider.add("item.gtceu.tool.ev_screwdriver", "%s Electric Screwdriver (EV)"); + provider.add("item.gtceu.tool.iv_screwdriver", "%s Electric Screwdriver (IV)"); + provider.add("item.gtceu.tool.luv_screwdriver", "%s Electric Screwdriver (LuV)"); + provider.add("item.gtceu.tool.zpm_screwdriver", "%s Electric Screwdriver (ZPM)"); + + provider.add("item.gtceu.tool.mv_chainsaw", "%s Chainsaw (MV)"); + provider.add("item.gtceu.tool.hv_chainsaw", "%s Chainsaw (HV)"); + provider.add("item.gtceu.tool.ev_chainsaw", "%s Chainsaw (EV)"); + provider.add("item.gtceu.tool.iv_chainsaw", "%s Chainsaw (IV)"); + provider.add("item.gtceu.tool.luv_chainsaw", "%s Chainsaw (LuV)"); + provider.add("item.gtceu.tool.zpm_chainsaw", "%s Chainsaw (ZPM)"); + + provider.add("item.gtceu.tool.mv_buzzsaw", "%s Buzzsaw (MV)"); + provider.add("item.gtceu.tool.hv_buzzsaw", "%s Buzzsaw (HV)"); + provider.add("item.gtceu.tool.ev_buzzsaw", "%s Buzzsaw (EV)"); + provider.add("item.gtceu.tool.iv_buzzsaw", "%s Buzzsaw (IV)"); + provider.add("item.gtceu.tool.luv_buzzsaw", "%s Buzzsaw (LuV)"); + provider.add("item.gtceu.tool.zpm_buzzsaw", "%s Buzzsaw (ZPM)"); + + provider.add("item.gtceu.tool.mv_wrench", "%s Wrench (MV)"); + provider.add("item.gtceu.tool.ev_wrench", "%s Wrench (EV)"); + provider.add("item.gtceu.tool.luv_wrench", "%s Wrench (LuV)"); + provider.add("item.gtceu.tool.zpm_wrench", "%s Wrench (ZPM)"); + + provider.add("item.gtceu.tool.mv_wirecutter", "%s Wire Cutter (MV)"); + provider.add("item.gtceu.tool.ev_wirecutter", "%s Wire Cutter (EV)"); + provider.add("item.gtceu.tool.luv_wirecutter", "%s Wire Cutter (LuV)"); + provider.add("item.gtceu.tool.zpm_wirecutter", "%s Wire Cutter (ZPM)"); + + provider.add("item.gtceu.tool.luv_drill", "%s Drill (LuV)"); + provider.add("item.gtceu.tool.zpm_drill", "%s Drill (ZPM)"); + provider.add("tooltip.pterb_machine.uses_coolant", "Drains %s to function!"); provider.add("tooltip.pterb_machine.input_coolant_before_use", "Always input coolant before turning it on!"); diff --git a/src/main/resources/assets/gtceu/models/item/tools/ev_buzzsaw.json b/src/main/resources/assets/gtceu/models/item/tools/ev_buzzsaw.json new file mode 100644 index 0000000..9f114d4 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/ev_buzzsaw.json @@ -0,0 +1,8 @@ +{ + "parent": "gtceu:item/handheld_buzz", + "textures": { + "layer0": "gtmutils:item/tools/handle_buzzsaw_ev", + "layer1": "gtceu:item/tools/buzzsaw_tool", + "layer2": "gtceu:item/tools/buzzsaw_tool_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/ev_chainsaw.json b/src/main/resources/assets/gtceu/models/item/tools/ev_chainsaw.json new file mode 100644 index 0000000..b8b3fb8 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/ev_chainsaw.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtceu:item/tools/power_unit_ev", + "layer1": "gtceu:item/tools/chainsaw", + "layer2": "gtceu:item/void", + "layer3": "gtmutils:item/tools/chainsaw_body_ev" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/ev_screwdriver.json b/src/main/resources/assets/gtceu/models/item/tools/ev_screwdriver.json new file mode 100644 index 0000000..39957eb --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/ev_screwdriver.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/handle_electric_screwdriver_ev", + "layer1": "gtceu:item/tools/screwdriver_short", + "layer2": "gtceu:item/tools/screwdriver_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/ev_wirecutter.json b/src/main/resources/assets/gtceu/models/item/tools/ev_wirecutter.json new file mode 100644 index 0000000..be37c44 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/ev_wirecutter.json @@ -0,0 +1,7 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/electric_wirecutter_base_ev", + "layer1": "gtceu:item/tools/electric_wirecutter_head" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/item/tools/ev_wrench.json b/src/main/resources/assets/gtceu/models/item/tools/ev_wrench.json new file mode 100644 index 0000000..05f23ce --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/ev_wrench.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtceu:item/tools/power_unit_ev", + "layer1": "gtceu:item/tools/wrench_electric", + "layer2": "gtceu:item/tools/wrench_electric_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/hv_buzzsaw.json b/src/main/resources/assets/gtceu/models/item/tools/hv_buzzsaw.json new file mode 100644 index 0000000..ff27349 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/hv_buzzsaw.json @@ -0,0 +1,8 @@ +{ + "parent": "gtceu:item/handheld_buzz", + "textures": { + "layer0": "gtmutils:item/tools/handle_buzzsaw_hv", + "layer1": "gtceu:item/tools/buzzsaw_tool", + "layer2": "gtceu:item/tools/buzzsaw_tool_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/hv_chainsaw.json b/src/main/resources/assets/gtceu/models/item/tools/hv_chainsaw.json new file mode 100644 index 0000000..3b86d4c --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/hv_chainsaw.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtceu:item/tools/power_unit_hv", + "layer1": "gtceu:item/tools/chainsaw", + "layer2": "gtceu:item/void", + "layer3": "gtmutils:item/tools/chainsaw_body_hv" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/hv_screwdriver.json b/src/main/resources/assets/gtceu/models/item/tools/hv_screwdriver.json new file mode 100644 index 0000000..58fab2e --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/hv_screwdriver.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/handle_electric_screwdriver_hv", + "layer1": "gtceu:item/tools/screwdriver_short", + "layer2": "gtceu:item/tools/screwdriver_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/iv_buzzsaw.json b/src/main/resources/assets/gtceu/models/item/tools/iv_buzzsaw.json new file mode 100644 index 0000000..2757bc2 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/iv_buzzsaw.json @@ -0,0 +1,8 @@ +{ + "parent": "gtceu:item/handheld_buzz", + "textures": { + "layer0": "gtmutils:item/tools/handle_buzzsaw_iv", + "layer1": "gtceu:item/tools/buzzsaw_tool", + "layer2": "gtceu:item/tools/buzzsaw_tool_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/iv_chainsaw.json b/src/main/resources/assets/gtceu/models/item/tools/iv_chainsaw.json new file mode 100644 index 0000000..99d1625 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/iv_chainsaw.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtceu:item/tools/power_unit_iv", + "layer1": "gtceu:item/tools/chainsaw", + "layer2": "gtceu:item/void", + "layer3": "gtmutils:item/tools/chainsaw_body_iv" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/iv_screwdriver.json b/src/main/resources/assets/gtceu/models/item/tools/iv_screwdriver.json new file mode 100644 index 0000000..805da93 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/iv_screwdriver.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/handle_electric_screwdriver_iv", + "layer1": "gtceu:item/tools/screwdriver_short", + "layer2": "gtceu:item/tools/screwdriver_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/luv_buzzsaw.json b/src/main/resources/assets/gtceu/models/item/tools/luv_buzzsaw.json new file mode 100644 index 0000000..b53c718 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/luv_buzzsaw.json @@ -0,0 +1,8 @@ +{ + "parent": "gtceu:item/handheld_buzz", + "textures": { + "layer0": "gtmutils:item/tools/handle_buzzsaw_luv", + "layer1": "gtceu:item/tools/buzzsaw_tool", + "layer2": "gtceu:item/tools/buzzsaw_tool_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/luv_chainsaw.json b/src/main/resources/assets/gtceu/models/item/tools/luv_chainsaw.json new file mode 100644 index 0000000..625a0ef --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/luv_chainsaw.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_luv", + "layer1": "gtceu:item/tools/chainsaw", + "layer2": "gtceu:item/void", + "layer3": "gtmutils:item/tools/chainsaw_body_luv" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/luv_drill.json b/src/main/resources/assets/gtceu/models/item/tools/luv_drill.json new file mode 100644 index 0000000..ca22cda --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/luv_drill.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_luv", + "layer1": "gtceu:item/tools/drill", + "layer2": "gtceu:item/void", + "layer3": "gtceu:item/tools/drill_body" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/luv_screwdriver.json b/src/main/resources/assets/gtceu/models/item/tools/luv_screwdriver.json new file mode 100644 index 0000000..52af9f2 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/luv_screwdriver.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/handle_electric_screwdriver_luv", + "layer1": "gtceu:item/tools/screwdriver_short", + "layer2": "gtceu:item/tools/screwdriver_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/luv_wirecutter.json b/src/main/resources/assets/gtceu/models/item/tools/luv_wirecutter.json new file mode 100644 index 0000000..fedaa5f --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/luv_wirecutter.json @@ -0,0 +1,7 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/electric_wirecutter_base_luv", + "layer1": "gtceu:item/tools/electric_wirecutter_head" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/item/tools/luv_wrench.json b/src/main/resources/assets/gtceu/models/item/tools/luv_wrench.json new file mode 100644 index 0000000..5e5f6ec --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/luv_wrench.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_luv", + "layer1": "gtceu:item/tools/wrench_electric", + "layer2": "gtceu:item/tools/wrench_electric_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/mv_buzzsaw.json b/src/main/resources/assets/gtceu/models/item/tools/mv_buzzsaw.json new file mode 100644 index 0000000..363bd82 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/mv_buzzsaw.json @@ -0,0 +1,8 @@ +{ + "parent": "gtceu:item/handheld_buzz", + "textures": { + "layer0": "gtmutils:item/tools/handle_buzzsaw_mv", + "layer1": "gtceu:item/tools/buzzsaw_tool", + "layer2": "gtceu:item/tools/buzzsaw_tool_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/mv_chainsaw.json b/src/main/resources/assets/gtceu/models/item/tools/mv_chainsaw.json new file mode 100644 index 0000000..e2fd783 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/mv_chainsaw.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtceu:item/tools/power_unit_mv", + "layer1": "gtceu:item/tools/chainsaw", + "layer2": "gtceu:item/void", + "layer3": "gtmutils:item/tools/chainsaw_body_mv" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/mv_screwdriver.json b/src/main/resources/assets/gtceu/models/item/tools/mv_screwdriver.json new file mode 100644 index 0000000..1ca91fc --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/mv_screwdriver.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/handle_electric_screwdriver_mv", + "layer1": "gtceu:item/tools/screwdriver_short", + "layer2": "gtceu:item/tools/screwdriver_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/mv_wirecutter.json b/src/main/resources/assets/gtceu/models/item/tools/mv_wirecutter.json new file mode 100644 index 0000000..b24608a --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/mv_wirecutter.json @@ -0,0 +1,7 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/electric_wirecutter_base_mv", + "layer1": "gtceu:item/tools/electric_wirecutter_head" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/item/tools/mv_wrench.json b/src/main/resources/assets/gtceu/models/item/tools/mv_wrench.json new file mode 100644 index 0000000..46627ca --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/mv_wrench.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtceu:item/tools/power_unit_mv", + "layer1": "gtceu:item/tools/wrench_electric", + "layer2": "gtceu:item/tools/wrench_electric_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/zpm_buzzsaw.json b/src/main/resources/assets/gtceu/models/item/tools/zpm_buzzsaw.json new file mode 100644 index 0000000..eea1700 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/zpm_buzzsaw.json @@ -0,0 +1,8 @@ +{ + "parent": "gtceu:item/handheld_buzz", + "textures": { + "layer0": "gtmutils:item/tools/handle_buzzsaw_zpm", + "layer1": "gtceu:item/tools/buzzsaw_tool", + "layer2": "gtceu:item/tools/buzzsaw_tool_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/zpm_chainsaw.json b/src/main/resources/assets/gtceu/models/item/tools/zpm_chainsaw.json new file mode 100644 index 0000000..7b0b89f --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/zpm_chainsaw.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_zpm", + "layer1": "gtceu:item/tools/chainsaw", + "layer2": "gtceu:item/void", + "layer3": "gtmutils:item/tools/chainsaw_body_zpm" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/zpm_drill.json b/src/main/resources/assets/gtceu/models/item/tools/zpm_drill.json new file mode 100644 index 0000000..dca7fd1 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/zpm_drill.json @@ -0,0 +1,9 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_zpm", + "layer1": "gtceu:item/tools/drill", + "layer2": "gtceu:item/void", + "layer3": "gtceu:item/tools/drill_body" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/zpm_screwdriver.json b/src/main/resources/assets/gtceu/models/item/tools/zpm_screwdriver.json new file mode 100644 index 0000000..64e4906 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/zpm_screwdriver.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/handle_electric_screwdriver_zpm", + "layer1": "gtceu:item/tools/screwdriver_short", + "layer2": "gtceu:item/tools/screwdriver_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/models/item/tools/zpm_wirecutter.json b/src/main/resources/assets/gtceu/models/item/tools/zpm_wirecutter.json new file mode 100644 index 0000000..8f9ca94 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/zpm_wirecutter.json @@ -0,0 +1,7 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/electric_wirecutter_base_zpm", + "layer1": "gtceu:item/tools/electric_wirecutter_head" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/item/tools/zpm_wrench.json b/src/main/resources/assets/gtceu/models/item/tools/zpm_wrench.json new file mode 100644 index 0000000..605714d --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/tools/zpm_wrench.json @@ -0,0 +1,8 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "gtmutils:item/tools/power_unit_zpm", + "layer1": "gtceu:item/tools/wrench_electric", + "layer2": "gtceu:item/tools/wrench_electric_overlay" + } +} diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_ev.png b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_ev.png new file mode 100644 index 0000000..8bd2fbe Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_ev.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_hv.png b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_hv.png new file mode 100644 index 0000000..1158880 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_hv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_iv.png b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_iv.png new file mode 100644 index 0000000..053b537 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_iv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_luv.png b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_luv.png new file mode 100644 index 0000000..dd88130 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_luv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_mv.png b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_mv.png new file mode 100644 index 0000000..42b55ec Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_mv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_zpm.png b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_zpm.png new file mode 100644 index 0000000..e2ffde8 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/chainsaw_body_zpm.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_ev.png b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_ev.png new file mode 100644 index 0000000..9f817d6 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_ev.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_luv.png b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_luv.png new file mode 100644 index 0000000..ebe6eb8 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_luv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_mv.png b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_mv.png new file mode 100644 index 0000000..61982ec Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_mv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_zpm.png b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_zpm.png new file mode 100644 index 0000000..ba564e7 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/electric_wirecutter_base_zpm.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_ev.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_ev.png new file mode 100644 index 0000000..f1e102a Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_ev.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_hv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_hv.png new file mode 100644 index 0000000..59d92d5 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_hv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_iv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_iv.png new file mode 100644 index 0000000..221b658 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_iv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_luv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_luv.png new file mode 100644 index 0000000..9d9026d Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_luv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_mv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_mv.png new file mode 100644 index 0000000..6d509e3 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_mv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_zpm.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_zpm.png new file mode 100644 index 0000000..5d725d0 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_buzzsaw_zpm.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_ev.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_ev.png new file mode 100644 index 0000000..66e6db8 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_ev.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_hv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_hv.png new file mode 100644 index 0000000..4aec88e Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_hv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_iv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_iv.png new file mode 100644 index 0000000..8556b5e Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_iv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_luv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_luv.png new file mode 100644 index 0000000..1cf9d6f Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_luv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_mv.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_mv.png new file mode 100644 index 0000000..e13ba74 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_mv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_zpm.png b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_zpm.png new file mode 100644 index 0000000..d3abf2a Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/handle_electric_screwdriver_zpm.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/power_unit_luv.png b/src/main/resources/assets/gtmutils/textures/item/tools/power_unit_luv.png new file mode 100644 index 0000000..23d9dcc Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/power_unit_luv.png differ diff --git a/src/main/resources/assets/gtmutils/textures/item/tools/power_unit_zpm.png b/src/main/resources/assets/gtmutils/textures/item/tools/power_unit_zpm.png new file mode 100644 index 0000000..cceb3b3 Binary files /dev/null and b/src/main/resources/assets/gtmutils/textures/item/tools/power_unit_zpm.png differ