-
Notifications
You must be signed in to change notification settings - Fork 755
/
ToolSlotsModule.java
69 lines (58 loc) · 2.34 KB
/
ToolSlotsModule.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package slimeknights.tconstruct.library.tools.definition.module.build;
import com.google.common.collect.ImmutableMap;
import slimeknights.mantle.data.loadable.primitive.IntLoadable;
import slimeknights.mantle.data.loadable.record.RecordLoadable;
import slimeknights.tconstruct.library.module.ModuleHook;
import slimeknights.tconstruct.library.module.HookProvider;
import slimeknights.tconstruct.library.tools.SlotType;
import slimeknights.tconstruct.library.tools.context.ToolRebuildContext;
import slimeknights.tconstruct.library.tools.definition.module.ToolHooks;
import slimeknights.tconstruct.library.tools.definition.module.ToolModule;
import slimeknights.tconstruct.library.tools.nbt.ModDataNBT;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/** Adds starting modifier slots to a tool */
public record ToolSlotsModule(Map<SlotType,Integer> slots) implements VolatileDataToolHook, ToolModule {
public static final RecordLoadable<ToolSlotsModule> LOADER = RecordLoadable.create(SlotType.LOADABLE.mapWithValues(IntLoadable.FROM_ONE).requiredField("slots", ToolSlotsModule::slots), ToolSlotsModule::new);
private static final List<ModuleHook<?>> DEFAULT_HOOKS = HookProvider.<ToolSlotsModule>defaultHooks(ToolHooks.VOLATILE_DATA);
public static Builder builder() {
return new Builder();
}
@Override
public RecordLoadable<ToolSlotsModule> getLoader() {
return LOADER;
}
@Override
public List<ModuleHook<?>> getDefaultHooks() {
return DEFAULT_HOOKS;
}
@Override
public void addVolatileData(ToolRebuildContext context, ModDataNBT volatileData) {
for (Entry<SlotType,Integer> entry : slots.entrySet()) {
volatileData.addSlots(entry.getKey(), entry.getValue());
}
}
/** Logic to build a tool definition stats JSON */
public static class Builder {
private final ImmutableMap.Builder<SlotType, Integer> builder = ImmutableMap.builder();
private Builder() {}
/**
* Adds a stat to the builder
* @param slotType Slot type
* @param count Number of slots
* @return Builder instance
*/
public Builder slots(SlotType slotType, int count) {
builder.put(slotType, count);
return this;
}
/**
* Creates the instance
* @return Instance
*/
public ToolSlotsModule build() {
return new ToolSlotsModule(builder.build());
}
}
}