Added HDD Crafting Recipe (NBT Crafting)
This commit is contained in:
@@ -9,6 +9,7 @@ import li.cil.oc2.common.bus.device.data.BaseBlockDevices;
|
||||
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.customrecipes.CustomRecipes;
|
||||
import li.cil.oc2.common.item.Items;
|
||||
import li.cil.oc2.common.serialization.serializers.Serializers;
|
||||
import li.cil.oc2.common.tileentity.TileEntities;
|
||||
@@ -16,6 +17,7 @@ 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)
|
||||
@@ -33,7 +35,7 @@ public final class Main {
|
||||
DeviceTypes.initialize();
|
||||
BaseBlockDevices.initialize();
|
||||
Firmwares.initialize();
|
||||
|
||||
CustomRecipes.initialize();
|
||||
FMLJavaModLoadingContext.get().getModEventBus().register(CommonSetup.class);
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().register(ClientSetup.class));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
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<IRecipeSerializer<?>> INITIALIZER = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, API.MOD_ID);
|
||||
|
||||
public static final RegistryObject<HDDRecipe.Serializer> HDD_RECIPE = INITIALIZER.register("hard_drive", HDDRecipe.Serializer::new);
|
||||
|
||||
public static void initialize() {
|
||||
INITIALIZER.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||
}
|
||||
}
|
||||
108
src/main/java/li/cil/oc2/common/customrecipes/HDDRecipe.java
Normal file
108
src/main/java/li/cil/oc2/common/customrecipes/HDDRecipe.java
Normal file
@@ -0,0 +1,108 @@
|
||||
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<Item> WRITTEN_BOOK = 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(WRITTEN_BOOK.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<IRecipeSerializer<?>> implements IRecipeSerializer<HDDRecipe> {
|
||||
@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());
|
||||
}
|
||||
}
|
||||
3
src/main/resources/data/oc2/recipes/hard_drive.json
Normal file
3
src/main/resources/data/oc2/recipes/hard_drive.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "oc2:hard_drive"
|
||||
}
|
||||
Reference in New Issue
Block a user