-
Notifications
You must be signed in to change notification settings - Fork 755
/
AmbidextrousModifier.java
50 lines (44 loc) · 2.41 KB
/
AmbidextrousModifier.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package slimeknights.tconstruct.tools.modifiers.ability.armor;
import net.minecraft.world.entity.EquipmentSlot;
import slimeknights.mantle.util.OffhandCooldownTracker;
import slimeknights.tconstruct.library.modifiers.ModifierEntry;
import slimeknights.tconstruct.library.modifiers.ModifierHooks;
import slimeknights.tconstruct.library.modifiers.hook.armor.EquipmentChangeModifierHook;
import slimeknights.tconstruct.library.modifiers.hook.build.ToolStatsModifierHook;
import slimeknights.tconstruct.library.modifiers.modules.behavior.ShowOffhandModule;
import slimeknights.tconstruct.library.module.ModuleHookMap.Builder;
import slimeknights.tconstruct.library.tools.context.EquipmentChangeContext;
import slimeknights.tconstruct.library.tools.nbt.IToolContext;
import slimeknights.tconstruct.library.tools.nbt.IToolStackView;
import slimeknights.tconstruct.library.tools.stat.ModifierStatsBuilder;
import slimeknights.tconstruct.library.tools.stat.ToolStats;
import slimeknights.tconstruct.tools.modifiers.ability.tool.OffhandAttackModifier;
public class AmbidextrousModifier extends OffhandAttackModifier implements EquipmentChangeModifierHook, ToolStatsModifierHook {
@Override
protected void registerHooks(Builder hookBuilder) {
super.registerHooks(hookBuilder);
hookBuilder.addHook(this, ModifierHooks.EQUIPMENT_CHANGE, ModifierHooks.TOOL_STATS);
hookBuilder.addModule(ShowOffhandModule.DISALLOW_BROKEN);
}
@Override
public void addToolStats(IToolContext context, ModifierEntry modifier, ModifierStatsBuilder builder) {
// main hand has 4.0 attack speed, so make the offhand have that too
ToolStats.ATTACK_SPEED.add(builder, 4.0 - context.getDefinitionData().getBaseStat(ToolStats.ATTACK_SPEED));
}
@Override
public boolean shouldDisplay(boolean advanced) {
return true;
}
@Override
public void onEquip(IToolStackView tool, ModifierEntry modifier, EquipmentChangeContext context) {
if (!tool.isBroken() && context.getChangedSlot() == EquipmentSlot.CHEST) {
context.getEntity().getCapability(OffhandCooldownTracker.CAPABILITY).ifPresent(cap -> cap.setEnabled(true));
}
}
@Override
public void onUnequip(IToolStackView tool, ModifierEntry modifier, EquipmentChangeContext context) {
if (!tool.isBroken() && context.getChangedSlot() == EquipmentSlot.CHEST) {
context.getEntity().getCapability(OffhandCooldownTracker.CAPABILITY).ifPresent(cap -> cap.setEnabled(false));
}
}
}