Skip to content

Commit

Permalink
Make fiery and freezing more applicable
Browse files Browse the repository at this point in the history
Fiery now works on counterattack as a new armor modifier
Freezing now works on melee and counterattack, replacing sticky
Sticky will be fully migrated in a later commit once I decide what I want to do with mattocks and pickadze traits
  • Loading branch information
KnightMiner committed Dec 14, 2023
1 parent 99f9f8f commit 5b495bc
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
},
{
"tag": "tconstruct:modifiable/ranged/bows"
},
{
"tag": "tconstruct:modifiable/armor/worn"
},
{
"tag": "tconstruct:modifiable/shields"
}
],
"slots": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
{
"type": "tconstruct:modifier_salvage",
"tools": {
"tag": "tconstruct:modifiable/ranged/bows"
},
"tools": [
{
"tag": "tconstruct:modifiable/melee_or_unarmed"
},
{
"tag": "tconstruct:modifiable/ranged/bows"
},
{
"tag": "tconstruct:modifiable/armor/worn"
},
{
"tag": "tconstruct:modifiable/shields"
}
],
"slots": {
"upgrades": 1
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
},
{
"tag": "tconstruct:modifiable/ranged/bows"
},
{
"tag": "tconstruct:modifiable/armor/worn"
},
{
"tag": "tconstruct:modifiable/shields"
}
],
"slots": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,20 @@
"item": "minecraft:powder_snow_bucket"
}
],
"tools": {
"tag": "tconstruct:modifiable/ranged/bows"
},
"tools": [
{
"tag": "tconstruct:modifiable/melee_or_unarmed"
},
{
"tag": "tconstruct:modifiable/ranged/bows"
},
{
"tag": "tconstruct:modifiable/armor/worn"
},
{
"tag": "tconstruct:modifiable/shields"
}
],
"slots": {
"upgrades": 1
},
Expand All @@ -16,5 +27,5 @@
"name": "tconstruct:freezing",
"level": 1
},
"max_level": 2
"max_level": 3
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.saveSalvage(consumer, prefix(TinkerModifiers.severing, upgradeSalvage))
.save(consumer, prefix(TinkerModifiers.severing, upgradeFolder));
IncrementalModifierRecipeBuilder.modifier(TinkerModifiers.fiery)
.setTools(ingredientFromTags(TinkerTags.Items.MELEE_OR_UNARMED, TinkerTags.Items.BOWS))
.setTools(ingredientFromTags(TinkerTags.Items.MELEE_OR_UNARMED, TinkerTags.Items.BOWS, TinkerTags.Items.WORN_ARMOR, TinkerTags.Items.SHIELDS))
.setInput(Items.BLAZE_POWDER, 1, 25)
.setMaxLevel(5) // +25 seconds fire damage
.setSlots(SlotType.UPGRADE, 1)
Expand Down Expand Up @@ -541,9 +541,9 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.save(consumer, prefix(TinkerModifiers.impaling, upgradeFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.freezing)
.addInput(Items.POWDER_SNOW_BUCKET)
.setMaxLevel(2)
.setMaxLevel(3)
.setSlots(SlotType.UPGRADE, 1)
.setTools(TinkerTags.Items.BOWS) // no elementals on fluid cannon
.setTools(ingredientFromTags(TinkerTags.Items.MELEE_OR_UNARMED, TinkerTags.Items.BOWS, TinkerTags.Items.WORN_ARMOR, TinkerTags.Items.SHIELDS))
.saveSalvage(consumer, prefix(TinkerModifiers.freezing, upgradeSalvage))
.save(consumer, prefix(TinkerModifiers.freezing, upgradeFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.bulkQuiver)
Expand Down Expand Up @@ -743,11 +743,8 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.save(consumer, prefix(TinkerModifiers.thorns, upgradeFolder));
IncrementalModifierRecipeBuilder.modifier(ModifierIds.sticky)
.setTools(ingredientFromTags(TinkerTags.Items.MELEE, TinkerTags.Items.WORN_ARMOR, TinkerTags.Items.SHIELDS))
.setInput(Blocks.COBWEB, 1, 5)
.setSlots(SlotType.UPGRADE, 1)
.setMaxLevel(3)
.saveSalvage(consumer, prefix(ModifierIds.sticky, upgradeSalvage))
.save(consumer, prefix(ModifierIds.sticky, upgradeFolder));
.saveSalvage(consumer, prefix(ModifierIds.sticky, upgradeSalvage));
ModifierRecipeBuilder.modifier(TinkerModifiers.springy)
.setTools(wornOrShield)
.addInput(Items.PISTON)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package slimeknights.tconstruct.tools.modifiers.upgrades.melee;

import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.EquipmentSlot.Type;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.entity.projectile.Projectile;
Expand All @@ -8,19 +12,22 @@
import slimeknights.tconstruct.library.modifiers.TinkerHooks;
import slimeknights.tconstruct.library.modifiers.hook.ProjectileHitModifierHook;
import slimeknights.tconstruct.library.modifiers.hook.ProjectileLaunchModifierHook;
import slimeknights.tconstruct.library.modifiers.hook.combat.DamageTakenModifierHook;
import slimeknights.tconstruct.library.modifiers.impl.IncrementalModifier;
import slimeknights.tconstruct.library.modifiers.util.ModifierHookMap.Builder;
import slimeknights.tconstruct.library.tools.context.EquipmentContext;
import slimeknights.tconstruct.library.tools.context.ToolAttackContext;
import slimeknights.tconstruct.library.tools.helper.ToolDamageUtil;
import slimeknights.tconstruct.library.tools.nbt.IToolStackView;
import slimeknights.tconstruct.library.tools.nbt.ModifierNBT;
import slimeknights.tconstruct.library.tools.nbt.NamespacedNBT;

import javax.annotation.Nullable;

public class FieryModifier extends IncrementalModifier implements ProjectileLaunchModifierHook, ProjectileHitModifierHook {
public class FieryModifier extends IncrementalModifier implements ProjectileLaunchModifierHook, ProjectileHitModifierHook, DamageTakenModifierHook {
@Override
protected void registerHooks(Builder hookBuilder) {
hookBuilder.addHook(this, TinkerHooks.PROJECTILE_LAUNCH, TinkerHooks.PROJECTILE_HIT);
hookBuilder.addHook(this, TinkerHooks.PROJECTILE_LAUNCH, TinkerHooks.PROJECTILE_HIT, TinkerHooks.DAMAGE_TAKEN);
}

@Override
Expand Down Expand Up @@ -62,4 +69,21 @@ public boolean onProjectileHitEntity(ModifierNBT modifiers, NamespacedNBT persis
hit.getEntity().setSecondsOnFire(Math.round(persistentData.getFloat(getId()) * 5));
return false;
}

@Override
public void onDamageTaken(IToolStackView tool, ModifierEntry modifier, EquipmentContext context, EquipmentSlot slotType, DamageSource source, float amount, boolean isDirectDamage) {
// this works like vanilla, damage is capped due to the hurt immunity mechanics, so if multiple pieces apply thorns between us and vanilla, damage is capped at 4
Entity attacker = source.getEntity();
if (isDirectDamage && attacker != null) {
// 15% chance of working per level, doubled bonus on shields
int level = modifier.getLevel();
if (slotType.getType() == Type.HAND) {
level *= 2;
}
if (RANDOM.nextFloat() < (level * 0.15f)) {
attacker.setSecondsOnFire(Math.round(getEffectiveLevel(tool, level) * 5));
ToolDamageUtil.damageAnimated(tool, 1, context.getEntity(), slotType);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,31 +1,67 @@
package slimeknights.tconstruct.tools.modifiers.upgrades.ranged;

import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.EquipmentSlot.Type;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.Projectile;
import net.minecraft.world.phys.EntityHitResult;
import slimeknights.tconstruct.library.modifiers.Modifier;
import slimeknights.tconstruct.library.modifiers.ModifierEntry;
import slimeknights.tconstruct.library.modifiers.TinkerHooks;
import slimeknights.tconstruct.library.modifiers.hook.ProjectileHitModifierHook;
import slimeknights.tconstruct.library.modifiers.hook.combat.DamageTakenModifierHook;
import slimeknights.tconstruct.library.modifiers.hook.combat.MeleeHitModifierHook;
import slimeknights.tconstruct.library.modifiers.util.ModifierHookMap.Builder;
import slimeknights.tconstruct.library.tools.context.EquipmentContext;
import slimeknights.tconstruct.library.tools.context.ToolAttackContext;
import slimeknights.tconstruct.library.tools.helper.ToolDamageUtil;
import slimeknights.tconstruct.library.tools.nbt.IToolStackView;
import slimeknights.tconstruct.library.tools.nbt.ModifierNBT;
import slimeknights.tconstruct.library.tools.nbt.NamespacedNBT;

import javax.annotation.Nullable;

public class FreezingModifier extends Modifier implements ProjectileHitModifierHook {
public class FreezingModifier extends Modifier implements ProjectileHitModifierHook, MeleeHitModifierHook, DamageTakenModifierHook {
@Override
protected void registerHooks(Builder hookBuilder) {
hookBuilder.addHook(this, TinkerHooks.PROJECTILE_HIT);
hookBuilder.addHook(this, TinkerHooks.MELEE_HIT, TinkerHooks.PROJECTILE_HIT, TinkerHooks.DAMAGE_TAKEN);
}
@Override
public boolean onProjectileHitEntity(ModifierNBT modifiers, NamespacedNBT persistentData, ModifierEntry modifier, Projectile projectile, EntityHitResult hit, @Nullable LivingEntity attacker, @Nullable LivingEntity target) {

/** Freezes the entity */
private void apply(int level, @Nullable Entity target) {
if (target != null && target.canFreeze()) {
// freeze them
int level = modifier.getLevel();
target.setTicksFrozen(Math.max(target.getTicksRequiredToFreeze(), target.getTicksFrozen()) + (level + 1) * 80);
target.setRemainingFireTicks(0);
}
}

@Override
public void afterMeleeHit(IToolStackView tool, ModifierEntry modifier, ToolAttackContext context, float damageDealt) {
apply(modifier.getLevel(), context.getLivingTarget());
}

@Override
public boolean onProjectileHitEntity(ModifierNBT modifiers, NamespacedNBT persistentData, ModifierEntry modifier, Projectile projectile, EntityHitResult hit, @Nullable LivingEntity attacker, @Nullable LivingEntity target) {
apply(modifier.getLevel(), target);
return false;
}

@Override
public void onDamageTaken(IToolStackView tool, ModifierEntry modifier, EquipmentContext context, EquipmentSlot slotType, DamageSource source, float amount, boolean isDirectDamage) {
// this works like vanilla, damage is capped due to the hurt immunity mechanics, so if multiple pieces apply thorns between us and vanilla, damage is capped at 4
Entity attacker = source.getEntity();
if (isDirectDamage && attacker != null && attacker.canFreeze()) {
// 15% chance of working per level, doubled bonus on shields
int level = modifier.getLevel();
if (slotType.getType() == Type.HAND) {
level *= 2;
}
if (RANDOM.nextFloat() < (level * 0.15f)) {
apply(level, attacker);
ToolDamageUtil.damageAnimated(tool, 1, context.getEntity(), slotType);
}
}
}
}

0 comments on commit 5b495bc

Please sign in to comment.