Implemented Unit Upgraders. Thanks to Ayutac.
* Started working on upgraders * debug so game doesn't crash anymore * orientation is saved now * duplication bug removed * added model files, lang entries and recipes+toasts
This commit is contained in:
parent
d339f61d4d
commit
0bcd2bec03
20 changed files with 410 additions and 8 deletions
|
@ -56,6 +56,7 @@ import techreborn.items.tool.vanilla.*;
|
||||||
import techreborn.utils.InitUtils;
|
import techreborn.utils.InitUtils;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author drcrazy
|
* @author drcrazy
|
||||||
|
@ -83,6 +84,7 @@ public class ModRegistry {
|
||||||
});
|
});
|
||||||
Arrays.stream(SolarPanels.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
Arrays.stream(SolarPanels.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
||||||
Arrays.stream(StorageUnit.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
Arrays.stream(StorageUnit.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
||||||
|
Arrays.stream(StorageUnit.values()).map(StorageUnit::getUpgrader).filter(Optional::isPresent).forEach(value -> RebornRegistry.registerItem(value.get()));
|
||||||
Arrays.stream(TankUnit.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
Arrays.stream(TankUnit.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
||||||
Arrays.stream(Cables.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
Arrays.stream(Cables.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
||||||
Arrays.stream(Machine.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
Arrays.stream(Machine.values()).forEach(value -> RebornRegistry.registerBlock(value.block, itemGroup));
|
||||||
|
|
|
@ -89,6 +89,7 @@ import techreborn.entities.EntityNukePrimed;
|
||||||
import techreborn.events.ModRegistry;
|
import techreborn.events.ModRegistry;
|
||||||
import techreborn.items.DynamicCellItem;
|
import techreborn.items.DynamicCellItem;
|
||||||
import techreborn.items.UpgradeItem;
|
import techreborn.items.UpgradeItem;
|
||||||
|
import techreborn.items.UpgraderItem;
|
||||||
import techreborn.items.armor.QuantumSuitItem;
|
import techreborn.items.armor.QuantumSuitItem;
|
||||||
import techreborn.utils.InitUtils;
|
import techreborn.utils.InitUtils;
|
||||||
import techreborn.world.OreDistribution;
|
import techreborn.world.OreDistribution;
|
||||||
|
@ -301,22 +302,23 @@ public class TRContent {
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum StorageUnit implements ItemConvertible {
|
public enum StorageUnit implements ItemConvertible {
|
||||||
BUFFER(1),
|
BUFFER(1, false),
|
||||||
CRUDE(TechRebornConfig.crudeStorageUnitMaxStorage),
|
CRUDE(TechRebornConfig.crudeStorageUnitMaxStorage, true),
|
||||||
BASIC(TechRebornConfig.basicStorageUnitMaxStorage),
|
BASIC(TechRebornConfig.basicStorageUnitMaxStorage, true),
|
||||||
ADVANCED(TechRebornConfig.advancedStorageUnitMaxStorage),
|
ADVANCED(TechRebornConfig.advancedStorageUnitMaxStorage, true),
|
||||||
INDUSTRIAL(TechRebornConfig.industrialStorageUnitMaxStorage),
|
INDUSTRIAL(TechRebornConfig.industrialStorageUnitMaxStorage, true),
|
||||||
QUANTUM(TechRebornConfig.quantumStorageUnitMaxStorage),
|
QUANTUM(TechRebornConfig.quantumStorageUnitMaxStorage, false),
|
||||||
CREATIVE(Integer.MAX_VALUE);
|
CREATIVE(Integer.MAX_VALUE, false);
|
||||||
|
|
||||||
public final String name;
|
public final String name;
|
||||||
public final Block block;
|
public final Block block;
|
||||||
|
public final Item upgrader;
|
||||||
|
|
||||||
// How many items it can hold
|
// How many items it can hold
|
||||||
public int capacity;
|
public int capacity;
|
||||||
|
|
||||||
|
|
||||||
StorageUnit(int capacity) {
|
StorageUnit(int capacity, boolean upgradable) {
|
||||||
name = this.toString().toLowerCase(Locale.ROOT);
|
name = this.toString().toLowerCase(Locale.ROOT);
|
||||||
block = new StorageUnitBlock(this);
|
block = new StorageUnitBlock(this);
|
||||||
this.capacity = capacity;
|
this.capacity = capacity;
|
||||||
|
@ -325,12 +327,38 @@ public class TRContent {
|
||||||
InitUtils.setup(block, "storage_buffer");
|
InitUtils.setup(block, "storage_buffer");
|
||||||
else
|
else
|
||||||
InitUtils.setup(block, name + "_storage_unit");
|
InitUtils.setup(block, name + "_storage_unit");
|
||||||
|
if (upgradable) {
|
||||||
|
if (name.equals("buffer"))
|
||||||
|
upgrader = InitUtils.setup(new UpgraderItem(), "storage_buffer_upgrader");
|
||||||
|
else
|
||||||
|
upgrader = InitUtils.setup(new UpgraderItem(), name + "_unit_upgrader");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
upgrader = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block asBlock() {
|
||||||
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item asItem() {
|
public Item asItem() {
|
||||||
return block.asItem();
|
return block.asItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<Item> getUpgrader() {
|
||||||
|
return Optional.ofNullable(upgrader);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Optional<StorageUnit> getUpgradableFor(UpgraderItem item) {
|
||||||
|
if (item == null)
|
||||||
|
return Optional.empty();
|
||||||
|
for (StorageUnit unit : StorageUnit.values()) {
|
||||||
|
if (item.equals(unit.getUpgrader().orElse(null)))
|
||||||
|
return Optional.of(unit);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum TankUnit implements ItemConvertible {
|
public enum TankUnit implements ItemConvertible {
|
||||||
|
@ -355,10 +383,33 @@ public class TRContent {
|
||||||
InitUtils.setup(block, name + "_tank_unit");
|
InitUtils.setup(block, name + "_tank_unit");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Block asBlock() {
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item asItem() {
|
public Item asItem() {
|
||||||
return block.asItem();
|
return block.asItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<Item> getUpgrader() {
|
||||||
|
try {
|
||||||
|
return StorageUnit.valueOf(name()).getUpgrader();
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Optional<TankUnit> getUpgradableFor(UpgraderItem item) {
|
||||||
|
if (item == null)
|
||||||
|
return Optional.empty();
|
||||||
|
for (TankUnit unit : TankUnit.values()) {
|
||||||
|
if (item.equals(unit.getUpgrader().orElse(null)))
|
||||||
|
return Optional.of(unit);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Cables implements ItemConvertible {
|
public enum Cables implements ItemConvertible {
|
||||||
|
|
48
src/main/java/techreborn/items/UpgraderItem.java
Normal file
48
src/main/java/techreborn/items/UpgraderItem.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package techreborn.items;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemUsageContext;
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
|
import net.minecraft.util.ActionResult;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.registry.Registry;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import techreborn.TechReborn;
|
||||||
|
import techreborn.init.TRContent.StorageUnit;
|
||||||
|
import techreborn.init.TRContent.TankUnit;
|
||||||
|
|
||||||
|
public class UpgraderItem extends Item {
|
||||||
|
|
||||||
|
public UpgraderItem() {
|
||||||
|
super(new Item.Settings().group(TechReborn.ITEMGROUP));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResult useOnBlock(ItemUsageContext context) {
|
||||||
|
World world = context.getWorld();
|
||||||
|
BlockPos blockPos = context.getBlockPos();
|
||||||
|
BlockEntity oldBlockEntity = world.getBlockEntity(blockPos);
|
||||||
|
BlockState oldBlockState = world.getBlockState(blockPos);
|
||||||
|
BlockState newBlockState = null;
|
||||||
|
// if no storage upgrader, the isOf compares with null and returns false
|
||||||
|
if (oldBlockState.isOf(StorageUnit.getUpgradableFor(this).map(StorageUnit::asBlock).orElse(null))) {
|
||||||
|
// upgradable is now guaranteed to be present, or something is seriously wrong
|
||||||
|
// we want to get the next unit in the enum, hence ordinal()+1
|
||||||
|
newBlockState = StorageUnit.values()[StorageUnit.getUpgradableFor(this).orElseThrow().ordinal()+1].asBlock().getStateWithProperties(oldBlockState);
|
||||||
|
}
|
||||||
|
// same for the tank
|
||||||
|
else if (oldBlockState.isOf(TankUnit.getUpgradableFor(this).map(TankUnit::asBlock).orElse(null))) {
|
||||||
|
newBlockState = TankUnit.values()[TankUnit.getUpgradableFor(this).orElseThrow().ordinal()+1].asBlock().getDefaultState();
|
||||||
|
}
|
||||||
|
if (newBlockState == null)
|
||||||
|
return ActionResult.PASS;
|
||||||
|
NbtCompound data = oldBlockEntity.createNbt();
|
||||||
|
world.getBlockEntity(blockPos).readNbt(new NbtCompound());
|
||||||
|
world.setBlockState(blockPos, newBlockState);
|
||||||
|
world.getBlockEntity(blockPos).readNbt(data);
|
||||||
|
world.getBlockEntity(blockPos).readNbt(data);
|
||||||
|
return ActionResult.SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
|
@ -653,6 +653,10 @@
|
||||||
"item.techreborn.compressed_plantball": "Compressed Plantball",
|
"item.techreborn.compressed_plantball": "Compressed Plantball",
|
||||||
"item.techreborn.sponge_piece": "Piece of Sponge",
|
"item.techreborn.sponge_piece": "Piece of Sponge",
|
||||||
"item.techreborn.synthetic_redstone_crystal": "Synthetic Redstone Crystal",
|
"item.techreborn.synthetic_redstone_crystal": "Synthetic Redstone Crystal",
|
||||||
|
"item.techreborn.crude_unit_upgrader": "Crude Unit Upgrader",
|
||||||
|
"item.techreborn.basic_unit_upgrader": "Basic Unit Upgrader",
|
||||||
|
"item.techreborn.advanced_unit_upgrader": "Advanced Unit Upgrader",
|
||||||
|
"item.techreborn.industrial_unit_upgrader": "Industrial Unit Upgrader",
|
||||||
|
|
||||||
"_comment14": "Items-Armor",
|
"_comment14": "Items-Armor",
|
||||||
"item.techreborn.cloaking_device": "Cloaking Device",
|
"item.techreborn.cloaking_device": "Cloaking Device",
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "techreborn:item/part/advanced_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "techreborn:item/part/basic_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "techreborn:item/part/crude_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "techreborn:item/part/industrial_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 425 B |
Binary file not shown.
After Width: | Height: | Size: 424 B |
Binary file not shown.
After Width: | Height: | Size: 434 B |
Binary file not shown.
After Width: | Height: | Size: 429 B |
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"techreborn:crafting_table/unit/upgrader/advanced_unit_upgrader"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_advanced_storage_unit": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": ["techreborn:advanced_storage_unit"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "techreborn:crafting_table/unit/upgrader/advanced_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_advanced_storage_unit",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"techreborn:crafting_table/unit/upgrader/basic_unit_upgrader"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_basic_storage_unit": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": ["techreborn:basic_storage_unit"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_digital_display": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": ["techreborn:digital_display"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "techreborn:crafting_table/unit/upgrader/basic_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_basic_storage_unit",
|
||||||
|
"has_digital_display",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"techreborn:crafting_table/unit/upgrader/crude_unit_upgrader"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_crude_storage_unit": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": ["techreborn:crude_storage_unit"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_basic_display": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": ["techreborn:basic_display"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "techreborn:crafting_table/unit/upgrader/crude_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_crude_storage_unit",
|
||||||
|
"has_basic_display",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"techreborn:crafting_table/unit/upgrader/industrial_unit_upgrader"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_industrial_storage_unit": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": ["techreborn:industrial_storage_unit"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_data_storage_chip": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": ["techreborn:data_storage_chip"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "techreborn:crafting_table/unit/upgrader/industrial_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_industrial_storage_unit",
|
||||||
|
"has_data_storage_chip",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"PPP",
|
||||||
|
"XB ",
|
||||||
|
"CDC"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"P": {
|
||||||
|
"tag": "c:steel_plates"
|
||||||
|
},
|
||||||
|
"B": {
|
||||||
|
"item": "techreborn:industrial_machine_frame"
|
||||||
|
},
|
||||||
|
"D": {
|
||||||
|
"item": "techreborn:digital_display"
|
||||||
|
},
|
||||||
|
"X": {
|
||||||
|
"item": "techreborn:advanced_storage_unit"
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"item": "techreborn:industrial_circuit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "techreborn:advanced_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"PPP",
|
||||||
|
"XB ",
|
||||||
|
"CDC"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"P": {
|
||||||
|
"tag": "c:electrum_plates"
|
||||||
|
},
|
||||||
|
"B": {
|
||||||
|
"item": "techreborn:advanced_machine_frame"
|
||||||
|
},
|
||||||
|
"D": {
|
||||||
|
"item": "techreborn:digital_display"
|
||||||
|
},
|
||||||
|
"X": {
|
||||||
|
"item": "techreborn:basic_storage_unit"
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"item": "techreborn:advanced_circuit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "techreborn:basic_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"PPP",
|
||||||
|
"XB ",
|
||||||
|
"CDC"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"X": {
|
||||||
|
"item": "techreborn:crude_storage_unit"
|
||||||
|
},
|
||||||
|
"B": {
|
||||||
|
"item": "techreborn:basic_machine_frame"
|
||||||
|
},
|
||||||
|
"P": {
|
||||||
|
"tag": "c:refined_iron_plates"
|
||||||
|
},
|
||||||
|
"D": {
|
||||||
|
"item": "techreborn:basic_display"
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"item": "techreborn:electronic_circuit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "techreborn:crude_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"PPP",
|
||||||
|
"XB ",
|
||||||
|
"CDC"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"P": {
|
||||||
|
"tag": "c:tungsten_plates"
|
||||||
|
},
|
||||||
|
"B": {
|
||||||
|
"item": "techreborn:industrial_machine_frame"
|
||||||
|
},
|
||||||
|
"X": {
|
||||||
|
"item": "techreborn:industrial_storage_unit"
|
||||||
|
},
|
||||||
|
"D": {
|
||||||
|
"item": "techreborn:digital_display"
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"item": "techreborn:data_storage_chip"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "techreborn:industrial_unit_upgrader"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue