diff --git a/changelog b/changelog index a2b6a0de9..8e403af29 100644 --- a/changelog +++ b/changelog @@ -10,6 +10,11 @@ * Rebar placer * Can be configured with different types of concrete, reinforced or not, or even colored * Rebar created with the rebar placer will remember its type and assume it when being filled with liquid concrete +* PUREX + * Chemplant-like nuclear fuel reprocessing machine + * Handles all the nuclear fuel reprocessing that was previously done by the standard centrifuge + * All reprocessing recipes now require both kerosene and nitric acid + * Also handles the vitrification recipes and the thorium salt reprocessing from the chemical plant ## Changed * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f9d312fa8..8e08eac42 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1015,6 +1015,7 @@ public class ModBlocks { public static Block machine_chemical_plant; public static Block machine_chemfac; public static Block machine_chemical_factory; + public static Block machine_purex; public static Block machine_mixer; public static Block machine_fluidtank; @@ -2245,6 +2246,7 @@ public class ModBlocks { machine_chemical_plant = new MachineChemicalPlant(Material.iron).setBlockName("machine_chemical_plant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemfac = new MachineChemfac(Material.iron).setBlockName("machine_chemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemical_factory = new MachineChemicalFactory(Material.iron).setBlockName("machine_chemical_factory").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_purex = new MachinePUREX(Material.iron).setBlockName("machine_purex").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_mixer = new MachineMixer(Material.iron).setBlockName("machine_mixer").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_fluidtank = new MachineFluidTank(Material.iron).setBlockName("machine_fluidtank").setHardness(5.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fluidtank"); machine_bat9000 = new MachineBigAssTank9000(Material.iron).setBlockName("machine_bat9000").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3299,6 +3301,7 @@ public class ModBlocks { register(machine_chemical_plant); register(machine_chemfac); register(machine_chemical_factory); + register(machine_purex); register(machine_arc_welder); register(machine_soldering_station); register(machine_arc_furnace); diff --git a/src/main/java/com/hbm/blocks/machine/MachinePUREX.java b/src/main/java/com/hbm/blocks/machine/MachinePUREX.java new file mode 100644 index 000000000..461509da8 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachinePUREX.java @@ -0,0 +1,54 @@ +package com.hbm.blocks.machine; + +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachinePUREX; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachinePUREX extends BlockDummyable implements ITooltipProvider { + + public MachinePUREX(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachinePUREX(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override public int[] getDimensions() { return new int[] {4, 0, 2, 2, 2, 2}; } + @Override public int getOffset() { return 2; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) { + if(Math.abs(i) == 2 || Math.abs(j) == 2) this.makeExtra(world, x + i, y, z + j); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } +} diff --git a/src/main/java/com/hbm/handler/nei/PUREXRecipeHandler.java b/src/main/java/com/hbm/handler/nei/PUREXRecipeHandler.java new file mode 100644 index 000000000..c5405fbf0 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/PUREXRecipeHandler.java @@ -0,0 +1,13 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.PUREXRecipes; + +public class PUREXRecipeHandler extends NEIGenericRecipeHandler { + + public PUREXRecipeHandler() { + super(ModBlocks.machine_purex.getLocalizedName(), PUREXRecipes.INSTANCE, ModBlocks.machine_purex); + } + + @Override public String getRecipeID() { return "ntmPUREX"; } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachinePUREX.java b/src/main/java/com/hbm/inventory/container/ContainerMachinePUREX.java new file mode 100644 index 000000000..4b28d9da9 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachinePUREX.java @@ -0,0 +1,74 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.util.InventoryUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachinePUREX extends ContainerBase { + + public ContainerMachinePUREX(InventoryPlayer invPlayer, IInventory chemicalPlant) { + super(invPlayer, chemicalPlant); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 0, 152, 81)); + // Schematic + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 1, 35, 126)); + // Upgrades + this.addSlots(chemicalPlant, 2, 152, 108, 2, 1); + // Solid Input + this.addSlots(chemicalPlant, 4, 8, 90, 1, 3); + // Solid Output + this.addOutputSlots(invPlayer.player, chemicalPlant, 7, 80, 36, 3, 2); + + this.playerInv(invPlayer, 8, 174); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 7, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java new file mode 100644 index 000000000..3cb1b0108 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java @@ -0,0 +1,126 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachinePUREX; +import com.hbm.inventory.recipes.PUREXRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachinePUREX; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIMachinePUREX extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_purex.png"); + private TileEntityMachinePUREX purex; + + public GUIMachinePUREX(InventoryPlayer invPlayer, TileEntityMachinePUREX tedf) { + super(new ContainerMachinePUREX(invPlayer, tedf)); + purex = tedf; + + this.xSize = 176; + this.ySize = 256; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + for(int i = 0; i < 3; i++) { + purex.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 52); + } + purex.outputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 36, 16, 52); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, purex.power, purex.maxPower); + + if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { + if(this.purex.purexModule.recipe != null && PUREXRecipes.INSTANCE.recipeNameMap.containsKey(this.purex.purexModule.recipe)) { + GenericRecipe recipe = (GenericRecipe) PUREXRecipes.INSTANCE.recipeNameMap.get(this.purex.purexModule.recipe); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + } + } + } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PUREXRecipes.INSTANCE, purex, purex.purexModule.recipe, 0, ItemBlueprints.grabPool(purex.slots[1]), this); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.purex.hasCustomInventoryName() ? this.purex.getInventoryName() : I18n.format(this.purex.getInventoryName()); + + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int p = (int) (purex.power * 61 / purex.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); + + if(purex.purexModule.progress > 0) { + int j = (int) Math.ceil(70 * purex.purexModule.progress); + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + } + + GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purex.purexModule.recipe); + + /// LEFT LED + if(purex.didProcess) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); + } + + /// RIGHT LED + if(purex.didProcess) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null && purex.power >= recipe.power) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); + } + + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(purex.purexModule.inputSlots[i]); + if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1F, 1F, 1F, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + this.zLevel = 300F; + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(purex.purexModule.inputSlots[i]); + if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16); + } + this.zLevel = 0F; + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + + for(int i = 0; i < 3; i++) { + purex.inputTanks[i].renderTank(guiLeft + 8 + i * 18, guiTop + 70, this.zLevel, 16, 52); + } + purex.outputTanks[0].renderTank(guiLeft + 116, guiTop + 88, this.zLevel, 16, 52); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index 027efb67d..c3927a396 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -26,7 +26,6 @@ import com.hbm.items.ItemEnums; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.special.ItemBedrockOreNew; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; @@ -50,229 +49,6 @@ public class CentrifugeRecipes extends SerializableRecipe { boolean lbs = GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleCentrifuge; - recipes.put(new ComparableStack(ModItems.waste_natural_uranium), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 1), - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_pu239, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_uranium), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_plutonium, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_thorium), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 1), - new ItemStack(ModItems.nugget_th232, 1), - new ItemStack(ModItems.nugget_u233, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_mox), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nugget_u238, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_plutonium), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_u233), new ItemStack[] { - new ItemStack(ModItems.nugget_u235, 1), - new ItemStack(ModItems.nugget_neptunium, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_u235), new ItemStack[] { - new ItemStack(ModItems.nugget_pu238, 1), - new ItemStack(ModItems.nugget_neptunium, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_schrabidium), new ItemStack[] { - new ItemStack(ModItems.nugget_beryllium, 2), - new ItemStack(ModItems.nugget_pu239, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_zfb_mox), new ItemStack[] { - new ItemStack(ModItems.nugget_zirconium, 3), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 1) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_mox), new ItemStack[] { - new ItemStack(ModItems.powder_sr90_tiny, 1), - new ItemStack(ModItems.nugget_pu_mix, 3), - new ItemStack(ModItems.powder_cs137_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 4) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_pu238be), new ItemStack[] { - new ItemStack(ModItems.nugget_beryllium, 1), - new ItemStack(ModItems.nugget_pu238, 1), - new ItemStack(ModItems.powder_coal_tiny, 2), - new ItemStack(ModItems.nugget_lead, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_pu239), new ItemStack[] { - new ItemStack(ModItems.nugget_pu240, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.powder_cs137_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_ra226be), new ItemStack[] { - new ItemStack(ModItems.nugget_beryllium, 2), - new ItemStack(ModItems.nugget_polonium, 2), - new ItemStack(ModItems.powder_coal_tiny, 1), - new ItemStack(ModItems.nugget_lead, 1) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_sa326), new ItemStack[] { - new ItemStack(ModItems.nugget_solinium, 1), - new ItemStack(ModItems.powder_neodymium_tiny, 1), - new ItemStack(ModItems.nugget_tantalium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_u233), new ItemStack[] { - new ItemStack(ModItems.nugget_u235, 1), - new ItemStack(ModItems.powder_i131_tiny, 1), - new ItemStack(ModItems.powder_sr90_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_u235), new ItemStack[] { - new ItemStack(ModItems.nugget_neptunium, 1), - new ItemStack(ModItems.nugget_pu238, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.SCHRABIDIUM)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 15), - new ItemStack(ModItems.nugget_euphemium, 3), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HES)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 17), - new ItemStack(ModItems.nugget_euphemium, 1), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MES)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 12), - new ItemStack(ModItems.nugget_tantalium, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LES)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 9), - new ItemStack(ModItems.nugget_tantalium, 9), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HEN)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_pu239, 12), - new ItemStack(ModItems.nugget_technetium, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEU)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_pu239, 12), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEP)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_pu241, 12), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LEAD)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_lead, 6), - new ItemStack(ModItems.nugget_bismuth, 12), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.BORON)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.powder_coal_tiny, 12), - new ItemStack(ModItems.nugget_co60, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.DU)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_polonium, 12), - new ItemStack(ModItems.nugget_pu238, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEU)), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 3), - new ItemStack(ModItems.nugget_plutonium, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEU233)), new ItemStack[] { - new ItemStack(ModItems.nugget_u235, 3), - new ItemStack(ModItems.nugget_pu238, 3), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEU235)), new ItemStack[] { - new ItemStack(ModItems.nugget_neptunium, 3), - new ItemStack(ModItems.nugget_pu238, 3), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEN)), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 3), - new ItemStack(ModItems.nugget_pu239, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEN237)), new ItemStack[] { - new ItemStack(ModItems.nugget_pu238, 2), - new ItemStack(ModItems.nugget_pu239, 4), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MOX)), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 3), - new ItemStack(ModItems.nugget_pu240, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEP)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 2), - new ItemStack(ModItems.nugget_pu_mix, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEP239)), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_pu240, 4), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEP241)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 3), - new ItemStack(ModItems.nugget_zirconium, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEA)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 3), - new ItemStack(ModItems.nugget_zirconium, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEA242)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 3), - new ItemStack(ModItems.nugget_zirconium, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HES326)), new ItemStack[] { - new ItemStack(ModItems.nugget_solinium, 3), - new ItemStack(ModItems.nugget_lead, 2), - new ItemStack(ModItems.nugget_euphemium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HES327)), new ItemStack[] { - new ItemStack(ModItems.nugget_australium, 4), - new ItemStack(ModItems.nugget_lead, 1), - new ItemStack(ModItems.nugget_euphemium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_AM_MIX)), new ItemStack[] { - new ItemStack(ModItems.nugget_am_mix, 9), - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste_tiny, 1) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_PU241)), new ItemStack[] { - new ItemStack(ModItems.nugget_pu241, 9), - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste_tiny, 1) }); - recipes.put(new ComparableStack(ModItems.icf_pellet_depleted), new ItemStack[] { new ItemStack(ModItems.icf_pellet_empty, 1), new ItemStack(ModItems.pellet_charged, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index f3b759658..a5f5736b0 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -317,29 +317,6 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.KEROSENE, 6_000)) .outputItems(new ItemStack(ModItems.powder_balefire)) .outputFluids(new FluidStack(Fluids.BALEFIRE, 8_000))); - - this.register(new GenericRecipe("chem.thoriumsalt").setup(100, 10_000).setIcon(ModItems.fluid_icon, Fluids.THORIUM_SALT.getID()) - .inputFluids(new FluidStack(Fluids.THORIUM_SALT_DEPLETED, 16_000)) - .inputItems(new OreDictStack(TH232.nugget(), 2)) - .outputFluids(new FluidStack(Fluids.THORIUM_SALT, 16_000)) - .outputItems( - new ChanceOutput(new ItemStack(ModItems.nugget_u233, 1), 0.5F), - new ChanceOutput(new ItemStack(ModItems.nuclear_waste_tiny, 1), 0.25F))); - - /// VITRIFICATION /// - this.register(new GenericRecipe("chem.vitliquid").setup(100, 1_000) - .inputItems(new ComparableStack(ModBlocks.sand_lead)) - .inputFluids(new FluidStack(Fluids.WASTEFLUID, 1_000)) - .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); - - this.register(new GenericRecipe("chem.vitgaseous").setup(100, 1_000) - .inputItems(new ComparableStack(ModBlocks.sand_lead)) - .inputFluids(new FluidStack(Fluids.WASTEGAS, 1_000)) - .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); - - this.register(new GenericRecipe("chem.vitsolid").setup(300, 1_000) - .inputItems(new ComparableStack(ModBlocks.sand_lead), new ComparableStack(ModItems.nuclear_waste, 4)) - .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified, 4))); /// OSMIRIDIUM /// this.register(new GenericRecipe("chem.osmiridiumdeath").setup(240, 1_000) diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java new file mode 100644 index 000000000..65dd62fe8 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -0,0 +1,436 @@ +package com.hbm.inventory.recipes; + +import static com.hbm.inventory.OreDictManager.*; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; + +import net.minecraft.item.ItemStack; + +public class PUREXRecipes extends GenericRecipes { + + public static final PUREXRecipes INSTANCE = new PUREXRecipes(); + + @Override public int inputItemLimit() { return 3; } + @Override public int inputFluidLimit() { return 3; } + @Override public int outputItemLimit() { return 6; } + @Override public int outputFluidLimit() { return 1; } + + @Override public String getFileName() { return "hbmPUREX.json"; } + @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } + + @Override + public void registerDefaults() { + + long zirnoxPower = 1_000; + long platePower = 1_500; + long pwrPower = 2_500; + long watzPower = 10_000; + long vitrification = 1_000; + + // ZIRNOX + this.register(new GenericRecipe("purex.zirnoxnu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_natural_uranium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_natural_uranium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxthmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_thorium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nugget_th232, 1), + new ItemStack(ModItems.nugget_u233, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_mox)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxmep").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plutonium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxheu233").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_u233)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u235, 1), + new ItemStack(ModItems.nugget_neptunium, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxheu235").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_u235)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu238, 1), + new ItemStack(ModItems.nugget_neptunium, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxles").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_schrabidium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxzfbmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_zfb_mox)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_zirconium, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 1)) + .setIconToFirstIngredient()); + + // Plate Fuel + this.register(new GenericRecipe("purex.platemox").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_mox)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.powder_sr90_tiny, 1), + new ItemStack(ModItems.nugget_pu_mix, 3), + new ItemStack(ModItems.powder_cs137_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 4)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platepu238be").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_pu238be)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_beryllium, 1), + new ItemStack(ModItems.nugget_pu238, 1), + new ItemStack(ModItems.powder_coal_tiny, 2), + new ItemStack(ModItems.nugget_lead, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platepu239").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_pu239)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu240, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.powder_cs137_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platera226be").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_ra226be)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), + new ItemStack(ModItems.nugget_polonium, 2), + new ItemStack(ModItems.powder_coal_tiny, 1), + new ItemStack(ModItems.nugget_lead, 1)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platesa326").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_sa326)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 1), + new ItemStack(ModItems.powder_neodymium_tiny, 1), + new ItemStack(ModItems.nugget_tantalium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.plateu233").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_u233)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u235, 1), + new ItemStack(ModItems.powder_i131_tiny, 1), + new ItemStack(ModItems.powder_sr90_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.plateu235").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_u235)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_neptunium, 1), + new ItemStack(ModItems.nugget_pu238, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + // PWR + this.register(new GenericRecipe("purex.pwrmeu").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEU)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_plutonium, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrheu233").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU233)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u235, 3), + new ItemStack(ModItems.nugget_pu238, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrheu235").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU235)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_neptunium, 3), + new ItemStack(ModItems.nugget_pu238, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmen").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEN)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_pu239, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhen237").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEN237)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu238, 2), + new ItemStack(ModItems.nugget_pu239, 4), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmox").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MOX)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_pu240, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmep").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEP)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 2), + new ItemStack(ModItems.nugget_pu_mix, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhep239").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP239)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_pu240, 4), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhep241").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP241)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmea").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEA)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhea242").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEA242)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhes326").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES326)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 3), + new ItemStack(ModItems.nugget_lead, 2), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhes327").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES327)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_australium, 4), + new ItemStack(ModItems.nugget_lead, 1), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrbfbam").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_AM_MIX)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_am_mix, 9), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste_tiny, 1)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrbfpu241").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_PU241)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu241, 9), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste_tiny, 1)) + .setIconToFirstIngredient()); + + // Molten Salt + this.register(new GenericRecipe("purex.thoriumsalt").setup(100, 10_000).setIcon(ModItems.fluid_icon, Fluids.THORIUM_SALT.getID()) + .inputFluids(new FluidStack(Fluids.THORIUM_SALT_DEPLETED, 16_000)) + .inputItems(new OreDictStack(TH232.nugget(), 2)) + .outputFluids(new FluidStack(Fluids.THORIUM_SALT, 16_000)) + .outputItems( + new ChanceOutput(new ItemStack(ModItems.nugget_u233, 1), 0.5F), + new ChanceOutput(new ItemStack(ModItems.nuclear_waste_tiny, 1), 0.25F))); + + // Watz + this.register(new GenericRecipe("purex.watzschrab").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.SCHRABIDIUM)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 15), + new ItemStack(ModItems.nugget_euphemium, 3), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzhes").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HES)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 17), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzmes").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MES)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 12), + new ItemStack(ModItems.nugget_tantalium, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzles").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LES)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 9), + new ItemStack(ModItems.nugget_tantalium, 9), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzhen").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HEN)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_technetium, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzmeu").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEU)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzmep").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEP)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu241, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzlead").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LEAD)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 6), + new ItemStack(ModItems.nugget_bismuth, 12), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzboron").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.BORON)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.powder_coal_tiny, 12), + new ItemStack(ModItems.nugget_co60, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.DU)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_polonium, 12), + new ItemStack(ModItems.nugget_pu238, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + /// Vitrification + this.register(new GenericRecipe("purex.vitliquid").setup(100, vitrification) + .inputItems(new ComparableStack(ModBlocks.sand_lead)) + .inputFluids(new FluidStack(Fluids.WASTEFLUID, 1_000)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); + + this.register(new GenericRecipe("purex.vitgaseous").setup(100, vitrification) + .inputItems(new ComparableStack(ModBlocks.sand_lead)) + .inputFluids(new FluidStack(Fluids.WASTEGAS, 1_000)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); + + this.register(new GenericRecipe("purex.vitsolid").setup(300, vitrification) + .inputItems(new ComparableStack(ModBlocks.sand_lead), new ComparableStack(ModItems.nuclear_waste, 4)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified, 4))); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 0b41f634a..91a8d99a4 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -21,8 +21,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; public class GenericRecipe { - + protected final String name; + public String nameWrapper; public AStack[] inputItem; public FluidStack[] inputFluid; public IOutput[] outputItem; @@ -51,6 +52,7 @@ public class GenericRecipe { public GenericRecipe setPower(long power) { this.power = power; return this; } public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } public GenericRecipe setupNamed(int duration, long power) { return this.setDuration(duration).setPower(power).setNamed(); } + public GenericRecipe setNameWrapper(String wrapper) { this.nameWrapper = wrapper; return this; } public GenericRecipe setIcon(ItemStack icon) { this.icon = icon; this.writeIcon = true; return this; } public GenericRecipe setIcon(Item item, int meta) { return this.setIcon(new ItemStack(item, 1, meta)); } public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } @@ -59,7 +61,7 @@ public class GenericRecipe { public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } - public GenericRecipe inputItemsEx(AStack... input) { if(GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } + public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } @@ -71,6 +73,14 @@ public class GenericRecipe { return this; } + public GenericRecipe setIconToFirstIngredient() { + if(this.inputItem != null) { + List stacks = this.inputItem[0].extractForNEI(); + if(!stacks.isEmpty()) this.icon = stacks.get(0); + } + return this; + } + public ItemStack getIcon() { if(icon == null) { @@ -93,8 +103,11 @@ public class GenericRecipe { } public String getLocalizedName() { - if(customLocalization) return I18nUtil.resolveKey(name); - return this.getIcon().getDisplayName(); + String name = null; + if(customLocalization) name = I18nUtil.resolveKey(this.name); + if(name == null) name = this.getIcon().getDisplayName(); + if(this.nameWrapper != null) name = I18nUtil.resolveKey(this.nameWrapper, name); + return name; } public List print() { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 1cb5cadb2..2e92b67f6 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -103,6 +103,7 @@ public abstract class GenericRecipes extends Serializab if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); if(obj.has("named") && obj.get("named").getAsBoolean()) recipe.setNamed(); if(obj.has("blueprintpool")) recipe.setPools(obj.get("blueprintpool").getAsString().split(":")); + if(obj.has("nameWrapper")) recipe.setNameWrapper(obj.get("nameWrapper").getAsString()); readExtraData(element, recipe); @@ -149,8 +150,9 @@ public abstract class GenericRecipes extends Serializab writer.name("icon"); this.writeItemStack(recipe.icon, writer); } - + if(recipe.customLocalization) writer.name("named").value(true); + if(recipe.nameWrapper != null) writer.name("nameWrapper").value(recipe.nameWrapper); if(recipe.blueprintPools != null && recipe.blueprintPools.length > 0) writer.name("blueprintpool").value(String.join(":", recipe.blueprintPools)); writeExtraData(recipe, writer); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 8fa127907..80567014d 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -85,6 +85,7 @@ public abstract class SerializableRecipe { //GENERIC recipeHandlers.add(AssemblyMachineRecipes.INSTANCE); recipeHandlers.add(ChemicalPlantRecipes.INSTANCE); + recipeHandlers.add(PUREXRecipes.INSTANCE); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1661a221b..370772b1d 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -273,6 +273,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalPlant.class, new RenderChemicalPlant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemfac.class, new RenderChemfac()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalFactory.class, new RenderChemicalFactory()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePUREX.class, new RenderPUREX()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFluidTank.class, new RenderFluidTank()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineBAT9000.class, new RenderBAT9000()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineOrbus.class, new RenderOrbus()); diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index 4f0b96595..efc36e201 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -32,6 +32,7 @@ public class NEIRegistry { handlers.add(new ReformingHandler()); handlers.add(new HydrotreatingHandler()); handlers.add(new ChemicalPlantRecipeHandler()); + handlers.add(new PUREXRecipeHandler()); handlers.add(new OreSlopperHandler()); //before acidizing handlers.add(new CrystallizerRecipeHandler()); handlers.add(new BookRecipeHandler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index fb125b628..5d0002948 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -140,18 +140,19 @@ public class ResourceManager { public static final IModelCustom assembler_cog = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_cog.obj")); public static final IModelCustom assembler_slider = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_slider.obj")); public static final IModelCustom assembler_arm = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_arm.obj")); - public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")); - public static final IModelCustom assemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assemfac.obj")); + public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")).asVBO(); + public static final IModelCustom assemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assemfac.obj")).asVBO(); //Chemplant - public static final IModelCustom chemplant_body = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_body.obj")); + public static final IModelCustom chemplant_body = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_body.obj")).asVBO(); public static final IModelCustom chemplant_spinner = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_spinner.obj")); public static final IModelCustom chemplant_piston = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_piston.obj")); public static final IModelCustom chemplant_fluid = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluid.hmf")); public static final IModelCustom chemplant_fluidcap = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluidcap.hmf")); - public static final IModelCustom chemical_plant = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_plant.obj")); - public static final IModelCustom chemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemfac.obj")); - public static final IModelCustom chemical_factory = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_factory.obj")); + public static final IModelCustom chemical_plant = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_plant.obj")).asVBO(); + public static final IModelCustom chemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemfac.obj")).asVBO(); + public static final IModelCustom chemical_factory = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_factory.obj")).asVBO(); + public static final IModelCustom purex = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/purex.obj")).asVBO(); //Mixer public static final IModelCustom mixer = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/mixer.obj")); @@ -587,6 +588,7 @@ public class ResourceManager { public static final ResourceLocation chemical_plant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant_fluid.png"); public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png"); public static final ResourceLocation chemical_factory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_factory.png"); + public static final ResourceLocation purex_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/purex.png"); //Mixer public static final ResourceLocation mixer_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/mixer.png"); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java b/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java new file mode 100644 index 000000000..afb8186d2 --- /dev/null +++ b/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java @@ -0,0 +1,29 @@ +package com.hbm.module.machine; + +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.recipes.PUREXRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; + +import api.hbm.energymk2.IEnergyHandlerMK2; +import net.minecraft.item.ItemStack; + +public class ModuleMachinePUREX extends ModuleMachineBase { + + public ModuleMachinePUREX(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { + super(index, battery, slots); + this.inputSlots = new int[3]; + this.outputSlots = new int[6]; + this.inputTanks = new FluidTank[3]; + this.outputTanks = new FluidTank[1]; + } + + @Override + public GenericRecipe getRecipe() { + return PUREXRecipes.INSTANCE.recipeNameMap.get(this.recipe); + } + + public ModuleMachinePUREX itemInput(int start) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = start + i; return this; } + public ModuleMachinePUREX itemOutput(int start) { for(int i = 0; i < outputSlots.length; i++) outputSlots[i] = start + i; return this; } + public ModuleMachinePUREX fluidInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } + public ModuleMachinePUREX fluidOutput(FluidTank a) { outputTanks[0] = a; return this; } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderPUREX.java b/src/main/java/com/hbm/render/tileentity/RenderPUREX.java new file mode 100644 index 000000000..5116e53e7 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPUREX.java @@ -0,0 +1,82 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachinePUREX; +import com.hbm.util.BobMathUtil; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderPUREX extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityMachinePUREX purex = (TileEntityMachinePUREX) tileEntity; + float anim = purex.prevAnim + (purex.anim - purex.prevAnim) * interp; + + bindTexture(ResourceManager.purex_tex); + ResourceManager.purex.renderPart("Base"); + if(purex.frame)ResourceManager.purex.renderPart("Frame"); + + GL11.glPushMatrix(); + GL11.glTranslated(1.5, 1.25, 0); + GL11.glRotated(anim * 45, 0, 0, 1); + GL11.glTranslated(-1.5, -1.25, 0); + ResourceManager.purex.renderPart("Fan"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(BobMathUtil.sps(anim * 0.25) * 0.5, 0, 0); + ResourceManager.purex.renderPart("Pump"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_purex); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + + public void renderInventory() { + GL11.glTranslated(0, -2.5, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.purex_tex); + ResourceManager.purex.renderPart("Base"); + ResourceManager.purex.renderPart("Frame"); + ResourceManager.purex.renderPart("Fan"); + ResourceManager.purex.renderPart("Pump"); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 7a8f9ead4..bae45ddca 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -353,6 +353,7 @@ public class TileMappings { put(TileEntityMachineChemicalPlant.class, "tileentity_chemicalplant"); put(TileEntityMachineChemfac.class, "tileentity_chemfac"); put(TileEntityMachineChemicalFactory.class, "tileentity_chemicalfactory"); + put(TileEntityMachinePUREX.class, "tileentity_purex"); put(TileEntityMachineOilWell.class, "tileentity_derrick"); put(TileEntityMachinePumpjack.class, "tileentity_machine_pumpjack"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java new file mode 100644 index 000000000..dd28d969c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java @@ -0,0 +1,278 @@ +package com.hbm.tileentity.machine; + +import java.util.HashMap; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.UpgradeManagerNT; +import com.hbm.inventory.container.ContainerMachinePUREX; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachinePUREX; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; +import com.hbm.module.machine.ModuleMachinePUREX; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; + +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { + + public FluidTank[] inputTanks; + public FluidTank[] outputTanks; + + public long power; + public long maxPower = 1_000_000; + public boolean didProcess = false; + + public boolean frame = false; + public int anim; + public int prevAnim; + + public ModuleMachinePUREX purexModule; + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); + + public TileEntityMachinePUREX() { + super(13); + + this.inputTanks = new FluidTank[3]; + this.outputTanks = new FluidTank[1]; + for(int i = 0; i < 3; i++) { + this.inputTanks[i] = new FluidTank(Fluids.NONE, 16_000); + } + this.outputTanks[0] = new FluidTank(Fluids.NONE, 16_000); + + this.purexModule = new ModuleMachinePUREX(0, this, slots) + .itemInput(4).itemOutput(7) + .fluidInput(inputTanks[0], inputTanks[1], inputTanks[2]).fluidOutput(outputTanks[0]); + } + + @Override + public String getName() { + return "container.machinePUREX"; + } + + @Override + public void updateEntity() { + + if(maxPower <= 0) this.maxPower = 1_000_000; + + if(!worldObj.isRemote) { + + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(purexModule.recipe); + if(recipe != null) { + this.maxPower = recipe.power * 100; + } + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000); + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + upgradeManager.checkSlots(slots, 2, 3); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos); + for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); + for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); + } + + double speed = 1D; + double pow = 1D; + + speed += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) / 3D; + speed += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + pow -= Math.min(upgradeManager.getLevel(UpgradeType.POWER), 3) * 0.25D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; + + this.purexModule.update(speed, pow, true, slots[1]); + this.didProcess = this.purexModule.didProcess; + if(this.purexModule.markDirty) this.markDirty(); + + this.networkPackNT(100); + + } else { + + this.prevAnim = this.anim; + if(this.didProcess) this.anim++; + + if(worldObj.getTotalWorldTime() % 20 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 5, zCoord).isAir(worldObj, xCoord, yCoord + 5, zCoord); + } + } + } + + public DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 0, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 0, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 0, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 0, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z), + }; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(FluidTank tank : inputTanks) tank.serialize(buf); + for(FluidTank tank : outputTanks) tank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeBoolean(didProcess); + this.purexModule.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(FluidTank tank : inputTanks) tank.deserialize(buf); + for(FluidTank tank : outputTanks) tank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); + this.purexModule.deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < 3; i++) { + this.inputTanks[i].readFromNBT(nbt, "i" + i); + } + this.outputTanks[0].readFromNBT(nbt, "o" + 0); + + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); + this.purexModule.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < 3; i++) { + this.inputTanks[i].writeToNBT(nbt, "i" + i); + } + this.outputTanks[0].writeToNBT(nbt, "o" + 0); + + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); + this.purexModule.writeToNBT(nbt); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot == 0) return true; // battery + if(slot == 1 && stack.getItem() == ModItems.blueprints) return true; + if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades + if(this.purexModule.isItemValid(slot, stack)) return true; // recipe input crap + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i >= 7 && i <= 12; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] {4, 5, 6, 7, 8, 9, 10, 11, 12}; + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return inputTanks; } + @Override public FluidTank[] getSendingTanks() { return outputTanks; } + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTanks[0], inputTanks[1], inputTanks[2], outputTanks[0]}; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachinePUREX(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachinePUREX(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("index") && data.hasKey("selection")) { + int index = data.getInteger("index"); + String selection = data.getString("selection"); + if(index == 0) { + this.purexModule.recipe = selection; + this.markChanged(); + } + } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 2, yCoord, zCoord - 2, xCoord + 3, yCoord + 5, zCoord + 3); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_purex)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 25) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public HashMap getValidUpgrades() { + HashMap upgrades = new HashMap<>(); + upgrades.put(UpgradeType.SPEED, 3); + upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 3); + return upgrades; + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7db6f3284..d909adf39 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3709,6 +3709,8 @@ potion.hbm_stability=Stabilität potion.hbm_taint=Verdorben potion.hbm_telekinesis=! ! ! +purex.recycle=Wiederanreicherung von %s + radar.clearMap=Karte zurücksetzen radar.detectMissiles=Raketen erkennen radar.detectPlayers=Spieler erkennen diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d5875f121..1ddb53855 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4767,6 +4767,8 @@ potion.hbm_stability=Stability potion.hbm_taint=Tainted potion.hbm_telekinesis=! ! ! +purex.recycle=Re-enrichment of %s + radar.clearMap=Clear Map radar.detectMissiles=Detect Missiles radar.detectPlayers=Detect Players diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_purex.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_purex.png new file mode 100644 index 000000000..1326e8690 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_purex.png differ