From 6ff3d844f23ff047b4fd414acdfadcbf6eea8de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 5 Apr 2021 01:07:24 +0200 Subject: [PATCH] Kicked out a bunch of purely intermediate crafting items. --- .../java/li/cil/oc2/common/Constants.java | 6 +- src/main/java/li/cil/oc2/common/Main.java | 5 +- .../common/customrecipes/CustomRecipes.java | 20 -- .../oc2/common/customrecipes/HDDRecipe.java | 109 ---------- .../customrecipes/LinuxFlashRecipe.java | 94 --------- .../common/customrecipes/MemoryRecipe.java | 101 --------- .../java/li/cil/oc2/common/item/Items.java | 8 +- .../item/crafting/RecipeSerializers.java | 19 ++ .../common/item/crafting/ShapedNbtRecipe.java | 57 +++++ .../item/crafting/ShapelessNbtRecipe.java | 57 +++++ .../common/item/crafting/package-info.java | 7 + .../java/li/cil/oc2/data/CraftingRecipes.java | 194 ----------------- .../java/li/cil/oc2/data/DataGenerators.java | 2 +- .../cil/oc2/data/ModBlockStateProvider.java | 4 +- .../li/cil/oc2/data/ModItemModelProvider.java | 3 + .../li/cil/oc2/data/ModRecipesProvider.java | 198 ++++++++++++++++++ src/main/resources/assets/oc2/lang/en_us.json | 6 +- .../models/item/arithmetic_logic_unit.json | 6 - .../item/{pcb.json => circuit_board.json} | 2 +- .../assets/oc2/models/item/control_unit.json | 6 - .../assets/oc2/models/item/disk_platter.json | 6 - .../assets/oc2/models/item/microchip.json | 6 - .../oc2/models/item/network_connector.json | 4 +- .../assets/oc2/models/item/transistor.json | 2 +- .../textures/item/arithmetic_logic_unit.png | Bin 289 -> 0 bytes .../oc2/textures/item/circuit_board.png | Bin 0 -> 2087 bytes .../assets/oc2/textures/item/control_unit.png | Bin 303 -> 0 bytes .../assets/oc2/textures/item/disk_platter.png | Bin 208 -> 0 bytes .../assets/oc2/textures/item/memory1.png | Bin 300 -> 2038 bytes .../assets/oc2/textures/item/memory2.png | Bin 322 -> 2039 bytes .../assets/oc2/textures/item/memory3.png | Bin 281 -> 1992 bytes .../assets/oc2/textures/item/microchip.png | Bin 265 -> 0 bytes .../textures/item/network_interface_card.png | Bin 351 -> 1944 bytes .../assets/oc2/textures/item/pcb.png | Bin 331 -> 0 bytes .../textures/item/redstone_interface_card.png | Bin 394 -> 1980 bytes .../assets/oc2/textures/item/transistor.png | Bin 221 -> 1862 bytes .../recipes/oc2.common/bus_cable.json | 32 +++ .../recipes/oc2.common/bus_interface.json | 32 +++ .../recipes/oc2.common/charger.json | 32 +++ .../recipes/oc2.common/circuit_board.json | 32 +++ .../recipes/oc2.common/computer.json | 43 ++++ .../recipes/oc2.common/disk_drive.json | 32 +++ .../recipes/oc2.common/network_cable.json | 32 +++ .../recipes/oc2.common/network_connector.json | 32 +++ .../recipes/oc2.common/network_hub.json | 32 +++ .../oc2.common/network_interface_card.json | 43 ++++ .../oc2.common/redstone_interface.json | 32 +++ .../oc2.common/redstone_interface_card.json | 43 ++++ .../recipes/oc2.common/transistor.json | 32 +++ .../recipes/oc2.common/wrench.json | 32 +++ .../oc2/recipes/arithmetic_logic_unit.json | 25 --- .../resources/data/oc2/recipes/bus_cable.json | 19 +- .../data/oc2/recipes/bus_interface.json | 17 +- .../resources/data/oc2/recipes/charger.json | 28 +++ .../data/oc2/recipes/circuit_board.json | 18 ++ .../resources/data/oc2/recipes/computer.json | 23 +- .../data/oc2/recipes/control_unit.json | 25 --- .../data/oc2/recipes/disk_drive.json | 28 +++ .../data/oc2/recipes/disk_platter.json | 16 -- .../resources/data/oc2/recipes/microchip.json | 22 -- .../data/oc2/recipes/network_cable.json | 13 +- .../data/oc2/recipes/network_connector.json | 18 +- .../data/oc2/recipes/network_hub.json | 18 +- .../oc2/recipes/network_interface_card.json | 22 +- src/main/resources/data/oc2/recipes/pcb.json | 27 --- .../data/oc2/recipes/redstone_interface.json | 20 +- .../oc2/recipes/redstone_interface_card.json | 22 +- .../data/oc2/recipes/transistor.json | 14 +- .../resources/data/oc2/recipes/wrench.json | 8 +- 69 files changed, 1011 insertions(+), 775 deletions(-) delete mode 100644 src/main/java/li/cil/oc2/common/customrecipes/CustomRecipes.java delete mode 100644 src/main/java/li/cil/oc2/common/customrecipes/HDDRecipe.java delete mode 100644 src/main/java/li/cil/oc2/common/customrecipes/LinuxFlashRecipe.java delete mode 100644 src/main/java/li/cil/oc2/common/customrecipes/MemoryRecipe.java create mode 100644 src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java create mode 100644 src/main/java/li/cil/oc2/common/item/crafting/ShapedNbtRecipe.java create mode 100644 src/main/java/li/cil/oc2/common/item/crafting/ShapelessNbtRecipe.java create mode 100644 src/main/java/li/cil/oc2/common/item/crafting/package-info.java delete mode 100644 src/main/java/li/cil/oc2/data/CraftingRecipes.java create mode 100644 src/main/java/li/cil/oc2/data/ModRecipesProvider.java delete mode 100644 src/main/resources/assets/oc2/models/item/arithmetic_logic_unit.json rename src/main/resources/assets/oc2/models/item/{pcb.json => circuit_board.json} (61%) delete mode 100644 src/main/resources/assets/oc2/models/item/control_unit.json delete mode 100644 src/main/resources/assets/oc2/models/item/disk_platter.json delete mode 100644 src/main/resources/assets/oc2/models/item/microchip.json delete mode 100644 src/main/resources/assets/oc2/textures/item/arithmetic_logic_unit.png create mode 100644 src/main/resources/assets/oc2/textures/item/circuit_board.png delete mode 100644 src/main/resources/assets/oc2/textures/item/control_unit.png delete mode 100644 src/main/resources/assets/oc2/textures/item/disk_platter.png delete mode 100644 src/main/resources/assets/oc2/textures/item/microchip.png delete mode 100644 src/main/resources/assets/oc2/textures/item/pcb.png create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/bus_cable.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/bus_interface.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/charger.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/circuit_board.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/computer.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/disk_drive.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/network_cable.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/network_connector.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/network_hub.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/network_interface_card.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/redstone_interface.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/redstone_interface_card.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/transistor.json create mode 100644 src/main/resources/data/oc2/advancements/recipes/oc2.common/wrench.json delete mode 100644 src/main/resources/data/oc2/recipes/arithmetic_logic_unit.json create mode 100644 src/main/resources/data/oc2/recipes/charger.json create mode 100644 src/main/resources/data/oc2/recipes/circuit_board.json delete mode 100644 src/main/resources/data/oc2/recipes/control_unit.json create mode 100644 src/main/resources/data/oc2/recipes/disk_drive.json delete mode 100644 src/main/resources/data/oc2/recipes/disk_platter.json delete mode 100644 src/main/resources/data/oc2/recipes/microchip.json delete mode 100644 src/main/resources/data/oc2/recipes/pcb.json diff --git a/src/main/java/li/cil/oc2/common/Constants.java b/src/main/java/li/cil/oc2/common/Constants.java index 58e36533..6b70dac4 100644 --- a/src/main/java/li/cil/oc2/common/Constants.java +++ b/src/main/java/li/cil/oc2/common/Constants.java @@ -51,12 +51,8 @@ public final class Constants { public static final String INVENTORY_OPERATIONS_MODULE_ITEM_NAME = "inventory_operations_module"; public static final String BLOCK_OPERATIONS_MODULE_ITEM_NAME = "block_operations_module"; - public static final String CONTROL_UNIT_ITEM_NAME = "control_unit"; - public static final String ARITHMETIC_LOGIC_UNIT_ITEM_NAME = "arithmetic_logic_unit"; - public static final String MICROCHIP_ITEM_NAME = "microchip"; - public static final String DISK_PLATTER_ITEM_NAME = "disk_platter"; public static final String TRANSISTOR_ITEM_NAME = "transistor"; - public static final String PCB_ITEM_NAME = "pcb"; + public static final String CIRCUIT_BOARD_ITEM_NAME = "circuit_board"; /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/Main.java b/src/main/java/li/cil/oc2/common/Main.java index a19bfd63..221f0e49 100644 --- a/src/main/java/li/cil/oc2/common/Main.java +++ b/src/main/java/li/cil/oc2/common/Main.java @@ -10,7 +10,7 @@ import li.cil.oc2.common.bus.device.data.Firmwares; import li.cil.oc2.common.bus.device.provider.Providers; import li.cil.oc2.common.container.Containers; import li.cil.oc2.common.entity.Entities; -import li.cil.oc2.common.customrecipes.CustomRecipes; +import li.cil.oc2.common.item.crafting.RecipeSerializers; import li.cil.oc2.common.item.Items; import li.cil.oc2.common.serialization.serializers.Serializers; import li.cil.oc2.common.tags.BlockTags; @@ -21,7 +21,6 @@ import li.cil.sedna.Sedna; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod(API.MOD_ID) @@ -40,13 +39,13 @@ public final class Main { TileEntities.initialize(); Entities.initialize(); Containers.initialize(); + RecipeSerializers.initialize(); SoundEvents.initialize(); Providers.initialize(); DeviceTypes.initialize(); BlockDeviceDataRegistration.initialize(); Firmwares.initialize(); - CustomRecipes.initialize(); FMLJavaModLoadingContext.get().getModEventBus().register(CommonSetup.class); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().register(ClientSetup.class)); diff --git a/src/main/java/li/cil/oc2/common/customrecipes/CustomRecipes.java b/src/main/java/li/cil/oc2/common/customrecipes/CustomRecipes.java deleted file mode 100644 index 37cae61a..00000000 --- a/src/main/java/li/cil/oc2/common/customrecipes/CustomRecipes.java +++ /dev/null @@ -1,20 +0,0 @@ -package li.cil.oc2.common.customrecipes; - -import li.cil.oc2.api.API; -import net.minecraft.item.crafting.IRecipeSerializer; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -public final class CustomRecipes { - private static final DeferredRegister> INITIALIZER = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, API.MOD_ID); - - public static final RegistryObject HDD_RECIPE = INITIALIZER.register("hard_drive", HDDRecipe.Serializer::new); - public static final RegistryObject MEMORY_RECIPE = INITIALIZER.register("memory", MemoryRecipe.Serializer::new); - public static final RegistryObject FLASH_MEMORY_LINUX_RECIPE = INITIALIZER.register("flash_memory_linux", LinuxFlashRecipe.Serializer::new); - - public static void initialize() { - INITIALIZER.register(FMLJavaModLoadingContext.get().getModEventBus()); - } -} diff --git a/src/main/java/li/cil/oc2/common/customrecipes/HDDRecipe.java b/src/main/java/li/cil/oc2/common/customrecipes/HDDRecipe.java deleted file mode 100644 index e03aa6c4..00000000 --- a/src/main/java/li/cil/oc2/common/customrecipes/HDDRecipe.java +++ /dev/null @@ -1,109 +0,0 @@ -package li.cil.oc2.common.customrecipes; - -import com.google.gson.JsonObject; -import li.cil.oc2.common.Constants; -import li.cil.oc2.common.item.HardDriveItem; -import li.cil.oc2.common.item.Items; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.*; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.ForgeRegistryEntry; -import org.jetbrains.annotations.NotNull; - -public class HDDRecipe implements ICraftingRecipe { - private static final RegistryObject regObject = RegistryObject.of(new ResourceLocation("oc2:hard_drive"), ForgeRegistries.ITEMS); - - private final ResourceLocation id; - - public HDDRecipe(ResourceLocation idIn) { - id = idIn; - } - - @Override - public @NotNull ResourceLocation getId() { - return id; - } - - @Override - public @NotNull ItemStack getRecipeOutput() { - return new ItemStack(regObject.get()); - } - - @Override - public boolean matches(@NotNull CraftingInventory inv, @NotNull World worldIn) { - return craftingTemplateForTiers(inv) && creatingTiers(inv) != -1; - } - - @Override - public @NotNull ItemStack getCraftingResult(@NotNull CraftingInventory inv) { - boolean checkTemplate = craftingTemplateForTiers(inv); - - if (!checkTemplate) return ItemStack.EMPTY; - - int tier = creatingTiers(inv); - return (tier != -1) ? HardDriveItem.withCapacity(((int) Math.pow(2, tier)) * Constants.MEGABYTE) : ItemStack.EMPTY; - } - - @Override - public boolean canFit(int width, int height) { - return width * height >= 9; - } - - @Override - public @NotNull IRecipeSerializer getSerializer() { - return CustomRecipes.HDD_RECIPE.get(); - } - - public static class Serializer extends ForgeRegistryEntry> implements IRecipeSerializer { - @Override - public @NotNull HDDRecipe read(@NotNull ResourceLocation recipeId, @NotNull JsonObject json) { - return new HDDRecipe(recipeId); - } - - @Override - public HDDRecipe read(@NotNull ResourceLocation recipeId, @NotNull PacketBuffer buffer) { - return new HDDRecipe(recipeId); - } - - @Override - public void write(@NotNull PacketBuffer buffer, @NotNull HDDRecipe recipe) { - - } - } - - private int creatingTiers(CraftingInventory inv) { - Item iron = net.minecraft.item.Items.IRON_INGOT; - Item gold = net.minecraft.item.Items.GOLD_INGOT; - Item diamond = net.minecraft.item.Items.DIAMOND; - Item first = inv.getStackInSlot(2).getItem(); - Item second = inv.getStackInSlot(8).getItem(); - boolean ironTemplate = first.equals(iron) && second.equals(iron); - boolean goldTemplate = first.equals(gold) && second.equals(gold); - boolean diamondTemplate = first.equals(diamond) && second.equals(diamond); - - if (ironTemplate) return 1; - else if (goldTemplate) return 2; - else if (diamondTemplate) return 3; - else return -1; - - } - - private boolean craftingTemplateForTiers(CraftingInventory inv) { - - Item slot5 = inv.getStackInSlot(5).getItem(); - - return inv.getStackInSlot(0).getItem().equals(Items.MICROCHIP_ITEM.get()) - && inv.getStackInSlot(1).getItem().equals(Items.DISK_PLATTER_ITEM.get()) - && inv.getStackInSlot(3).getItem().equals(Items.PCB_ITEM.get()) - && inv.getStackInSlot(4).getItem().equals(Items.DISK_PLATTER_ITEM.get()) - && (slot5.equals(net.minecraft.item.Items.PISTON) || slot5.equals(net.minecraft.item.Items.STICKY_PISTON)) - && inv.getStackInSlot(6).getItem().equals(Items.MICROCHIP_ITEM.get()) - && inv.getStackInSlot(7).getItem().equals(Items.DISK_PLATTER_ITEM.get()); - } -} \ No newline at end of file diff --git a/src/main/java/li/cil/oc2/common/customrecipes/LinuxFlashRecipe.java b/src/main/java/li/cil/oc2/common/customrecipes/LinuxFlashRecipe.java deleted file mode 100644 index 2e34a359..00000000 --- a/src/main/java/li/cil/oc2/common/customrecipes/LinuxFlashRecipe.java +++ /dev/null @@ -1,94 +0,0 @@ -package li.cil.oc2.common.customrecipes; - -import com.google.gson.JsonObject; -import li.cil.oc2.api.bus.device.data.Firmware; -import li.cil.oc2.common.Constants; -import li.cil.oc2.common.bus.device.data.Firmwares; -import li.cil.oc2.common.item.FlashMemoryItem; -import li.cil.oc2.common.item.Items; -import li.cil.oc2.common.item.MemoryItem; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.ICraftingRecipe; -import net.minecraft.item.crafting.IRecipeSerializer; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.ForgeRegistryEntry; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; - -public class LinuxFlashRecipe implements ICraftingRecipe { - private static final RegistryObject regObject = RegistryObject.of(new ResourceLocation("oc2:flash_memory"), ForgeRegistries.ITEMS); - - private final ResourceLocation id; - - public LinuxFlashRecipe(ResourceLocation idIn) { - id = idIn; - } - - @Override - public @NotNull ResourceLocation getId() { - return id; - } - - @Override - public @NotNull ItemStack getRecipeOutput() { - return new ItemStack(regObject.get()); - } - - @Override - public boolean matches(@NotNull CraftingInventory inv, @NotNull World worldIn) { - return isValid(inv); - } - - @Override - public @NotNull ItemStack getCraftingResult(@NotNull CraftingInventory inv) { - return (isValid(inv)) ? FlashMemoryItem.withFirmware(Firmwares.BUILDROOT.get()) : ItemStack.EMPTY; - } - - @Override - public boolean canFit(int width, int height) { - return width * height >= 4; - } - - @Override - public @NotNull IRecipeSerializer getSerializer() { - return CustomRecipes.FLASH_MEMORY_LINUX_RECIPE.get(); - } - - public static class Serializer extends ForgeRegistryEntry> implements IRecipeSerializer { - @Override - public @NotNull LinuxFlashRecipe read(@NotNull ResourceLocation recipeId, @NotNull JsonObject json) { - return new LinuxFlashRecipe(recipeId); - } - - @Override - public LinuxFlashRecipe read(@NotNull ResourceLocation recipeId, @NotNull PacketBuffer buffer) { - return new LinuxFlashRecipe(recipeId); - } - - @Override - public void write(@NotNull PacketBuffer buffer, @NotNull LinuxFlashRecipe recipe) { - - } - } - - private boolean isValid(CraftingInventory inv) { - ItemStack[] array = new ItemStack[8]; - - for (int i = 0; i < 8; i++) { - array[i] = inv.getStackInSlot(i); - } - - boolean memoryCard = Arrays.stream(array).filter(x -> x.getItem().equals(Items.FLASH_MEMORY_ITEM.get())).count() == 1; - boolean wrenchItem = Arrays.stream(array).filter(x -> x.getItem().equals(Items.WRENCH_ITEM.get())).count() == 1; - boolean emptySlots = Arrays.stream(array).filter(ItemStack::isEmpty).count() == 6; - - return memoryCard && wrenchItem && emptySlots; - } -} diff --git a/src/main/java/li/cil/oc2/common/customrecipes/MemoryRecipe.java b/src/main/java/li/cil/oc2/common/customrecipes/MemoryRecipe.java deleted file mode 100644 index b435f5ee..00000000 --- a/src/main/java/li/cil/oc2/common/customrecipes/MemoryRecipe.java +++ /dev/null @@ -1,101 +0,0 @@ -package li.cil.oc2.common.customrecipes; - -import com.google.gson.JsonObject; -import li.cil.oc2.common.Constants; -import li.cil.oc2.common.item.Items; -import li.cil.oc2.common.item.MemoryItem; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.ICraftingRecipe; -import net.minecraft.item.crafting.IRecipeSerializer; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.ForgeRegistryEntry; -import org.jetbrains.annotations.NotNull; - -public class MemoryRecipe implements ICraftingRecipe { - private static final RegistryObject regObject = RegistryObject.of(new ResourceLocation("oc2:memory"), ForgeRegistries.ITEMS); - - private final ResourceLocation id; - - public MemoryRecipe(ResourceLocation idIn) { - id = idIn; - } - - @Override - public @NotNull ResourceLocation getId() { - return id; - } - - @Override - public @NotNull ItemStack getRecipeOutput() { - return new ItemStack(regObject.get()); - } - - @Override - public boolean matches(@NotNull CraftingInventory inv, @NotNull World worldIn) { - int level = getLevelOfMemory(inv); - return level == 2 || level == 4 || level == 8; - } - - @Override - public @NotNull ItemStack getCraftingResult(@NotNull CraftingInventory inv) { - int level = getLevelOfMemory(inv); - - return (level == 2 || level == 4 || level == 8) ? MemoryItem.withCapacity(level * Constants.MEGABYTE) : ItemStack.EMPTY; - } - - @Override - public boolean canFit(int width, int height) { - return width * height >= 4; - } - - @Override - public @NotNull IRecipeSerializer getSerializer() { - return CustomRecipes.MEMORY_RECIPE.get(); - } - - public static class Serializer extends ForgeRegistryEntry> implements IRecipeSerializer { - @Override - public @NotNull MemoryRecipe read(@NotNull ResourceLocation recipeId, @NotNull JsonObject json) { - return new MemoryRecipe(recipeId); - } - - @Override - public MemoryRecipe read(@NotNull ResourceLocation recipeId, @NotNull PacketBuffer buffer) { - return new MemoryRecipe(recipeId); - } - - @Override - public void write(@NotNull PacketBuffer buffer, @NotNull MemoryRecipe recipe) { - - } - } - - private int getLevelOfMemory(CraftingInventory inv) { - if (!inv.getStackInSlot(0).getItem().equals(Items.PCB_ITEM.get())) return 0; - ItemStack[] array = new ItemStack[8]; - - for (int i = 0; i < 8; i++) { - array[i] = inv.getStackInSlot(i); - } - - int value = 0; - for (int i = 1; i < 9; i++) { - if (array[0].getItem().equals(Items.MICROCHIP_ITEM.get())) { - value++; - } - } - int valueEmpty = 0; - for (int i = 1; i < 9; i++) { - if (array[0].isEmpty()) { - valueEmpty++; - } - } - return valueEmpty + value == 8 ? value : 0; - } -} diff --git a/src/main/java/li/cil/oc2/common/item/Items.java b/src/main/java/li/cil/oc2/common/item/Items.java index c99cbbfa..d6f53121 100644 --- a/src/main/java/li/cil/oc2/common/item/Items.java +++ b/src/main/java/li/cil/oc2/common/item/Items.java @@ -45,12 +45,8 @@ public final class Items { public static final RegistryObject INVENTORY_OPERATIONS_MODULE = register(Constants.INVENTORY_OPERATIONS_MODULE_ITEM_NAME); public static final RegistryObject BLOCK_OPERATIONS_MODULE = register(Constants.BLOCK_OPERATIONS_MODULE_ITEM_NAME, BlockOperationsModule::new); - public static final RegistryObject CONTROL_UNIT_ITEM = register(Constants.CONTROL_UNIT_ITEM_NAME, Item::new); - public static final RegistryObject ARITHMETIC_LOGIC_UNIT_ITEM = register(Constants.ARITHMETIC_LOGIC_UNIT_ITEM_NAME, Item::new); - public static final RegistryObject MICROCHIP_ITEM = register(Constants.MICROCHIP_ITEM_NAME, Item::new); - public static final RegistryObject DISK_PLATTER_ITEM = register(Constants.DISK_PLATTER_ITEM_NAME, Item::new); - public static final RegistryObject TRANSISTOR_ITEM = register(Constants.TRANSISTOR_ITEM_NAME, Item::new); - public static final RegistryObject PCB_ITEM = register(Constants.PCB_ITEM_NAME, Item::new); + public static final RegistryObject TRANSISTOR = register(Constants.TRANSISTOR_ITEM_NAME, ModItem::new); + public static final RegistryObject CIRCUIT_BOARD = register(Constants.CIRCUIT_BOARD_ITEM_NAME, ModItem::new); /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java b/src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java new file mode 100644 index 00000000..b14af870 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/item/crafting/RecipeSerializers.java @@ -0,0 +1,19 @@ +package li.cil.oc2.common.item.crafting; + +import li.cil.oc2.api.API; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; + +public final class RecipeSerializers { + private static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, API.MOD_ID); + + public static final RegistryObject SHAPED = RECIPE_SERIALIZERS.register("shaped", ShapedNbtRecipe.Serializer::new); + public static final RegistryObject SHAPELESS = RECIPE_SERIALIZERS.register("shapeless", ShapelessNbtRecipe.Serializer::new); + + public static void initialize() { + RECIPE_SERIALIZERS.register(FMLJavaModLoadingContext.get().getModEventBus()); + } +} diff --git a/src/main/java/li/cil/oc2/common/item/crafting/ShapedNbtRecipe.java b/src/main/java/li/cil/oc2/common/item/crafting/ShapedNbtRecipe.java new file mode 100644 index 00000000..87bcd36d --- /dev/null +++ b/src/main/java/li/cil/oc2/common/item/crafting/ShapedNbtRecipe.java @@ -0,0 +1,57 @@ +package li.cil.oc2.common.item.crafting; + +import com.google.gson.JsonObject; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.ShapedRecipe; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.Nullable; + +public final class ShapedNbtRecipe extends ShapedRecipe { + private static final Logger LOGGER = LogManager.getLogger(); + + public ShapedNbtRecipe(final ShapedRecipe recipe) { + this(recipe, recipe.getRecipeOutput()); + } + + public ShapedNbtRecipe(final ShapedRecipe recipe, final ItemStack output) { + super(recipe.getId(), recipe.getGroup(), recipe.getWidth(), recipe.getHeight(), recipe.getIngredients(), output); + } + + public static class Serializer extends ForgeRegistryEntry> implements IRecipeSerializer { + @Override + public ShapedNbtRecipe read(final ResourceLocation location, final JsonObject json) { + final ShapedRecipe recipe = CRAFTING_SHAPED.read(location, json); + final ItemStack stack = recipe.getRecipeOutput(); + if (json.has("nbt")) { + try { + final CompoundNBT recipeTag = JsonToNBT.getTagFromJson( + JSONUtils.getJsonObject(json, "nbt").toString()); + stack.getOrCreateTag().merge(recipeTag); + } catch (final CommandSyntaxException e) { + LOGGER.error(e); + } + } + return new ShapedNbtRecipe(recipe, stack); + } + + @Nullable + @Override + public ShapedNbtRecipe read(final ResourceLocation location, final PacketBuffer buffer) { + return new ShapedNbtRecipe(CRAFTING_SHAPED.read(location, buffer)); + } + + @Override + public void write(final PacketBuffer buffer, final ShapedNbtRecipe recipe) { + CRAFTING_SHAPED.write(buffer, recipe); + } + } +} diff --git a/src/main/java/li/cil/oc2/common/item/crafting/ShapelessNbtRecipe.java b/src/main/java/li/cil/oc2/common/item/crafting/ShapelessNbtRecipe.java new file mode 100644 index 00000000..4dbc7649 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/item/crafting/ShapelessNbtRecipe.java @@ -0,0 +1,57 @@ +package li.cil.oc2.common.item.crafting; + +import com.google.gson.JsonObject; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.ShapelessRecipe; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.Nullable; + +public final class ShapelessNbtRecipe extends ShapelessRecipe { + private static final Logger LOGGER = LogManager.getLogger(); + + public ShapelessNbtRecipe(final ShapelessRecipe recipe) { + this(recipe, recipe.getRecipeOutput()); + } + + public ShapelessNbtRecipe(final ShapelessRecipe recipe, final ItemStack output) { + super(recipe.getId(), recipe.getGroup(), output, recipe.getIngredients()); + } + + public static class Serializer extends ForgeRegistryEntry> implements IRecipeSerializer { + @Override + public ShapelessNbtRecipe read(final ResourceLocation location, final JsonObject json) { + final ShapelessRecipe recipe = CRAFTING_SHAPELESS.read(location, json); + final ItemStack stack = recipe.getRecipeOutput(); + if (json.has("nbt")) { + try { + final CompoundNBT recipeTag = JsonToNBT.getTagFromJson( + JSONUtils.getJsonObject(json, "nbt").toString()); + stack.getOrCreateTag().merge(recipeTag); + } catch (final CommandSyntaxException e) { + LOGGER.error(e); + } + } + return new ShapelessNbtRecipe(recipe, stack); + } + + @Nullable + @Override + public ShapelessNbtRecipe read(final ResourceLocation location, final PacketBuffer buffer) { + return new ShapelessNbtRecipe(CRAFTING_SHAPELESS.read(location, buffer)); + } + + @Override + public void write(final PacketBuffer buffer, final ShapelessNbtRecipe recipe) { + CRAFTING_SHAPELESS.write(buffer, recipe); + } + } +} diff --git a/src/main/java/li/cil/oc2/common/item/crafting/package-info.java b/src/main/java/li/cil/oc2/common/item/crafting/package-info.java new file mode 100644 index 00000000..43082be6 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/item/crafting/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package li.cil.oc2.common.item.crafting; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/li/cil/oc2/data/CraftingRecipes.java b/src/main/java/li/cil/oc2/data/CraftingRecipes.java deleted file mode 100644 index fdb9f020..00000000 --- a/src/main/java/li/cil/oc2/data/CraftingRecipes.java +++ /dev/null @@ -1,194 +0,0 @@ -package li.cil.oc2.data; - -import li.cil.oc2.common.item.Items; -import net.minecraft.advancements.criterion.InventoryChangeTrigger; -import net.minecraft.data.*; -import net.minecraft.item.Item; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.util.IItemProvider; -import net.minecraftforge.common.Tags; -import net.minecraftforge.fml.RegistryObject; - -import java.util.function.Consumer; - -public final class CraftingRecipes extends RecipeProvider { - - public CraftingRecipes(final DataGenerator generatorIn) { - super(generatorIn); - } - - @Override - protected void registerRecipes(final Consumer consumer) { - ShapedRecipeBuilder - .shapedRecipe(Items.WRENCH_ITEM.get()) - .patternLine("I I") - .patternLine(" C ") - .patternLine(" I ") - .key('I', net.minecraft.item.Items.IRON_INGOT) - .key('C', Items.MICROCHIP_ITEM.get()) - .addCriterion("has_microchip", inventoryChange(Items.MICROCHIP_ITEM.get())) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.TRANSISTOR_ITEM.get(), 4) - .patternLine("III") - .patternLine("GPG") - .patternLine(" R ") - .key('I', net.minecraft.item.Items.IRON_INGOT) - .key('G', net.minecraft.item.Items.GOLD_NUGGET) - .key('R', net.minecraft.item.Items.REDSTONE) - .key('P', net.minecraft.item.Items.PAPER) - .addCriterion("has_iron", inventoryChange(net.minecraft.item.Items.GOLD_NUGGET)) - .build(consumer); - - createInterfaceCard(Items.REDSTONE_INTERFACE_CARD_ITEM, net.minecraft.item.Items.REDSTONE_TORCH, consumer); - - createInterfaceCardBlock(Items.REDSTONE_INTERFACE_ITEM, Items.REDSTONE_INTERFACE_CARD_ITEM, consumer); - - ShapelessRecipeBuilder - .shapelessRecipe(Items.PCB_ITEM.get()) - .addIngredient(net.minecraft.item.Items.GOLD_NUGGET) - .addIngredient(Ingredient.fromItems(net.minecraft.item.Items.SLIME_BALL, net.minecraft.item.Items.HONEY_BOTTLE)) - .addIngredient(Ingredient.fromItems(net.minecraft.item.Items.KELP, net.minecraft.item.Items.GREEN_DYE)) - .addCriterion("has_iron", inventoryChange(net.minecraft.item.Items.GOLD_NUGGET)) - .build(consumer); - - createInterfaceCard(Items.NETWORK_INTERFACE_CARD_ITEM, Items.NETWORK_CABLE_ITEM.get(), consumer); - - createInterfaceCardBlock(Items.NETWORK_HUB_ITEM, Items.NETWORK_INTERFACE_CARD_ITEM, consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.NETWORK_CONNECTOR_ITEM.get(), 2) - .patternLine("NWN") - .patternLine("NWN") - .key('N', net.minecraft.item.Items.GOLD_NUGGET) - .key('W', Items.NETWORK_CABLE_ITEM.get()) - .addCriterion("has_iron", inventoryChange(Items.NETWORK_CABLE_ITEM.get())) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.NETWORK_CABLE_ITEM.get(), 6) - .patternLine("SSS") - .patternLine("GGG") - .key('G', net.minecraft.item.Items.GOLD_NUGGET) - .key('S', net.minecraft.item.Items.STRING) - .addCriterion("has_iron", inventoryChange(net.minecraft.item.Items.GOLD_NUGGET)) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.MICROCHIP_ITEM.get()) - .patternLine("III") - .patternLine("RTR") - .patternLine("III") - .key('I', net.minecraft.item.Items.GOLD_NUGGET) - .key('T', Items.TRANSISTOR_ITEM.get()) - .key('R', net.minecraft.item.Items.REDSTONE) - .addCriterion("has_iron", inventoryChange(net.minecraft.item.Items.IRON_INGOT)) - .build(consumer); - - // MEMORY - // HARD_DRIVE - // FLASH_MEMORY_LINUX - // FLASH_MEMORY - - ShapedRecipeBuilder - .shapedRecipe(Items.DISK_PLATTER_ITEM.get(), 6) - .patternLine(" N ") - .patternLine("N N") - .patternLine(" N ") - .key('N', net.minecraft.item.Items.IRON_NUGGET) - .addCriterion("has_iron", inventoryChange(net.minecraft.item.Items.IRON_NUGGET)) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.CONTROL_UNIT_ITEM.get()) - .patternLine("IRI") - .patternLine("TCT") - .patternLine("ITI") - .key('I', net.minecraft.item.Items.GOLD_NUGGET) - .key('T', Items.TRANSISTOR_ITEM.get()) - .key('C', net.minecraft.item.Items.CLOCK) - .key('R', net.minecraft.item.Items.REDSTONE) - .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR_ITEM.get())) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.COMPUTER_ITEM.get()) - .patternLine("IMI") - .patternLine("BCB") - .patternLine("IPI") - .key('I', net.minecraft.item.Items.GOLD_NUGGET) - .key('C', Tags.Items.CHESTS_WOODEN) - .key('M', Items.MICROCHIP_ITEM.get()) - .key('P', Items.PCB_ITEM.get()) - .key('B', net.minecraft.item.Items.IRON_BARS) - .addCriterion("has_microchip", inventoryChange(Items.MICROCHIP_ITEM.get())) - .addCriterion("has_pcb", inventoryChange(Items.PCB_ITEM.get())) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.BUS_INTERFACE_ITEM.get()) - .patternLine("N ") - .patternLine("NC ") - .patternLine("N ") - .key('N', net.minecraft.item.Items.GOLD_NUGGET) - .key('C', Items.BUS_CABLE_ITEM.get()) - .addCriterion("has_bus_cable", inventoryChange(Items.BUS_CABLE_ITEM.get())) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.BUS_CABLE_ITEM.get(), 3) - .patternLine("NNN") - .patternLine("WWW") - .patternLine("NNN") - .key('N', net.minecraft.item.Items.GOLD_NUGGET) - .key('W', Items.NETWORK_CABLE_ITEM.get()) - .addCriterion("has_network_cable", inventoryChange(Items.NETWORK_CABLE_ITEM.get())) - .build(consumer); - - ShapedRecipeBuilder - .shapedRecipe(Items.ARITHMETIC_LOGIC_UNIT_ITEM.get()) - .patternLine("IRI") - .patternLine("TNT") - .patternLine("ITI") - .key('I', net.minecraft.item.Items.IRON_NUGGET) - .key('T', Items.TRANSISTOR_ITEM.get()) - .key('N', Items.MICROCHIP_ITEM.get()) - .key('R', net.minecraft.item.Items.REDSTONE) - .addCriterion("has_microchip", inventoryChange(Items.MICROCHIP_ITEM.get())) - .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR_ITEM.get())) - .build(consumer); - } - - private void createInterfaceCard(final RegistryObject result, final Item type, final Consumer consumer) { - ShapedRecipeBuilder - .shapedRecipe(result.get()) - .patternLine("POG") - .patternLine("PC ") - .patternLine("PI ") - .key('I', net.minecraft.item.Items.GOLD_NUGGET) - .key('P', net.minecraft.item.Items.IRON_NUGGET) - .key('C', Items.PCB_ITEM.get()) - .key('O', Items.MICROCHIP_ITEM.get()) - .key('G', type) - .addCriterion("has_pcb", inventoryChange(Items.PCB_ITEM.get())) - .addCriterion("has_microchip", inventoryChange(Items.MICROCHIP_ITEM.get())) - .build(consumer); - } - - private void createInterfaceCardBlock(final RegistryObject result, final RegistryObject type, final Consumer consumer) { - ShapedRecipeBuilder - .shapedRecipe(result.get()) - .patternLine("GGG") - .patternLine("GCG") - .patternLine("GGG") - .key('G', net.minecraft.item.Items.GOLD_NUGGET) - .key('C', type.get()) - .addCriterion("has_custom_card", inventoryChange(type.get())) - .build(consumer); - } - - private static InventoryChangeTrigger.Instance inventoryChange(IItemProvider item) { - return InventoryChangeTrigger.Instance.forItems(item); - } -} diff --git a/src/main/java/li/cil/oc2/data/DataGenerators.java b/src/main/java/li/cil/oc2/data/DataGenerators.java index 59a7391d..81337d28 100644 --- a/src/main/java/li/cil/oc2/data/DataGenerators.java +++ b/src/main/java/li/cil/oc2/data/DataGenerators.java @@ -21,7 +21,7 @@ public final class DataGenerators { final BlockTagsProvider blockTagProvider = new ModBlockTagsProvider(generator, existingFileHelper); generator.addProvider(blockTagProvider); generator.addProvider(new ModItemTagsProvider(generator, blockTagProvider, existingFileHelper)); - generator.addProvider(new CraftingRecipes(generator)); + generator.addProvider(new ModRecipesProvider(generator)); } } } diff --git a/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java b/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java index c956881b..55a7fe3b 100644 --- a/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java +++ b/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java @@ -33,6 +33,7 @@ public class ModBlockStateProvider extends BlockStateProvider { .transform(ModelBuilder.Perspective.FIXED) .rotation(270, 0, 0) .translation(0, 0, -5) + .scale(1, 1, 1) .end() .end(); horizontalBlock(Blocks.NETWORK_HUB, Items.NETWORK_HUB); @@ -47,6 +48,7 @@ public class ModBlockStateProvider extends BlockStateProvider { final ModelFile baseModel = models().getExistingFile(new ResourceLocation(API.MOD_ID, "block/cable_base")); final ModelFile linkModel = models().getExistingFile(new ResourceLocation(API.MOD_ID, "block/cable_link")); final ModelFile plugModel = models().getExistingFile(new ResourceLocation(API.MOD_ID, "block/cable_plug")); + final ModelFile straightModel = models().getExistingFile(new ResourceLocation(API.MOD_ID, "block/cable_straight")); final MultiPartBlockStateBuilder builder = getMultipartBuilder(Blocks.BUS_CABLE.get()); @@ -88,7 +90,7 @@ public class ModBlockStateProvider extends BlockStateProvider { }); itemModels().getBuilder(Items.BUS_CABLE.getId().getPath()) - .parent(baseModel) + .parent(straightModel) .transforms() .transform(ModelBuilder.Perspective.GUI) .rotation(30, 225, 0) diff --git a/src/main/java/li/cil/oc2/data/ModItemModelProvider.java b/src/main/java/li/cil/oc2/data/ModItemModelProvider.java index dbe9055d..83512e90 100644 --- a/src/main/java/li/cil/oc2/data/ModItemModelProvider.java +++ b/src/main/java/li/cil/oc2/data/ModItemModelProvider.java @@ -43,6 +43,9 @@ public final class ModItemModelProvider extends ItemModelProvider { simple(Items.INVENTORY_OPERATIONS_MODULE, "item/inventory_operations_module"); simple(Items.BLOCK_OPERATIONS_MODULE, "item/block_operations_module"); + simple(Items.TRANSISTOR, "item/transistor"); + simple(Items.CIRCUIT_BOARD, "item/circuit_board"); + withExistingParent(Constants.ROBOT_ENTITY_NAME, "template_shulker_box"); } diff --git a/src/main/java/li/cil/oc2/data/ModRecipesProvider.java b/src/main/java/li/cil/oc2/data/ModRecipesProvider.java new file mode 100644 index 00000000..7babbea2 --- /dev/null +++ b/src/main/java/li/cil/oc2/data/ModRecipesProvider.java @@ -0,0 +1,198 @@ +package li.cil.oc2.data; + +import li.cil.oc2.common.item.Items; +import net.minecraft.advancements.criterion.InventoryChangeTrigger; +import net.minecraft.data.*; +import net.minecraft.tags.ItemTags; +import net.minecraft.util.IItemProvider; +import net.minecraftforge.common.Tags; + +import java.util.function.Consumer; + +public final class ModRecipesProvider extends RecipeProvider { + + public ModRecipesProvider(final DataGenerator generatorIn) { + super(generatorIn); + } + + @Override + protected void registerRecipes(final Consumer consumer) { + ShapedRecipeBuilder + .shapedRecipe(Items.COMPUTER.get()) + .patternLine("ICI") + .patternLine("XTX") + .patternLine("IBI") + .key('I', Tags.Items.INGOTS_IRON) + .key('C', Tags.Items.CHESTS_WOODEN) + .key('X', Items.BUS_INTERFACE.get()) + .key('T', Items.TRANSISTOR.get()) + .key('B', Items.CIRCUIT_BOARD.get()) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .addCriterion("has_circuit_board", inventoryChange(Items.CIRCUIT_BOARD.get())) + .build(consumer); + + ShapedRecipeBuilder + .shapedRecipe(Items.BUS_CABLE.get(), 16) + .patternLine("III") + .patternLine("GTG") + .patternLine("III") + .key('I', Tags.Items.INGOTS_IRON) + .key('G', Tags.Items.INGOTS_GOLD) + .key('T', Items.TRANSISTOR.get()) + .addCriterion("has_gold", inventoryChange(net.minecraft.item.Items.GOLD_INGOT)) + .build(consumer); + + ShapelessRecipeBuilder + .shapelessRecipe(Items.BUS_INTERFACE.get()) + .addIngredient(Items.TRANSISTOR.get()) + .addIngredient(Items.BUS_CABLE.get()) + .addCriterion("has_bus_cable", inventoryChange(Items.BUS_CABLE.get())) + .build(consumer); + + ShapedRecipeBuilder + .shapedRecipe(Items.NETWORK_CONNECTOR.get(), 4) + .patternLine("IGI") + .patternLine("ITI") + .key('I', Tags.Items.INGOTS_IRON) + .key('G', Tags.Items.GLASS) + .key('T', Items.TRANSISTOR.get()) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .build(consumer); + + ShapedRecipeBuilder + .shapedRecipe(Items.NETWORK_HUB.get()) + .patternLine("ICI") + .patternLine("XRX") + .patternLine("ICI") + .key('I', Tags.Items.INGOTS_IRON) + .key('C', Items.NETWORK_CONNECTOR.get()) + .key('R', net.minecraft.item.Items.REPEATER) + .key('X', Items.BUS_INTERFACE.get()) + .addCriterion("has_network_connector", inventoryChange(Items.NETWORK_CONNECTOR.get())) + .build(consumer); + + ShapedRecipeBuilder + .shapedRecipe(Items.REDSTONE_INTERFACE.get()) + .patternLine("IRI") + .patternLine("XTX") + .patternLine("IRI") + .key('I', Tags.Items.INGOTS_IRON) + .key('R', Tags.Items.DUSTS_REDSTONE) + .key('T', Items.TRANSISTOR.get()) + .key('X', Items.BUS_INTERFACE.get()) + .addCriterion("has_computer", inventoryChange(Items.COMPUTER.get())) + .build(consumer); + + ShapedRecipeBuilder + .shapedRecipe(Items.DISK_DRIVE.get()) + .patternLine("IBI") + .patternLine("XSX") + .patternLine("IDI") + .key('I', Tags.Items.INGOTS_IRON) + .key('B', ItemTags.BUTTONS) + .key('S', net.minecraft.item.Items.STICK) + .key('X', Items.BUS_INTERFACE.get()) + .key('D', net.minecraft.item.Items.DISPENSER) + .addCriterion("has_computer", inventoryChange(Items.COMPUTER.get())) + .build(consumer); + + ShapedRecipeBuilder + .shapedRecipe(Items.CHARGER.get()) + .patternLine("IPI") + .patternLine("XTX") + .patternLine("IRI") + .key('I', Tags.Items.INGOTS_IRON) + .key('P', net.minecraft.item.Items.LIGHT_WEIGHTED_PRESSURE_PLATE) + .key('T', Items.TRANSISTOR.get()) + .key('X', Items.BUS_INTERFACE.get()) + .key('R', Tags.Items.STORAGE_BLOCKS_REDSTONE) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .build(consumer); + + + ShapedRecipeBuilder + .shapedRecipe(Items.WRENCH.get()) + .patternLine("I I") + .patternLine(" T ") + .patternLine(" I ") + .key('I', Tags.Items.INGOTS_IRON) + .key('T', Items.TRANSISTOR.get()) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .build(consumer); + + + ShapedRecipeBuilder + .shapedRecipe(Items.NETWORK_CABLE.get(), 8) + .patternLine("SSS") + .patternLine("GTG") + .patternLine("SSS") + .key('S', Tags.Items.STRING) + .key('G', Tags.Items.GLASS) + .key('T', Items.TRANSISTOR.get()) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .build(consumer); + + // todo Robot + + // todo Memory + // todo HardDrive + // todo HardDrive - Linux + // todo FlashMemory + // todo FlashMemory - Linux + + ShapedRecipeBuilder + .shapedRecipe(Items.REDSTONE_INTERFACE_CARD.get()) + .patternLine("IRT") + .patternLine(" B ") + .key('I', Tags.Items.INGOTS_IRON) + .key('B', Items.CIRCUIT_BOARD.get()) + .key('T', Items.TRANSISTOR.get()) + .key('R', Tags.Items.DUSTS_REDSTONE) + .addCriterion("has_board", inventoryChange(Items.CIRCUIT_BOARD.get())) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .build(consumer); + + ShapedRecipeBuilder + .shapedRecipe(Items.NETWORK_INTERFACE_CARD.get()) + .patternLine("IRT") + .patternLine(" B ") + .key('I', Tags.Items.INGOTS_IRON) + .key('B', Items.CIRCUIT_BOARD.get()) + .key('T', Items.TRANSISTOR.get()) + .key('R', net.minecraft.item.Items.REPEATER) + .addCriterion("has_board", inventoryChange(Items.CIRCUIT_BOARD.get())) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .build(consumer); + + // todo Floppy + + + // todo InventoryOperationsModule + // todo BlockOperationsModule + + ShapedRecipeBuilder + .shapedRecipe(Items.TRANSISTOR.get(), 8) + .patternLine(" G ") + .patternLine("RPR") + .patternLine("III") + .key('I', Tags.Items.INGOTS_IRON) + .key('G', Tags.Items.INGOTS_GOLD) + .key('R', Tags.Items.DUSTS_REDSTONE) + .key('P', net.minecraft.item.Items.PAPER) + .addCriterion("has_gold", inventoryChange(net.minecraft.item.Items.GOLD_INGOT)) + .build(consumer); + + ShapelessRecipeBuilder + .shapelessRecipe(Items.CIRCUIT_BOARD.get(), 4) + .addIngredient(Tags.Items.INGOTS_GOLD) + .addIngredient(net.minecraft.item.Items.CLAY_BALL) + .addIngredient(Items.TRANSISTOR.get()) + .addCriterion("has_transistor", inventoryChange(Items.TRANSISTOR.get())) + .build(consumer); + + } + + private static InventoryChangeTrigger.Instance inventoryChange(final IItemProvider item) { + return InventoryChangeTrigger.Instance.forItems(item); + } +} diff --git a/src/main/resources/assets/oc2/lang/en_us.json b/src/main/resources/assets/oc2/lang/en_us.json index 75c8a107..e85dfc48 100644 --- a/src/main/resources/assets/oc2/lang/en_us.json +++ b/src/main/resources/assets/oc2/lang/en_us.json @@ -33,12 +33,8 @@ "item.oc2.block_operations_module": "Block Operations Module", "item.oc2.block_operations_module.desc": "Enables robots to break and place blocks.", - "item.oc2.control_unit": "Control Unit (CU)", - "item.oc2.arithmetic_logic_unit": "Arithmetic Logic Unit (ALU)", - "item.oc2.microchip": "Microchip", - "item.oc2.disk_platter": "Disk Platter", "item.oc2.transistor": "Transistor", - "item.oc2.pcb": "Printed Circuit Board (PCB)", + "item.oc2.circuit_board": "Circuit Board", "entity.oc2.robot": "Robot", diff --git a/src/main/resources/assets/oc2/models/item/arithmetic_logic_unit.json b/src/main/resources/assets/oc2/models/item/arithmetic_logic_unit.json deleted file mode 100644 index 4ea87bb6..00000000 --- a/src/main/resources/assets/oc2/models/item/arithmetic_logic_unit.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "oc2:items/arithmetic_logic_unit" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/oc2/models/item/pcb.json b/src/main/resources/assets/oc2/models/item/circuit_board.json similarity index 61% rename from src/main/resources/assets/oc2/models/item/pcb.json rename to src/main/resources/assets/oc2/models/item/circuit_board.json index 07888a0c..784d3d6d 100644 --- a/src/main/resources/assets/oc2/models/item/pcb.json +++ b/src/main/resources/assets/oc2/models/item/circuit_board.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "oc2:items/pcb" + "layer0": "oc2:item/circuit_board" } } \ No newline at end of file diff --git a/src/main/resources/assets/oc2/models/item/control_unit.json b/src/main/resources/assets/oc2/models/item/control_unit.json deleted file mode 100644 index 9837fbc6..00000000 --- a/src/main/resources/assets/oc2/models/item/control_unit.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "oc2:items/control_unit" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/oc2/models/item/disk_platter.json b/src/main/resources/assets/oc2/models/item/disk_platter.json deleted file mode 100644 index 4c18c534..00000000 --- a/src/main/resources/assets/oc2/models/item/disk_platter.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "oc2:items/disk_platter" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/oc2/models/item/microchip.json b/src/main/resources/assets/oc2/models/item/microchip.json deleted file mode 100644 index a9fe86e3..00000000 --- a/src/main/resources/assets/oc2/models/item/microchip.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "oc2:items/microchip" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/oc2/models/item/network_connector.json b/src/main/resources/assets/oc2/models/item/network_connector.json index 43e30736..6e2dfe6e 100644 --- a/src/main/resources/assets/oc2/models/item/network_connector.json +++ b/src/main/resources/assets/oc2/models/item/network_connector.json @@ -8,7 +8,9 @@ 0 ], "translation": [ - 0, 2, 0 + 0, + 2, + 0 ], "scale": [ 0.75, diff --git a/src/main/resources/assets/oc2/models/item/transistor.json b/src/main/resources/assets/oc2/models/item/transistor.json index f41c713f..94a0f77d 100644 --- a/src/main/resources/assets/oc2/models/item/transistor.json +++ b/src/main/resources/assets/oc2/models/item/transistor.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "oc2:items/transistor" + "layer0": "oc2:item/transistor" } } \ No newline at end of file diff --git a/src/main/resources/assets/oc2/textures/item/arithmetic_logic_unit.png b/src/main/resources/assets/oc2/textures/item/arithmetic_logic_unit.png deleted file mode 100644 index 8a62239948dc07ad1741c05a4a456082681e9357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fo;{cx!SAKqeAhSMzBgI)T+=@?CRn^?w{MfN$Ygez{vuDrD zOxd+-*7W!HPl(}OvSi7$Y197y|9{SU4=+%UU`dc)Fp!G^7*yBJOae-#d%8G=RNU(6 z_vULb;BaYNxm14jz5iRB*5sC4J>GSaTk^#(NA5aUkk?9bS?-w*- zn3XEU#X5;~xwLdEkHYr65N@HIAjNyT8Fy<0wLOf^PL;YZcU5}d8}9RWnRpmPw{nVE T|LBVVTFKz)>gTe~DWM4fd%SF! diff --git a/src/main/resources/assets/oc2/textures/item/circuit_board.png b/src/main/resources/assets/oc2/textures/item/circuit_board.png new file mode 100644 index 0000000000000000000000000000000000000000..645fbc76e078892ac4c63207e2c3c1c34da52745 GIT binary patch literal 2087 zcmah~c~BEq7+(+&Im)Ggigjld5s_?2B$&vGA>mSjA%Gl;8j=lJA=!{!NKj2h7;xlvx8AjKsNt&e8q;4pH4_pkv!wfpn%6NdB9y(R>gFMTca8L<}bNgEPH#K*eV3a8!mx$=6UF1SU*EDgng(2#OGiq3g1qH?sp-M%7`eegWrgLFG7Jo3dAp?UN2V$QO4IMlf%3Qd& zCksS}ojuS*c<+V+yMaA$^T7x~hh_*^3{4?i3r3F~%oy2T41plCRRpNYuxdci)UwR7 zbMu0Qqluhir2V0yIPFJ;AK~Xy=`j>$MxRoybxBEbvS+$G5+8fn;pC+*FLvv zJoN;N5GQeCRc7?&^4o`}O)cY|-$Le67w?}RTfe$|?%W24In%aYHqWg~lV`NV^_L{8 zW;NY7QBr%+%1d<3V~ImTLGvee6{;!@3%91^cPL0cOR(87h``p}_ zqSz6JPid)m(|FMj%MxteJU35In{L&W+IrM_UqkDmMSmu~+;%n0T5~r3?y-N& zdcSU_+TD0}Q(K$&mI}bvVw5gCk%Ayw7v?d8Dz~_U5^abO3u9-Nwv{zTjTgEXHYZ=I zHA8AA=o&gWU6cFn9DL)7*-^^B5jp!xIJRBlar+-3OUOvEh6)s_gk&F zfTIVv-d0&R1M;rEzH+`|en-%VON(8P{jomVzT436n0IizS(VkM!_j@7yASrxd{vQT z{`$uD!A`j+hN|C)SqtWFXV)ud0=;)iXek3HzkdM4m@_h zem#pg-BgM_TJY#b;!4}Rjy-|->u58hwERrY*#zg+3!yFBM@}cZ%pIRMl=8o~YfW;o zz-ZN!In~@bzqxl76$WIF^I8;@nx z7nXK4R8+3VvM?QzQ$;*`hUv1v={i(X}y_i)MS u-6Fhw!t1i?U1~Mn?cK?}I@4*swBIaiSJkw6;wOd7_dOycN?aSfbk)CcBNc41Z45_%)bKaBhfC7g@V91eG7NtA>hi0#q4gdF)o0H+TzC_c?w6)i6 z&ERus=}>TKZ(UH@sLFA0CySHafti1Kr4Bv~+IPVCxVg&vWY(((9&Am08=#-@m9uim eIk$PYStS@IJMm8J(QE|;34^DrpUXO@geCxtri7;e diff --git a/src/main/resources/assets/oc2/textures/item/disk_platter.png b/src/main/resources/assets/oc2/textures/item/disk_platter.png deleted file mode 100644 index 09b989b92772a518f1f6a27db3764af8d9364193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fop#Yx{*KgmxJ$(4^#EBE1KY!k_W5@sh|F3($PzK7fl?3?( z1G)eIGi=_!WIs^E$uA&&Xn5Q{B4If4w{-8-sN$i;C$K&n%#644$rjF6*2UngDxY BPcZ-h diff --git a/src/main/resources/assets/oc2/textures/item/memory1.png b/src/main/resources/assets/oc2/textures/item/memory1.png index 53efb704dc28fba9e72d1b7ad6ed0ecb58422da3..c471c16710ff0487aa72660f616acb62bc23d710 100644 GIT binary patch literal 2038 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU|F9T5>XQ2>tmIipR1RclAn~S zSCLx)lxJYDv9BmdOwLX%QAkQn&&;z`dcS+Wl0s&Rtx~wDuYqrYb81GWM^#a3aFt(3 za#eP+Wr~u$9hXgo70`g()RIJnirk#MVyg;UC9t_xKsHENUr7P1q$Jx`DZ)2E!8yMu zRl!uxRL?-kj!VI&C?(A*$i)q+8OXC$$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N z(gmu}Ew0QfNvzP#D^>;>0WrfRwK%ybv!En1KTiQQ?NYIsRz8p8Cv zVyO3l0ih3)(KpmH&_`CDT9JuEIY!B| zRX}D%YEFbpW^QU;G0;@FD-e>AI3%6(bMlLVfyp`*s0nNrJRYpTa=!T~Kq+H1DNkqT zfTH}g%p9Oxage){f~TvqnW3ebnXZu@#28?tSpoHCrd7HmmH<^585kMr8kp!Bn1&b_ zSeY1FnObNY7+D!WJP1||%nK=rC5eR8gHp7D4N!-#ua!q;aY=qrC0GcO%!5-4Av_2- zClj2$6%@d+Y?YV{3Uynhf};GC(&W?>u(yE5L1c^b(@M${i&7oafe~!0RWQ`Eg!&Dxp*$lMXc%s<=|df+56W;bm)YoJxZMV<04aw8^+CjdIUiVr=)=np zAO~IwrRD*Po+4lwvq~}c0RsbLQzkH0Fk*v&L1SX+#M9nRjw0>$@_|zl16;brgv3}R zZ56UEJ85#SYL)tO>&0331!X(KIWwiVh;l75+bi}}{EAtIEQ_n4%kBlGfwL#w-l?TA z(fG`q{JP?E56?($Xq)8awVmHVYwks+y7k$Kg(pM*cg3bz@4a!jYu!0Eb>}NG@%#}! z)z1x!uYUVoZnD;`lvRiK(BrOEsV&P}(#?!ko!osW*Gp-SR*l}B<(`d)zAuy0{5bpM zN1^{S*0eI&ZP>=K`%$RO$|Ti=OIw~k-4T3pP0+gIHJ!?{=J9vEopiO+kHJ1J#>cp^ zUyx05axDwL^Ow_|QXiR*{;<5J8a6Rjwf&e>p-{>TVN>m!i<6QUxu>d~ocZ_v?QmN& zn~+oQJ~-X&POK?${>vxwsqJHJjzp{Q2HV4-yM*@Fu`Hgy=(+Z+-vV=@3kqW|DpeQk zu-F_%8LgloX{?xV|>~SX! zG(R=`eeaC)gZU@kn(bNUK6`sy_6iq9hDX~ij@P)IbpQ1FyyLBqz1J>e_a3~;uynG} zuj#cFzWs6Y^uBq2nk9EO%{a?MN`!@x)zM*F?&Rol&91zR>GdsK&BTy#e{0~{u!END3_8=j89YKKR2_NvRbWoB zho<7v76B%PfYr8AE0^+hEIRQb^30)>ODEG7{=UN+|LN^B-cwJNo3nWWIuE_5Ynk^V zbywrVlPfKb_(^iTw>LcZyx8J7-=pg{9!M8x@%0{0R(5-~`HDoZ@+R|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1 zY6Dbc6W|l#s%WhUWa{hdOXx@_DJf~VYV6rlD5NYTC@9D&%&8rqee-6Ml!er~b?Z)@ zI_2Wx(%Ra3=gyrubLRa2|KDYbP0l+XkKxXp58 diff --git a/src/main/resources/assets/oc2/textures/item/memory2.png b/src/main/resources/assets/oc2/textures/item/memory2.png index d1522c9b5e50a9621274ddd3d3c46c01dd022153..7197a5831351ae7cd8492ded0b5bac1b86fb7b53 100644 GIT binary patch literal 2039 zcmah~c~BEq7+*D_pokm=!E0RyD_1Tgl_e1&0fG_@mxL| z7G`VXW&=TxZMakt1^%Zp&qOQmJNvI841!p-M2vz~$RbcBsbym-G7)E+w0eL;kTB4s z$CSx94JYCnLMK8V);A(Bp%Ni+elo61FUFGy>3Rbmy?$AYa(%MWUxfrNvJsk4AfUx* z3^r*~bQEe5A!c0^yffPz1U6IXWD%l}$zd^Rz+peOADfFTvVnyLl^Ttbgbo{nl?X|q zX+6r}7>!1@(U(mcG#sA4zdwh|=kWPHfZ;=B=xEI3qod|B5*7^!PALt9o+d~g%xGeX zWEw3(5P-wO;xwUtrLLof!v~4rFbIdo=5k)A<0j%gbOsqk*C&xQNhOi`kpSLsF#?Y= z1nGOXi3!uci!77(;R)UX;t18-`;1UZ8dHf_9RXbPUzsRgVIt%sKIj3aK4v%Z?}V6C zqjJK8rzj+Z7S~Zgb>tMU!1(uoVlss^M1!`*fsxtQNF7i!CL>h<@_h>m7mMWvQca`) zjEV{ihQmX|0-nD>;KOHIWI)kSU`wboBp3}?d@i5o!(HIR^^4(h(FHuzkMG6hqg+dX zW;VDBDvZYdkI!^8ECd!Z87d_xnlxmXw=8WQji*{xmSqZI?r#`2R~f~WOx8t+-ax9- zl(@DK9EiO?G|uqBILw86 zc`_kq)Y*k*!fQ7a*je_#%?BfdGcrTKVq^;8Ixu<+V8*O2U0w}AV{!;kl~L7zp!vmV z#cfN2gPgVm&W@n$3p4;Q=y%)lEr`N?<6Vs1zdJ3mqU1)M=lo*d^E=3F>f-J5u17YPELn2GZn0-&$Jp%JWGuBMcBmjh z9nkP|b3x5Ts}IFjW~{MOL~OXvqq?3xH!e6Fnl|3sw&`xcAv||~u13H=)KcH1U4oqQ z%w*r(AHK0^;G0<<{S__!4nt+td1DtHIXiSAYVa(jACMz>T))tt-BpIg4u zuHg5QuKZwtI; zEBe^R;7IF(6~F4vRBfu#>DYJrdJ`*eO8RFn%&(v(e3J9Y>8+J+h3#LL{bO$k-~5}Z z>Q;=`&YqhaOqbf4{U;2%ULVNmr0@L{P!#>66q+iuDv$T;IS^3ZySD4vtLERT;Jy5hLbgBKo`r2>p zpMAgFDa6r_=TOJ0^G&Lpkyz)v&E?!(VbS7iO|4H0ybo`Kq_-TQJ3$eTN`TjbMcdY9 zr|!&UO+F2EcX*VIpEYaiJ)^efhg+BD&3<7woeO; z^=%1#Pm=eA@eXvYJ9?v`xbkA&G40B+m#-gn$}Bq?3SA1=^=$v9((Iv_6`pa9tiCz! z9)t3Rab>AR>aJ46p+G)4Z-s&_R|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1 zY6Dc{5#STzs%WhUWJ>5r=SL?Nuc*OX~eOmCZ;a|mj#*Ldg=5{QKceyZm zO=B*XLiX$lEH0NFrWV|AS1rSoD({nmy09gBN+H7#!UQqW#{dDeEVi`5&}e0Xti j)1igIhec-jH!w1!pXC3f{?5`BXfcDQtDnm{r-UW|^#_AN diff --git a/src/main/resources/assets/oc2/textures/item/memory3.png b/src/main/resources/assets/oc2/textures/item/memory3.png index 2a851fa245076a757c153c25eeb3cd15fdd81b61..95f4354c538ae7c6f18b07b56fdaa27e2bddaa6f 100644 GIT binary patch literal 1992 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU|F9T5>XQ2>tmIipR1RclAn~S zSCLx)lxJYDv9BmdOwLX%QAkQn&&;z`dcS+Wl0s&Rtx~wDuYqrYb81GWM^#a3aFt(3 za#eP+Wr~u$9hXgo70`g()RIJnirk#MVyg;UC9t_xKsHENUr7P1q$Jx`DZ)2E!8yMu zRl!uxRL?-kj!VI&C?(A*$i)q+8OXC$$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N z(gmu}Ew0QfNvzP#D^>;>0WrfRwK%ybv!En1KTiQQ?NYIsRz8p8Cv zVyO3l0ih3)(KpmH&_`CDT9JuEIY!B| zRX}D%YEFbpW^QU;G0;@FD-e>AI3%6(bMlLVfyp`*s0nNrJRYpTa=!T~Kq+H1DNkqT zfTH}g%p9Oxage){f~TvqnW3ebnXZu@#28?tSpoHCrd7HmmH<^585kMr8kp!Bn1&b_ zSeY1FnV4!D7+D!WJP1||%nK=rC5eR8gHp7D4N!-#ua!q;aY=qrC0GcO%!5-4Av_2- zClj2$6%@d+Y?YV{3Uynhf};GC(&W?>u(yE5L1c^b(@M${i&7oafe~!0RWQ`Eg!&Dxp*$lMXc%s<=|df+56W;bm)YoJxZMV<04aw8^+CjdIUiVr=)=np zAO~IwrRD*Po+4lwqrc?WB?bn@rc7Y0V8jLkgT}dseW;`t+d zs-GJcU;XyG++?j=DXR|ep~qdTQd^d{q?;M7I=TB$u9wmtts1>M%RL(peP1T0`EmBi zk3#=vtZ8Mk+pvve_oGmml}V}#m$p28x+D1HnxJ*ZYdV!@&ExNSJLzhtAA@~djE`|+ zzaX3B(lomf-i{FhJUQ`^Vd9En!p4Yr3vcM0vUV_7_Z(R1xtzXj$*7Zk=`RH`o6 z$t&xh6~Qg8I$I}OhwXj(g*_Z=w_n&1^D6S^yvyz!xu?SK9{9)jrDK2bQ*pDq=@<5| z>9qpZ7Mukhk;M!Q+`=Ht$S`Y;1TcyWJzX3_EP9ttHuOI1AklWe!&yNjc!I;iEvieh z^G`$wvS?2E*Z7a+zoWRj<_~@us~y%HP4){{H*?79I3)?bVbzmtdY<}Yj?1IDQYX#t z*6z7~`nTsz!Ys>z~H zu|?x+iq>jXh6V$kgO>V||E4&sK9|@okzDds6jpiRZ4Bfh~&N}x_Zl8qApUDSnjI{1vU41CccyZb9Kjmz% zd=>r9@c3wF%s=^dw@T}k7Nd#N_U2FaSz;Ev+Kxdtr+Ze>j1`AK6|kqPpUXO@geCx_ CD8yU< delta 265 zcmX@XKa**KWIZzj1A~Sxe=v}eEOCt}3C>R|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1 zY6Dbc9N-h;3Z(V*^_7&A6s;8{bR_odDHIeG)Ns|{6y_9C7P@(}$;HKG(WPq}Zr+iy zkm@;p=KufyPPdaU1GNd31o;I6xiC-m8vv9Xno6V_5HZ;5bu{3v)_yxx~av9PLxwEROt_ zdD`8w*o5V`b3rxZ_aJQIS^4#*sEP;Zj~+zT?2@>G}(GI4V9p;ha(T`5CYB3`Uj+UW@8)I#b#? z@9nES&2WX;oFQF8#;!)9=lh$R%+K=g>=5)>%*-P$AtCXn-BMIq;TEe4^91e*8#in) zIN@1gxT(s5x$XLzNaiI1U*=dA2fWY>Ue=H)A$OLWhlhdn*5qpMoZkgNmoj*|`njxg HN@xNAv1D1* diff --git a/src/main/resources/assets/oc2/textures/item/network_interface_card.png b/src/main/resources/assets/oc2/textures/item/network_interface_card.png index 6a0df6f11f0016de70861087e00c872878f2e11c..63249116414989afffb338c0f566522ead5d010f 100644 GIT binary patch literal 1944 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU|F9T5>XQ2>tmIipR1RclAn~S zSCLx)lxJYDv9BmdOwLX%QAkQn&&;z`dcS+Wl0s&Rtx~wDuYqrYb81GWM^#a3aFt(3 za#eP+Wr~u$9hXgo70`g()RIJnirk#MVyg;UC9t_xKsHENUr7P1q$Jx`DZ)2E!8yMu zRl!uxRL?-kj!VI&C?(A*$i)q+8OXC$$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N z(gmu}Ew0QfNvzP#D^>;>0WrfRwK%ybv!En1KTiQQ?NYIsRz8p8Cv zVyO3l0ih3)(KpmH&_`CDT9JuEIY!B| zRX}D%YEFbpW^QU;G0;@FD-e>AI3%6(bMlLVfyp`*s0nNrJRYpTa=!T~Kq+H1DNkqT zfTH}g%p9Oxage){f~TvqnW3ebnXZu@#28?tSpoHCrd7HmmH<^585kMr8kp!Bn1&b_ zSeaN@85n9C7+D!WJP1||%nK=rC5eR8gHp7D4N!-#ua!q;aY=qrC0GcO%!5-4Av_2- zClj2$6%@d+Y?YV{3Uynhf};GC(&W?>u(yE5L1c^b(@M${i&7oafe~!0RWQ`Eg!&Dxp*$lMXc%s<=|df+56W;bm)YoJxZMV<04aw8^+CjdIUiVr=)=np zAO~IwrRD*Po+4lwGdJJtC<6myQzkH0Fk*v&L1SX+#M9nRjw0>$@_|zl16;brgv3}R zZ56UEJ85#SYL)tO>&0331!X(KIWwiVh;l75+bi}}{EAtIEQ_n4%kBlGfwL#w-l?TA z(fG`q{JP?E56?($Xq)8awVmHVYwks+y7k$Kg(pM*cg3bz@4a!jYu!0Eb>}NG@%#}! z)z1x!uYUVoZnD;`lvRiK(BrOEsV&P}(#?!ko!osW*Gp-SR*l}B<(`d)zAuy0{5bpM zN1^{S*0eI&ZP>=K`%$RO$|Ti=OIw~k-4T3pP0+gIHJ!?{=J9vEopiO+kHJ1J#>cp^ zUyx05axDwL^Ow_|QXiR*{;<5J8a6Rjwf&e>p-{>TVN>m!i<6QUxu>d~ocZ_v?QmN& zn~+oQJ~-X&POK?${>vxwsqJHJjzp{Q2HV4-yM*@Fu`Hgy=(+Z+-vV=@3kqW|DpeQk z(cJ1{?6B#LE zS%wYu4HJYm?mevbL5@WxHs+I=)Y<+C%QU4AYP$&}+%gLk5j<|_Ry-&WtVbNBHFe|p|L{dxScW=mqk)g70zUWT5( z+&AUc#G6!(p|fGg@ktP%2O~gVPa?BvL!`QNy*B}NP+M zPhWO!s#q8x+$<2Jb-nt;t;+J%*LYm6X6UY$aoPIvOuxRP9U~iq%_TXDlnv7+0xen;yvL6>Xa;NQMCdTcG3Y1gGk8kv+EvOR&hY>L{~5ueQ9#qgN`m}?fm}?$ zzH~xo|c?Zpm6YwR%`Ml){QeytjJh(H?iGvN#e6^)}^Ao&Dm!wXFKSunZDuv z561->8#fAsCg@I5N!5EADZn^$-qD))7klr2f429>o$v-m2JwELr60vqcK{v2;OXk; Jvd$@?2>@sqidg^v diff --git a/src/main/resources/assets/oc2/textures/item/redstone_interface_card.png b/src/main/resources/assets/oc2/textures/item/redstone_interface_card.png index 922988e04f52e67d682dedb9945571f9d2e9bd26..b8b13a7978ee8be4146d22d8c654de494e0e74ea 100644 GIT binary patch literal 1980 zcmah~Yfuwc7+nPsu@poB!Pj;bMIPBCKqM=HLc+5oMF<8)P?uzrERbx-Zb(qTQ9uOi zC`elh76Ge{h)Bm)MN}Mo4Qd%3wAEUs){cYqS=7>2htj(NK}FjiyPJE@`OdxHcfNa5 zmLQ9EbntY5AjmN`Mv@4=&g^4v2j26Z4&e}Fdytf;Fe%b_OiAfDxQfakI2N4&;1CoN zW-;K(EP{bE2o0$hA&=WT5SUbn5JixbD>aA-Eg7@MNF=S1$(3ueltL8}7U~dU!GM5{ zU~t%?%huDFMTA&&G4Pw6MiJObVX{O>iZlThQ$_*~;skNHNT>rGVpOTIL`l?0Fc^st zEyEZv6g8X89CHANGHOtsP$)#Xe3Z}k2Mm8YPtV{Me?2{)l^E8L5VX=r8W@t&!>lHr zL75m4f&d&I5obvCn7W=GNgosfWf7Fe;i9k72@ClSI*W{>8?+Qd(OSwdn!syIjKbpr zLHXVuV!;h>BTJ?KP1osOOM_-2b3q|Siu&4~UM@h(^9%%)`?_236|!Mg`|vOB4i04^Z@IRb(z$+LTstA z1kyrer$|U0p{IfB=q|><)OUblDw{GUfwm?rBnb4cms+RixZ5Ln#=|m zofsVf$3}_;JfT3~&*u!w0MjrKORDoEI0IOGE}!Sm4fN**$+=uCP>6APzFa=W9Zt~7 z24_KqGx-1U*^Y)oK!j9^#gH^Z8S|`D!)=~Kf!4-mz-XUNxdJ7SHaP=6$9TV(v5`&-#8%W^FI5!~3yTVj) z@uP_F8Kq(KmQ~>ilFe=|ZnhpGII|~W@zkag&u2g0{Vuvbw@opHob`>XL!;n?+aK;% z1==~bk<%pY^`>RDl{edbyek4O?Vt+j?q4o>v~H}7i#y`)YY8Waz4LoeodWI z`NPU0YJhJab%Bcc%yW-q@9) zY>Xxrc6~88bW zQwM#=UC^t!+|j%RxB*Qu#H7*?G<7=rOn_>3%mfyB#Y)2E!CQJOPRKe}&)B&0a8>3$ z`PoS}Bz_FRDFMyK+POlKS?rqNK?#)Typ;mj&L%)l{o)Q~qEMysa9t zkv*679T(^4Km5!vny(I>njY*9Gqyz*6T)leLOH;Ga*O!fp%|=8-%RsBe-=CYGTSHGnOh!yp zN|c?4-AYk$*RH$?;o%oAW*C?oIC?uOYbYBT8O@B1HM295SCi)x;`0pj42TT)|Ns94 zF7c^AN9dFU`2_>H!~%xn*EoBC`cgby978H@^_(~7JD?!o64+G8@_bJ5t>5?0^PUhA z-Cr{+O&~*&*})@T!r}g|yq#;_FJ2%KWF#9};I+X(P34~Ktv?5LHXGhmX{oGbEla!X u$Jp?``rg?YEi4Hl6B{zj{x15;X~5uNuUw?B$i@P+kHOQ`&t;ucLK6U>37mTX diff --git a/src/main/resources/assets/oc2/textures/item/transistor.png b/src/main/resources/assets/oc2/textures/item/transistor.png index 32d017f420f4a61e0ebbf14236996fb6f3d0d6f0..54fc888580e77cd52ea660e1f6802d38d474c1bd 100644 GIT binary patch literal 1862 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU|F9T5>XQ2>tmIipR1RclAn~S zSCLx)lxJYDv9BmdOwLX%QAkQn&&;z`dcS+Wl0s&Rtx~wDuYqrYb81GWM^#a3aFt(3 za#eP+Wr~u$9hXgo70`g()RIJnirk#MVyg;UC9t_xKsHENUr7P1q$Jx`DZ)2E!8yMu zRl!uxRL?-kj!VI&C?(A*$i)q+8OXC$$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N z(gmu}Ew0QfNvzP#D^>;>0WrfRwK%ybv!En1KTiQQ?NYIsRz8p8Cv zVyO3l0ih3)(KpmH&_`CDT9JuEIY!B| zRX}D%YEFbpW^QU;G0;@FD-e>AI3%6(bMlLVfyp`*s0nNrJRYpTa=!T~Kq+H1DNkqT zfTH}g%p9Oxage){f~TvqnW3ebnXZu@#28?tSpoHCrd7HmmH<^585kMr8kp!Bn1&b_ zSeckunVM=F7+D!WJP1||%nK=rC5eR8gHp7D4N!-#ua!q;aY=qrC0GcO%!5-4Av_2- zClj2$6%@d+Y?YV{3Uynhf};GC(&W?>u(yE5L1c^b(@M${i&7oafe~!0RWQ`Eg!&Dxp*$lMXc%s<=|df+56W;bm)YoJxZMV<04aw8^+CjdIUiVr=)=np zAO~IwrRD*Po+4lwGx@>kI}8krO_{)0!H5k8291fO6Hj|PIf}H~%Lh(L3~=cd6B1*Q zv{lHu?4-%Ps#WUCtrutA7nJP`=ggGeBFeSMY_Hf?@hfH-vMjEGF1r_$2F{*zd#9Gh zMB_7a^6QGvJv<}1p>2|v*LHpft+^MO>ego`7M=|K-xZr?z4yl9u65_w)Sa)$#Pdh^ zR6jQ?zWVKVxyf3$QdS+_Lyx;wrM4_@NjEcEb#nKiTrZ_PS~YrimU}iH`o2s~^W*H3 zABFzUSkua6w_zK{?nj|AE0a_gE^T@GbVu;XH9_l+*K{h+n#bSucGA^OKL-1_7$4)t zenB?L$+ax}&R?YS_eB)%Igjg+eJWgiW22bs8n6B zlULS1D}q~Gb+%5n4%_?m3wt=$ZojZ2=2hg+d6(Tea!-ZdJ@Ak5OUM4=r{ZRJ(=Y5_ z(`yB+EjSB2B8wRqxP?KOkzv*x383J5PZ!4!i{7&n9Qm3Y1XxbTDm*;Jx&KIUg^K)y zA52Lq2f8F4Hl*1~GFuCMSycOSiE*s4DF*LlduJ~2@_HEwLO&lv$PqMhjB;YE@a7?0W zkpSbl;6nyAyYnR2(&IvAEerc}_0*;_UV5IojlcHI|B-bd=;31Sc~;xsmNzVY^#28; Xs*Sq^U!zVIsQUAC^>bP0l+XkKwIqlL delta 204 zcmX@ccb9R3WIZzj1A~Sxe=v}eEOCt}3C>R|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1 zY6Dax9pDq<3Z(b!*&`~*rK+lW?AS4LbMv)p)|eaX{Qv*|`MmrkKxxjBAirQB7YrDJ z{VRlkg3g{Ujv*DdYR-G|F(_~_JLI_jb^YJ18W&-*ZM&ye(;A^lXZyd-o7pn-B_!RL wLRA^tHP!j{Fihi6c