Skip to content

Commit

Permalink
Revamp slimestaff spilling
Browse files Browse the repository at this point in the history
Now supports AOE via expanded, and damages the tool based on number of mobs targeted
  • Loading branch information
KnightMiner committed Feb 12, 2023
1 parent 3ce879d commit 0e5d74d
Showing 1 changed file with 29 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,24 @@
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.decoration.ArmorStand;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.fluids.FluidStack;
import slimeknights.tconstruct.common.TinkerTags;
import slimeknights.tconstruct.library.modifiers.ModifierEntry;
import slimeknights.tconstruct.library.modifiers.TinkerHooks;
import slimeknights.tconstruct.library.modifiers.hook.ConditionalStatModifierHook;
import slimeknights.tconstruct.library.modifiers.hook.interaction.EntityInteractionModifierHook;
import slimeknights.tconstruct.library.modifiers.hook.interaction.InteractionSource;
import slimeknights.tconstruct.library.modifiers.spilling.SpillingFluid;
import slimeknights.tconstruct.library.modifiers.spilling.SpillingFluidManager;
import slimeknights.tconstruct.library.modifiers.util.ModifierHookMap.Builder;
import slimeknights.tconstruct.library.tools.context.ToolAttackContext;
import slimeknights.tconstruct.library.tools.definition.module.ToolModuleHooks;
import slimeknights.tconstruct.library.tools.helper.ToolDamageUtil;
import slimeknights.tconstruct.library.tools.nbt.IToolStackView;
import slimeknights.tconstruct.library.tools.stat.ToolStats;
import slimeknights.tconstruct.tools.TinkerModifiers;
import slimeknights.tconstruct.tools.modifiers.ability.armor.WettingModifier;

import javax.annotation.Nullable;
Expand Down Expand Up @@ -66,10 +71,32 @@ public InteractionResult beforeEntityUse(IToolStackView tool, ModifierEntry modi
FluidStack fluid = getFluid(tool);
if (!fluid.isEmpty() && SpillingFluidManager.INSTANCE.contains(fluid.getFluid())) {
if (!player.level.isClientSide) {
int level = modifier.getLevel();
ToolAttackContext context = new ToolAttackContext(player, player, hand, target, target instanceof LivingEntity l ? l : null, false, 1.0f, false);
spillFluid(tool, modifier.getLevel(), context, fluid);
spillFluid(tool, level, context, fluid);

// expanded logic
int numTargets = 1;
int expanded = tool.getModifierLevel(TinkerModifiers.expanded.get());
if (expanded > 0 && !fluid.isEmpty()) {
int rangeSq = expanded * expanded;
for (Entity aoeTarget : player.level.getEntitiesOfClass(Entity.class, target.getBoundingBox().inflate(expanded, 0.25, expanded))) {
if (aoeTarget != player && aoeTarget != target && !(aoeTarget instanceof ArmorStand stand && stand.isMarker()) && target.distanceToSqr(aoeTarget) < rangeSq) {
numTargets++;
context = new ToolAttackContext(player, player, hand, aoeTarget, aoeTarget instanceof LivingEntity l ? l : null, false, 1.0f, true);
spillFluid(tool, level, context, fluid);
if (fluid.isEmpty()) {
break;
}
}
}
}

// damage the tool, we charge for the multiplier and for the number of targets hit
ToolDamageUtil.damageAnimated(tool, numTargets * level, player, hand);
}
player.getCooldowns().addCooldown(tool.getItem(), 20);
// cooldown based on attack speed/draw speed. both are on the same scale and default to 1, we don't care which one the tool uses
player.getCooldowns().addCooldown(tool.getItem(), (int)(20 / (tool.getStats().get(ToolStats.ATTACK_SPEED) * ConditionalStatModifierHook.getModifiedStat(tool, player, ToolStats.DRAW_SPEED))));
return InteractionResult.SUCCESS;
}
}
Expand Down

0 comments on commit 0e5d74d

Please sign in to comment.