Skip to content

Commit 96e6d05

Browse files
committed
Move machine upgrades to a data map
1 parent 491045a commit 96e6d05

File tree

9 files changed

+65
-55
lines changed

9 files changed

+65
-55
lines changed

docs/ADDING_MACHINES.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ MIMachineEvents.addEbfTiers(event => {
1818
```
1919

2020
## Adding electric machine upgrades
21-
You can add electric machine upgrades using KubeJS.
22-
This will allow them to be used in all the electric machines to increase the maximum EU that the machine can handle.
23-
24-
Example:
25-
```js
26-
MIMachineEvents.registerUpgrades(event => {
27-
// id of the upgrade item, number of added EU per upgrade
28-
event.register("minecraft:diamond", 42);
29-
});
21+
You can add electric machine upgrades using the `modern_industrialization:machine_upgrades` item data map.
22+
For example, in `data/modern_industrialization/data_maps/item/machine_upgrades.json`:
23+
```json
24+
{
25+
"values": {
26+
"minecraft:diamond": {
27+
"extraMaxEu": 42
28+
}
29+
}
30+
}
3031
```
3132

3233
## Registering a recipe type
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"values": {
3+
"modern_industrialization:advanced_upgrade": {
4+
"extraMaxEu": 8
5+
},
6+
"modern_industrialization:basic_upgrade": {
7+
"extraMaxEu": 2
8+
},
9+
"modern_industrialization:highly_advanced_upgrade": {
10+
"extraMaxEu": 128
11+
},
12+
"modern_industrialization:quantum_upgrade": {
13+
"extraMaxEu": 999999999
14+
},
15+
"modern_industrialization:turbo_upgrade": {
16+
"extraMaxEu": 32
17+
}
18+
}
19+
}

src/main/java/aztech/modern_industrialization/MI.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ public MI(IEventBus modBus, Dist dist) {
199199
modBus.addListener(RegisterDataMapTypesEvent.class, event -> {
200200
event.register(MIDataMaps.FLUID_FUELS);
201201
event.register(MIDataMaps.ITEM_PIPE_UPGRADES);
202+
event.register(MIDataMaps.MACHINE_UPGRADES);
202203
});
203204

204205
if (MIConfig.loadAe2Compat()) {

src/main/java/aztech/modern_industrialization/api/datamaps/MIDataMaps.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ public final class MIDataMaps {
4545
.synced(ItemPipeUpgrade.CODEC, true)
4646
.build();
4747

48+
/**
49+
* Items that can be added to electric machines, to increase the maximum EU/t they can support.
50+
*/
51+
public static final DataMapType<Item, MachineUpgrade> MACHINE_UPGRADES = DataMapType
52+
.builder(
53+
MI.id("machine_upgrades"), Registries.ITEM, MachineUpgrade.CODEC)
54+
.synced(MachineUpgrade.CODEC, true)
55+
.build();
56+
4857
private MIDataMaps() {
4958
}
5059
}
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@
2121
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2222
* SOFTWARE.
2323
*/
24-
package aztech.modern_industrialization.compat.kubejs.machine;
24+
package aztech.modern_industrialization.api.datamaps;
2525

26-
import aztech.modern_industrialization.machines.components.UpgradeComponent;
27-
import dev.latvian.mods.kubejs.event.KubeEvent;
28-
import net.minecraft.resources.ResourceLocation;
26+
import com.mojang.serialization.Codec;
27+
import com.mojang.serialization.codecs.RecordCodecBuilder;
28+
import net.minecraft.util.ExtraCodecs;
2929

30-
public class RegisterUpgradesEventJS implements KubeEvent {
31-
public static void register(ResourceLocation itemId, long extraEu) {
32-
UpgradeComponent.registerUpgrade(itemId, extraEu);
33-
}
30+
public record MachineUpgrade(int extraMaxEu) {
31+
public static final Codec<MachineUpgrade> CODEC = RecordCodecBuilder.create(
32+
instance -> instance
33+
.group(ExtraCodecs.POSITIVE_INT.fieldOf("extraMaxEu").forGetter(MachineUpgrade::extraMaxEu))
34+
.apply(instance, MachineUpgrade::new));
3435
}

src/main/java/aztech/modern_industrialization/compat/kubejs/LoadedKubeJSProxy.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,6 @@ public void fireRegisterMachinesEvent() {
6969
MIMachineKubeJSEvents.REGISTER_MACHINES.post(new RegisterMachinesEventJS());
7070
}
7171

72-
@Override
73-
public void fireRegisterUpgradesEvent() {
74-
MIMachineKubeJSEvents.REGISTER_UPGRADES.post(new RegisterUpgradesEventJS());
75-
}
76-
7772
@Override
7873
public void fireAddMultiblockSlotsEvent(String category, SlotPositions.Builder itemInputs, SlotPositions.Builder itemOutputs,
7974
SlotPositions.Builder fluidInputs, SlotPositions.Builder fluidOutputs) {

src/main/java/aztech/modern_industrialization/compat/kubejs/machine/MIMachineKubeJSEvents.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ public interface MIMachineKubeJSEvents {
3434
EventHandler REGISTER_RECIPE_TYPES = EVENT_GROUP.startup("registerRecipeTypes", () -> RegisterRecipeTypesEventJS.class);
3535
EventHandler REGISTER_CASINGS = EVENT_GROUP.startup("registerCasings", () -> RegisterCasingsEventJS.class);
3636
EventHandler REGISTER_MACHINES = EVENT_GROUP.startup("registerMachines", () -> RegisterMachinesEventJS.class);
37-
EventHandler REGISTER_UPGRADES = EVENT_GROUP.startup("registerUpgrades", () -> RegisterUpgradesEventJS.class);
3837
TargetedEventHandler<String> ADD_MULTIBLOCK_SLOTS = EVENT_GROUP.startup("addMultiblockSlots", () -> AddMultiblockSlotsEventJS.class)
3938
.requiredTarget(EventTargetType.STRING);
4039
EventHandler ADD_EBF_TIERS = EVENT_GROUP.startup("addEbfTiers", () -> AddEbfTiersEventJS.class);

src/main/java/aztech/modern_industrialization/datagen/datamap/MIDataMapProvider.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import aztech.modern_industrialization.api.datamaps.FluidFuel;
3030
import aztech.modern_industrialization.api.datamaps.ItemPipeUpgrade;
3131
import aztech.modern_industrialization.api.datamaps.MIDataMaps;
32+
import aztech.modern_industrialization.api.datamaps.MachineUpgrade;
3233
import aztech.modern_industrialization.definition.FluidDefinition;
3334
import aztech.modern_industrialization.definition.ItemDefinition;
3435
import java.util.concurrent.CompletableFuture;
@@ -51,6 +52,7 @@ protected void gather() {
5152

5253
gatherFluidFuels();
5354
gatherItemPipeUpgrades();
55+
gatherMachineUpgrades();
5456
}
5557

5658
private void gatherFurnaceFuels() {
@@ -105,4 +107,16 @@ private void gatherItemPipeUpgrades() {
105107
private void addItemPipeUpgrade(ItemDefinition<?> itemDefinition, int maxExtractedItems) {
106108
builder(MIDataMaps.ITEM_PIPE_UPGRADES).add(itemDefinition.getId(), new ItemPipeUpgrade(maxExtractedItems), false);
107109
}
110+
111+
private void gatherMachineUpgrades() {
112+
addMachineUpgrade(MIItem.BASIC_UPGRADE, 2);
113+
addMachineUpgrade(MIItem.ADVANCED_UPGRADE, 8);
114+
addMachineUpgrade(MIItem.TURBO_UPGRADE, 32);
115+
addMachineUpgrade(MIItem.HIGHLY_ADVANCED_UPGRADE, 128);
116+
addMachineUpgrade(MIItem.QUANTUM_UPGRADE, 999999999);
117+
}
118+
119+
private void addMachineUpgrade(ItemDefinition<?> itemDefinition, int extraMaxEu) {
120+
builder(MIDataMaps.MACHINE_UPGRADES).add(itemDefinition.getId(), new MachineUpgrade(extraMaxEu), false);
121+
}
108122
}

src/main/java/aztech/modern_industrialization/machines/components/UpgradeComponent.java

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,12 @@
2323
*/
2424
package aztech.modern_industrialization.machines.components;
2525

26-
import aztech.modern_industrialization.MIItem;
26+
import aztech.modern_industrialization.api.datamaps.MIDataMaps;
2727
import aztech.modern_industrialization.compat.kubejs.KubeJSProxy;
2828
import aztech.modern_industrialization.machines.IComponent;
2929
import aztech.modern_industrialization.machines.MachineBlockEntity;
30-
import java.util.HashMap;
31-
import java.util.Map;
32-
import java.util.Objects;
3330
import net.minecraft.core.HolderLookup;
34-
import net.minecraft.core.registries.BuiltInRegistries;
3531
import net.minecraft.nbt.CompoundTag;
36-
import net.minecraft.resources.ResourceLocation;
3732
import net.minecraft.world.InteractionHand;
3833
import net.minecraft.world.ItemInteractionResult;
3934
import net.minecraft.world.entity.player.Player;
@@ -43,37 +38,13 @@
4338
public class UpgradeComponent implements IComponent.ServerOnly, DropableComponent {
4439

4540
private ItemStack itemStack = ItemStack.EMPTY;
46-
private final static Map<ResourceLocation, Long> UPGRADES = new HashMap<>();
4741

4842
public static long getExtraEu(ItemLike item) {
49-
return UPGRADES.getOrDefault(BuiltInRegistries.ITEM.getKey(item.asItem()), 0L);
50-
}
51-
52-
public static void registerUpgrade(ItemLike item, long extraEu) {
53-
registerUpgrade(BuiltInRegistries.ITEM.getKey(item.asItem()), extraEu);
54-
}
55-
56-
public static void registerUpgrade(ResourceLocation itemId, long extraEu) {
57-
Objects.requireNonNull(itemId);
58-
59-
if (extraEu <= 0) {
60-
throw new IllegalArgumentException("extraEu must be positive");
61-
}
62-
63-
if (UPGRADES.containsKey(itemId)) {
64-
throw new IllegalArgumentException("Upgrade already registered:" + itemId);
65-
}
66-
67-
UPGRADES.put(itemId, extraEu);
43+
var data = item.asItem().builtInRegistryHolder().getData(MIDataMaps.MACHINE_UPGRADES);
44+
return data == null ? 0 : data.extraMaxEu();
6845
}
6946

7047
static {
71-
registerUpgrade(MIItem.BASIC_UPGRADE.asItem(), 2L);
72-
registerUpgrade(MIItem.ADVANCED_UPGRADE.asItem(), 8L);
73-
registerUpgrade(MIItem.TURBO_UPGRADE.asItem(), 32L);
74-
registerUpgrade(MIItem.HIGHLY_ADVANCED_UPGRADE.asItem(), 128L);
75-
registerUpgrade(MIItem.QUANTUM_UPGRADE.asItem(), 999999999L);
76-
7748
KubeJSProxy.instance.fireRegisterUpgradesEvent();
7849
}
7950

0 commit comments

Comments
 (0)