diff --git a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java index d388dc7c..0ff1d559 100644 --- a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java +++ b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java @@ -777,6 +777,61 @@ public static class TinkersConstructCategory @Config.Name("Duplication Fixes") @Config.Comment("Fixes various duplication exploits") public boolean utDuplicationFixesToggle = true; + + @Config.RequiresMcRestart + @Config.Name("Tool Customization") + @Config.Comment("Enables usage of tweaks in below category to customize Tinkers' tools stats") + public boolean utTConToolCustomizationToggle = true; + + @Config.LangKey("cfg.universaltweaks.modintegration.tcon.toolcustomization") + @Config.Name("Tool Customization") + public final TinkersConstructCategory.ToolCustomizationCategory TOOL_CUSTOMIZATION = new TinkersConstructCategory.ToolCustomizationCategory(); + + public static class ToolCustomizationCategory + { + @Config.Name("General Attack Damage Cutoff") + @Config.Comment + ({ + "Sets the attack damage cutoff at which diminishing returns start for any Tinkers' tool not listed here", + "Default value: 15.0" + }) + public float utTConToolGeneralDamageCutoff = 15.0f; + + @Config.Name("Cleaver Attack Damage Cutoff") + @Config.Comment + ({ + "Sets the attack damage cutoff at which diminishing returns start for the cleaver", + "Default value: 25.0" + }) + public float utTConToolCleaverDamageCutoff = 25.0f; + + @Config.Name("Longsword Attack Damage Cutoff") + @Config.Comment + ({ + "Sets the attack damage cutoff at which diminishing returns start for the longsword", + "Default value: 18.0" + }) + public float utTConToolLongswordDamageCutoff = 18.0f; + + @Config.Name("Rapier Attack Damage Cutoff") + @Config.Comment + ({ + "Sets the attack damage cutoff at which diminishing returns start for the rapier", + "Default value: 13.0" + }) + public float utTConToolRapierDamageCutoff = 13.0f; + + @Config.Name("Attack Damage Decay Rate") + @Config.Comment + ({ + "Sets the rate at which a tool's attack damage incrementally decays depending on its damage cutoff", + "Default value: 0.9", + "Range: 0.0 - 1.0", + "Note: A rate of 1.0 means there is no damage decay", + "Note: The damage curve will cap the maximum value to (tool's damage cutoff)/(1 - decay rate)" + }) + public String utTConToolDamageDecayRate = "0.9"; + } } public static class TinyProgressionsCategory diff --git a/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java b/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java index dc153d1f..4ae4d2ad 100644 --- a/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java +++ b/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java @@ -56,6 +56,7 @@ public List getMixinConfigs() "mixins.mods.spiceoflife.dupes.json", "mixins.mods.storagedrawers.client.json", "mixins.mods.tconstruct.json", + "mixins.mods.tconstruct.toolcustomization.json", "mixins.mods.tconstruct.oredictcache.json", "mixins.mods.techreborn.json", "mixins.mods.thaumcraft.dupes.json", @@ -189,6 +190,8 @@ public boolean shouldMixinConfigQueue(String mixinConfig) return Loader.isModLoaded("thermalexpansion") && UTConfigMods.THERMAL_EXPANSION.utDuplicationFixesToggle; case "mixins.mods.tconstruct.json": return Loader.isModLoaded("tconstruct"); + case "mixins.mods.tconstruct.toolcustomization.json": + return Loader.isModLoaded("tconstruct") && UTConfigMods.TINKERS_CONSTRUCT.utTConToolCustomizationToggle; case "mixins.mods.tconstruct.oredictcache.json": return Loader.isModLoaded("tconstruct") && UTConfigMods.TINKERS_CONSTRUCT.utTConOreDictCacheToggle; case "mixins.mods.tinyprogressions.dupes.json": diff --git a/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTCleaverMixin.java b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTCleaverMixin.java new file mode 100644 index 00000000..23462cef --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTCleaverMixin.java @@ -0,0 +1,18 @@ +package mod.acgaming.universaltweaks.mods.tconstruct.toolcustomization.mixin; + +import mod.acgaming.universaltweaks.config.UTConfigMods; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import slimeknights.tconstruct.tools.melee.item.Cleaver; + +@Mixin(value = Cleaver.class, remap = false) +public class UTCleaverMixin +{ + @Inject(method = "damageCutoff", at = @At(value = "RETURN"), cancellable = true) + private void utModifyDamageCutoff(CallbackInfoReturnable cir) + { + cir.setReturnValue(UTConfigMods.TINKERS_CONSTRUCT.TOOL_CUSTOMIZATION.utTConToolCleaverDamageCutoff); + } +} diff --git a/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTLongswordMixin.java b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTLongswordMixin.java new file mode 100644 index 00000000..08f92155 --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTLongswordMixin.java @@ -0,0 +1,18 @@ +package mod.acgaming.universaltweaks.mods.tconstruct.toolcustomization.mixin; + +import mod.acgaming.universaltweaks.config.UTConfigMods; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import slimeknights.tconstruct.tools.melee.item.LongSword; + +@Mixin(value = LongSword.class, remap = false) +public class UTLongswordMixin +{ + @Inject(method = "damageCutoff", at = @At(value = "RETURN"), cancellable = true) + private void utModifyDamageCutoff(CallbackInfoReturnable cir) + { + cir.setReturnValue(UTConfigMods.TINKERS_CONSTRUCT.TOOL_CUSTOMIZATION.utTConToolLongswordDamageCutoff); + } +} diff --git a/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTRapierMixin.java b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTRapierMixin.java new file mode 100644 index 00000000..3260cdbc --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTRapierMixin.java @@ -0,0 +1,18 @@ +package mod.acgaming.universaltweaks.mods.tconstruct.toolcustomization.mixin; + +import mod.acgaming.universaltweaks.config.UTConfigMods; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import slimeknights.tconstruct.tools.melee.item.Rapier; + +@Mixin(value = Rapier.class, remap = false) +public class UTRapierMixin +{ + @Inject(method = "damageCutoff", at = @At(value = "RETURN"), cancellable = true) + private void utModifyDamageCutoff(CallbackInfoReturnable cir) + { + cir.setReturnValue(UTConfigMods.TINKERS_CONSTRUCT.TOOL_CUSTOMIZATION.utTConToolRapierDamageCutoff); + } +} diff --git a/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTToolCoreMixin.java b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTToolCoreMixin.java new file mode 100644 index 00000000..3a659ab7 --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTToolCoreMixin.java @@ -0,0 +1,18 @@ +package mod.acgaming.universaltweaks.mods.tconstruct.toolcustomization.mixin; + +import mod.acgaming.universaltweaks.config.UTConfigMods; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import slimeknights.tconstruct.library.tools.ToolCore; + +@Mixin(value = ToolCore.class, remap = false) +public class UTToolCoreMixin +{ + @Inject(method = "damageCutoff", at = @At(value = "RETURN"), cancellable = true) + private void utModifyDamageCutoff(CallbackInfoReturnable cir) + { + cir.setReturnValue(UTConfigMods.TINKERS_CONSTRUCT.TOOL_CUSTOMIZATION.utTConToolGeneralDamageCutoff); + } +} diff --git a/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTToolHelperMixin.java b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTToolHelperMixin.java new file mode 100644 index 00000000..545a13f0 --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/mods/tconstruct/toolcustomization/mixin/UTToolHelperMixin.java @@ -0,0 +1,33 @@ +package mod.acgaming.universaltweaks.mods.tconstruct.toolcustomization.mixin; + +import mod.acgaming.universaltweaks.UniversalTweaks; +import mod.acgaming.universaltweaks.config.UTConfigGeneral; +import mod.acgaming.universaltweaks.config.UTConfigMods; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import slimeknights.tconstruct.library.utils.ToolHelper; + +@Mixin(value = ToolHelper.class, remap = false) +public class UTToolHelperMixin +{ + @ModifyConstant(method = "calcCutoffDamage", constant = @Constant(floatValue = 0.9f)) + private static float utModifyDecayRate(float original) + { + try + { + float newDecayRate = Float.parseFloat(UTConfigMods.TINKERS_CONSTRUCT.TOOL_CUSTOMIZATION.utTConToolDamageDecayRate); + if (newDecayRate < 0.0f || newDecayRate > 1.0f) + { + if (UTConfigGeneral.DEBUG.utDebugToggle) UniversalTweaks.LOGGER.info("UTToolHelperMixin ::: Config's 'Attack Damage Decay Rate' is not in the valid range, must be a value from 0.0 to 1.0. Falling back to default value."); + return original; + } + return newDecayRate; + } + catch (NumberFormatException e) + { + UniversalTweaks.LOGGER.error("UTToolHelperMixin ::: Could not parse a float from config's 'Attack Damage Decay Rate', must be a value from 0.0 to 1.0. Falling back to default value."); + return original; + } + } +} diff --git a/src/main/resources/mixins.mods.tconstruct.toolcustomization.json b/src/main/resources/mixins.mods.tconstruct.toolcustomization.json new file mode 100644 index 00000000..1901efc6 --- /dev/null +++ b/src/main/resources/mixins.mods.tconstruct.toolcustomization.json @@ -0,0 +1,7 @@ +{ + "package": "mod.acgaming.universaltweaks.mods.tconstruct.toolcustomization.mixin", + "refmap": "universaltweaks.refmap.json", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": ["UTCleaverMixin", "UTLongswordMixin", "UTRapierMixin", "UTToolCoreMixin", "UTToolHelperMixin"] +} \ No newline at end of file