-
Notifications
You must be signed in to change notification settings - Fork 755
/
NearsightedModifier.java
45 lines (39 loc) · 2.16 KB
/
NearsightedModifier.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
package slimeknights.tconstruct.tools.modifiers.slotless;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EquipmentSlot;
import slimeknights.tconstruct.TConstruct;
import slimeknights.tconstruct.library.modifiers.Modifier;
import slimeknights.tconstruct.library.modifiers.ModifierEntry;
import slimeknights.tconstruct.library.modifiers.ModifierHooks;
import slimeknights.tconstruct.library.modifiers.hook.armor.EquipmentChangeModifierHook;
import slimeknights.tconstruct.library.module.ModuleHookMap.Builder;
import slimeknights.tconstruct.library.tools.capability.TinkerDataKeys;
import slimeknights.tconstruct.library.tools.context.EquipmentChangeContext;
import slimeknights.tconstruct.library.tools.nbt.IToolStackView;
import java.util.Arrays;
import java.util.Comparator;
public class NearsightedModifier extends Modifier implements EquipmentChangeModifierHook {
private final ResourceLocation[] SLOT_KEYS = Arrays.stream(EquipmentSlot.values())
.sorted(Comparator.comparing(EquipmentSlot::getFilterFlag))
.map(slot -> TConstruct.getResource("nearsighted_" + slot.getName()))
.toArray(ResourceLocation[]::new);
@Override
protected void registerHooks(Builder hookBuilder) {
super.registerHooks(hookBuilder);
hookBuilder.addHook(this, ModifierHooks.EQUIPMENT_CHANGE);
}
@Override
public void onEquip(IToolStackView tool, ModifierEntry modifier, EquipmentChangeContext context) {
if (!tool.isBroken()) {
ResourceLocation key = SLOT_KEYS[context.getChangedSlot().getFilterFlag()];
context.getTinkerData().ifPresent(data -> data.computeIfAbsent(TinkerDataKeys.FOV_MODIFIER).set(key, 1 + 0.05f * modifier.getLevel()));
}
}
@Override
public void onUnequip(IToolStackView tool, ModifierEntry modifier, EquipmentChangeContext context) {
if (!tool.isBroken()) {
ResourceLocation key = SLOT_KEYS[context.getChangedSlot().getFilterFlag()];
context.getTinkerData().ifPresent(data -> data.computeIfAbsent(TinkerDataKeys.FOV_MODIFIER).remove(key));
}
}
}