Skip to content

Commit

Permalink
Add protection as a new ability modifier, and give it +2% on the firs…
Browse files Browse the repository at this point in the history
…t level

Backport of 7b8bc45
  • Loading branch information
KnightMiner committed Mar 16, 2022
1 parent 0b8dc3c commit a2dfc65
Show file tree
Hide file tree
Showing 13 changed files with 127 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"type": "tconstruct:modifier",
"inputs": [
{
"item": "tconstruct:gold_reinforcement",
"amount_needed": 4
},
{
"item": "tconstruct:seared_reinforcement",
"amount_needed": 4
},
{
"item": "tconstruct:bronze_reinforcement",
"amount_needed": 4
},
{
"item": "tconstruct:emerald_reinforcement",
"amount_needed": 4
},
{
"item": "tconstruct:cobalt_reinforcement",
"amount_needed": 4
}
],
"tools": {
"tag": "tconstruct:modifiable/armor"
},
"slots": {
"abilities": 1
},
"result": {
"name": "tconstruct:protection",
"level": 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"type": "tconstruct:modifier_salvage",
"tools": {
"tag": "tconstruct:modifiable/armor"
},
"slots": {
"abilities": 1
},
"modifier": "tconstruct:protection",
"min_level": 1,
"salvage": [
{
"item": "tconstruct:gold_reinforcement",
"min": 1,
"max": 4
},
{
"item": "tconstruct:seared_reinforcement",
"min": 1,
"max": 4
},
{
"item": "tconstruct:bronze_reinforcement",
"min": 1,
"max": 4
},
{
"item": "tconstruct:emerald_reinforcement",
"min": 1,
"max": 4
},
{
"item": "tconstruct:cobalt_reinforcement",
"min": 1,
"max": 4
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,16 @@ private void addModifierRecipes(Consumer<IFinishedRecipe> consumer) {
.setTools(TinkerTags.Items.ARMOR)
.buildSalvage(consumer, prefix(TinkerModifiers.fireProtection, defenseSalvage))
.build(consumer, prefix(TinkerModifiers.fireProtection, defenseFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.protection.get())
.addInputSalvage(TinkerModifiers.goldReinforcement, 1, 4)
.addInputSalvage(TinkerModifiers.searedReinforcement, 1, 4)
.addInputSalvage(TinkerModifiers.bronzeReinforcement, 1, 4)
.addInputSalvage(TinkerModifiers.emeraldReinforcement, 1, 4)
.addInputSalvage(TinkerModifiers.cobaltReinforcement, 1, 4)
.setSlots(SlotType.ABILITY, 1)
.setTools(TinkerTags.Items.ARMOR)
.buildSalvage(consumer, prefix(TinkerModifiers.protection, abilitySalvage))
.build(consumer, prefix(TinkerModifiers.protection, abilityFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.knockbackResistance.get())
.setTools(TinkerTags.Items.ARMOR)
.addInput(SizedIngredient.fromItems(Blocks.ANVIL, Blocks.CHIPPED_ANVIL, Blocks.DAMAGED_ANVIL))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,19 @@
import net.minecraft.entity.LivingEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.inventory.EquipmentSlotType.Group;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import slimeknights.tconstruct.common.TinkerTags;
import slimeknights.tconstruct.library.modifiers.IncrementalModifier;
import slimeknights.tconstruct.library.tools.capability.TinkerDataCapability.TinkerDataKey;
import slimeknights.tconstruct.library.tools.context.EquipmentChangeContext;
import slimeknights.tconstruct.library.tools.nbt.IModifierToolStack;
import slimeknights.tconstruct.library.utils.Util;
import slimeknights.tconstruct.tools.logic.ModifierMaxLevel;

import java.util.List;

/** Base class for protection modifiers that want to keep track of the largest level for a bonus */
public abstract class AbstractProtectionModifier<T extends ModifierMaxLevel> extends IncrementalModifier {
private final TinkerDataKey<T> key;
Expand Down Expand Up @@ -58,4 +65,20 @@ public void onEquip(IModifierToolStack tool, int level, EquipmentChangeContext c
});
}
}

/**
* Adds the resistance type tooltip to the armor
* @param modifier Modifier instance
* @param tool Tool getting the tooltip
* @param level Modifier level
* @param multiplier Amount per level
* @param tooltip Tooltip to show
*/
public static void addResistanceTooltip(IncrementalModifier modifier, IModifierToolStack tool, int level, float multiplier, List<ITextComponent> tooltip) {
if (tool.hasTag(TinkerTags.Items.ARMOR)) {
tooltip.add(modifier.applyStyle(new StringTextComponent(Util.PERCENT_BOOST_FORMAT.format(modifier.getScaledLevel(tool, level) * multiplier / 25f))
.appendString(" ")
.appendSibling(new TranslationTextComponent(modifier.getTranslationKey() + ".resistance"))));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 2.5f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 2.5f, tooltip);
}

/** Boosts critical hit damage */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 2.0f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 2.0f, tooltip);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
}

/** Reduces visibility to mobs */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ public ProtectionModifier() {
super(0xA8A8A8);
}

/** Gets the protection value for the given level and modifier value */
private double getProtectionValue(IModifierToolStack tool, int level) {
float scaled = getScaledLevel(tool, level);
if (scaled > 1) {
return 0.5 + scaled;
} else {
return scaled * 1.5;
}
}

@Override
public float getProtectionModifier(IModifierToolStack tool, int level, EquipmentContext context, EquipmentSlotType slotType, DamageSource source, float modifierValue) {
if (!source.isDamageAbsolute() && !source.canHarmInCreative()) {
Expand All @@ -29,22 +39,10 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
addResistanceTooltip(this, tool, level, 1.0f, tooltip);
}

/**
* Adds the resistance type tooltip to the armor
* @param modifier Modifier instance
* @param tool Tool getting the tooltip
* @param level Modifier level
* @param multiplier Amount per level
* @param tooltip Tooltip to show
*/
public static void addResistanceTooltip(IncrementalModifier modifier, IModifierToolStack tool, int level, float multiplier, List<ITextComponent> tooltip) {
if (tool.hasTag(TinkerTags.Items.ARMOR)) {
tooltip.add(modifier.applyStyle(new StringTextComponent(Util.PERCENT_BOOST_FORMAT.format(modifier.getScaledLevel(tool, level) * multiplier / 25f))
tooltip.add(applyStyle(new StringTextComponent(Util.PERCENT_BOOST_FORMAT.format(getProtectionValue(tool, level) / 25f))
.appendString(" ")
.appendSibling(new TranslationTextComponent(modifier.getTranslationKey() + ".resistance"))));
.appendSibling(new TranslationTextComponent(getTranslationKey() + ".resistance"))));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,6 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 2f, tooltip);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import slimeknights.tconstruct.library.tools.context.EquipmentContext;
import slimeknights.tconstruct.library.tools.nbt.IModifierToolStack;
import slimeknights.tconstruct.library.utils.TooltipFlag;
import slimeknights.tconstruct.tools.modifiers.defense.ProtectionModifier;
import slimeknights.tconstruct.tools.modifiers.defense.AbstractProtectionModifier;

import java.util.List;

Expand All @@ -26,6 +26,6 @@ public float getProtectionModifier(IModifierToolStack tool, int level, Equipment

@Override
public void addInformation(IModifierToolStack tool, int level, List<ITextComponent> tooltip, TooltipFlag tooltipFlag) {
ProtectionModifier.addResistanceTooltip(this, tool, level, 3f, tooltip);
AbstractProtectionModifier.addResistanceTooltip(this, tool, level, 3f, tooltip);
}
}

0 comments on commit a2dfc65

Please sign in to comment.