From da0d355565ca4d1c66db58b1725660d1b3d1036c Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 18 Mar 2026 16:32:18 +0100 Subject: [PATCH] homosexual garfield be like: "i love lasagna.....and cock!" --- changelog | 9 +- .../nei/AssemblyMachineRecipeHandler.java | 20 ++- .../handler/nei/PlasmaForgeRecipeHandler.java | 13 ++ .../ContainerMachinePlasmaForge.java | 70 ++++++++++ .../inventory/gui/GUIMachinePlasmaForge.java | 122 ++++++++++++++++++ .../gui/GUIScreenTemplateFolder.java | 3 - .../recipes/AssemblyMachineRecipes.java | 3 +- .../recipes/loader/SerializableRecipe.java | 1 + .../com/hbm/items/machine/ItemCassette.java | 99 ++++++-------- .../java/com/hbm/items/machine/ItemStamp.java | 1 - src/main/java/com/hbm/main/NEIRegistry.java | 1 + .../fusion/TileEntityFusionPlasmaForge.java | 87 +++++++++++-- .../gui/reactors/gui_fusion_plasmaforge.png | Bin 7226 -> 7213 bytes .../hbm/textures/items/chunk_ore.ilmenite.png | Bin 0 -> 282 bytes .../textures/items/chunk_ore.ilmenite_alt.png | Bin 0 -> 334 bytes 15 files changed, 346 insertions(+), 83 deletions(-) create mode 100644 src/main/java/com/hbm/handler/nei/PlasmaForgeRecipeHandler.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachinePlasmaForge.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachinePlasmaForge.java create mode 100644 src/main/resources/assets/hbm/textures/items/chunk_ore.ilmenite.png create mode 100644 src/main/resources/assets/hbm/textures/items/chunk_ore.ilmenite_alt.png diff --git a/changelog b/changelog index f75344b58..8cffc5ca9 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,17 @@ +## Added +* Plasma forge + * Plasma-powered assembly machine + * Used to produce lategame items that until now were regular assembler recipes + ## Changed * Doubled bismuth and tantalum yields from high-performance solvent bedrock ore processing * Hoppers and buckets can now be made out of steel * RoR gauges now show the lowest and highest configured value on the actual gauge * The steel sword now looks like a medival broad sword with the appropriate scale * All remaining items have been removed from the template folder, siren tracks and plate stamps are now made in th +* Gerald assembly now requires stellar flux ## Fixed * Fixed size 15 dual kerosene thruster not rendering at all -* Fixed HUD/jetpack toggle popup not working at all on multiplayer servers \ No newline at end of file +* Fixed HUD/jetpack toggle popup not working at all on multiplayer servers +* Fixed assembly machine NEI handler not being able to handle all thirteen inputs at once \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java index 288b74db5..c34096384 100644 --- a/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java @@ -3,6 +3,9 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; + +import net.minecraft.block.Block; public class AssemblyMachineRecipeHandler extends NEIGenericRecipeHandler { @@ -10,9 +13,20 @@ public class AssemblyMachineRecipeHandler extends NEIGenericRecipeHandler { super(ModBlocks.machine_assembly_machine.getLocalizedName(), AssemblyMachineRecipes.INSTANCE, ModBlocks.machine_assembly_machine); } + public AssemblyMachineRecipeHandler(String displayName, GenericRecipes recipeSet, Block... machines) { super(displayName, recipeSet, machines); } + @Override public String getRecipeID() { return "ntmAssemblyMachine"; } - @Override public int getInputXOffset(GenericRecipe recipe, int inputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } - @Override public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } - @Override public int getMachineXOffset(GenericRecipe recipe) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } + @Override public int getInputXOffset(GenericRecipe recipe, int inputCount) { return inputCount > 12 ? -9 : inputCount > 9 ? 18 : 0; } + @Override public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return getOffset(recipe); } + @Override public int getMachineXOffset(GenericRecipe recipe) { return getOffset(recipe); } + + public int getOffset(GenericRecipe recipe) { + int length = 0; + if(recipe.inputItem != null) length += recipe.inputItem.length; + if(recipe.inputFluid != null) length += recipe.inputFluid.length; + if(length > 12) return 27; + if(length > 9) return 18; + return 0; + } } diff --git a/src/main/java/com/hbm/handler/nei/PlasmaForgeRecipeHandler.java b/src/main/java/com/hbm/handler/nei/PlasmaForgeRecipeHandler.java new file mode 100644 index 000000000..8f63e3a74 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/PlasmaForgeRecipeHandler.java @@ -0,0 +1,13 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.PlasmaForgeRecipes; + +public class PlasmaForgeRecipeHandler extends AssemblyMachineRecipeHandler { + + public PlasmaForgeRecipeHandler() { + super(ModBlocks.fusion_plasma_forge.getLocalizedName(), PlasmaForgeRecipes.INSTANCE, ModBlocks.fusion_plasma_forge); + } + + @Override public String getRecipeID() { return "ntmPlasmaForge"; } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachinePlasmaForge.java b/src/main/java/com/hbm/inventory/container/ContainerMachinePlasmaForge.java new file mode 100644 index 000000000..821c85dee --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachinePlasmaForge.java @@ -0,0 +1,70 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +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 ContainerMachinePlasmaForge extends ContainerBase { + + public ContainerMachinePlasmaForge(InventoryPlayer invPlayer, IInventory assembler) { + super(invPlayer, assembler); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(assembler, 0, 152, 82)); + // Schematic + this.addSlotToContainer(new SlotNonRetarded(assembler, 1, 35, 81)); + // Booster + this.addSlotToContainer(new SlotNonRetarded(assembler, 2, 98, 116)); + // Input + this.addSlots(assembler, 3, 8, 18, 3, 4); + // Output + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, assembler, 15, 116, 36)); + + this.playerInv(invPlayer, 8, 162); + } + + @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() == ModItems.blueprints) { + if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 2, 15, 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/GUIMachinePlasmaForge.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePlasmaForge.java new file mode 100644 index 000000000..a1046242b --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePlasmaForge.java @@ -0,0 +1,122 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachinePlasmaForge; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.PlasmaForgeRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.fusion.TileEntityFusionPlasmaForge; +import com.hbm.util.i18n.I18nUtil; + +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 GUIMachinePlasmaForge extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/reactors/gui_fusion_plasmaforge.png"); + private TileEntityFusionPlasmaForge assembler; + + public GUIMachinePlasmaForge(InventoryPlayer invPlayer, TileEntityFusionPlasmaForge tedf) { + super(new ContainerMachinePlasmaForge(invPlayer, tedf)); + assembler = tedf; + + this.xSize = 176; + this.ySize = 244; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 18, 16, 52); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 62, assembler.power, assembler.maxPower); + + if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 80 < mouseY && guiTop + 80 + 18 >= mouseY) { + if(this.assembler.plasmaModule.recipe != null && PlasmaForgeRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.plasmaModule.recipe)) { + GenericRecipe recipe = (GenericRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(this.assembler.plasmaModule.recipe); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); + } + } + } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + if(this.checkClick(x, y, 7, 80, 18, 18)) GUIScreenRecipeSelector.openSelector(PlasmaForgeRecipes.INSTANCE, assembler, assembler.plasmaModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.assembler.hasCustomInventoryName() ? this.assembler.getInventoryName() : I18n.format(this.assembler.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) (assembler.power * 61 / assembler.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); + + if(assembler.plasmaModule.progress > 0) { + int j = (int) Math.ceil(70 * assembler.plasmaModule.progress); + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + } + + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.plasmaModule.recipe); + + /// LEFT LED + if(assembler.didProcess) { + drawTexturedModalRect(guiLeft + 51, guiTop + 76, 195, 0, 3, 6); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 51, guiTop + 76, 192, 0, 3, 6); + } + + /// RIGHT LED + if(assembler.didProcess) { + drawTexturedModalRect(guiLeft + 56, guiTop + 76, 195, 0, 3, 6); + } else if(recipe != null && assembler.power >= recipe.power) { + drawTexturedModalRect(guiLeft + 56, guiTop + 76, 192, 0, 3, 6); + } + + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 80); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.plasmaModule.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(assembler.plasmaModule.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); + } + + assembler.inputTank.renderTank(guiLeft + 80, guiTop + 70, this.zLevel, 16, 52); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index bd0ff47be..5b7de34d2 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -12,9 +12,6 @@ import org.lwjgl.opengl.GL12; import com.hbm.inventory.recipes.CrucibleRecipes; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemCassette; -import com.hbm.items.machine.ItemStamp; -import com.hbm.items.machine.ItemStamp.StampType; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 75550e704..4f8f498b3 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -1102,7 +1102,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.thruster_small, 1), new ComparableStack(ModItems.photo_panel, 12), new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM))); - this.register(new GenericRecipe("ass.gerald").setup(6_000, 100).outputItems(new ItemStack(ModItems.sat_gerald, 1)) + this.register(new GenericRecipe("ass.gerald").setup(6_000, 100).outputItems(new ItemStack(ModItems.sat_gerald, 1)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 16_000)) .inputItems(new OreDictStack(SBD.plateCast(), 64), new OreDictStack(SBD.plateCast(), 64), new OreDictStack(BSCCO.wireDense(), 64), @@ -1112,6 +1112,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), new ComparableStack(ModItems.coin_ufo, 1)) .inputItemsEx(new OreDictStack(SBD.plateCast(), 64), 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 083cb871d..c2e44f065 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -94,6 +94,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(PUREXRecipes.INSTANCE); recipeHandlers.add(FusionRecipes.INSTANCE); recipeHandlers.add(PrecAssRecipes.INSTANCE); + recipeHandlers.add(PlasmaForgeRecipes.INSTANCE); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); diff --git a/src/main/java/com/hbm/items/machine/ItemCassette.java b/src/main/java/com/hbm/items/machine/ItemCassette.java index 12667e1cb..95bbfe5ef 100644 --- a/src/main/java/com/hbm/items/machine/ItemCassette.java +++ b/src/main/java/com/hbm/items/machine/ItemCassette.java @@ -2,9 +2,6 @@ package com.hbm.items.machine; import java.util.List; -import com.hbm.items.ModItems; -import com.hbm.util.i18n.I18nUtil; - import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; @@ -12,7 +9,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; @@ -97,34 +93,27 @@ public class ItemCassette extends Item { SOUND; }; - public ItemCassette() - { - this.setHasSubtypes(true); - this.setMaxDamage(0); - } + public ItemCassette() { + this.setHasSubtypes(true); + this.setMaxDamage(0); + } - @Override + @Override @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tabs, List list) - { - for (int i = 1; i < TrackType.values().length; ++i) - { - list.add(new ItemStack(item, 1, i)); - } - } + public void getSubItems(Item item, CreativeTabs tabs, List list) { + for(int i = 1; i < TrackType.values().length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) - { - - if(!(stack.getItem() instanceof ItemCassette)) - return; + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + if(!(stack.getItem() instanceof ItemCassette)) return; - - list.add("Siren sound cassette:"); - list.add(" Name: " + TrackType.getEnum(stack.getItemDamage()).getTrackTitle()); - list.add(" Type: " + TrackType.getEnum(stack.getItemDamage()).getType().name()); - list.add(" Volume: " + TrackType.getEnum(stack.getItemDamage()).getVolume()); + list.add("Siren sound cassette:"); + list.add(" Name: " + TrackType.getEnum(stack.getItemDamage()).getTrackTitle()); + list.add(" Type: " + TrackType.getEnum(stack.getItemDamage()).getType().name()); + list.add(" Volume: " + TrackType.getEnum(stack.getItemDamage()).getVolume()); } public static TrackType getType(ItemStack stack) { @@ -134,47 +123,31 @@ public class ItemCassette extends Item { return TrackType.NULL; } - @Override + @Override @SideOnly(Side.CLIENT) - public boolean requiresMultipleRenderPasses() - { - return true; - } + public boolean requiresMultipleRenderPasses() { + return true; + } - @Override + @Override @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister p_94581_1_) - { - super.registerIcons(p_94581_1_); + public void registerIcons(IIconRegister p_94581_1_) { + super.registerIcons(p_94581_1_); + this.overlayIcon = p_94581_1_.registerIcon("hbm:cassette_overlay"); + } - this.overlayIcon = p_94581_1_.registerIcon("hbm:cassette_overlay"); - } - - @Override + @Override @SideOnly(Side.CLIENT) - public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_) - { - return p_77618_2_ == 1 ? this.overlayIcon : super.getIconFromDamageForRenderPass(p_77618_1_, p_77618_2_); - } + public IIcon getIconFromDamageForRenderPass(int meta, int pass) { + return pass == 1 ? this.overlayIcon : super.getIconFromDamageForRenderPass(meta, pass); + } - @Override + @Override @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int p_82790_2_) - { - if (p_82790_2_ == 0) - { - return 16777215; - } - else - { - int j = TrackType.getEnum(stack.getItemDamage()).getColor(); - - if (j < 0) - { - j = 16777215; - } - - return j; - } - } + public int getColorFromItemStack(ItemStack stack, int pass) { + if(pass == 0) return 16777215; + int j = TrackType.getEnum(stack.getItemDamage()).getColor(); + if(j < 0) j = 16777215; + return j; + } } diff --git a/src/main/java/com/hbm/items/machine/ItemStamp.java b/src/main/java/com/hbm/items/machine/ItemStamp.java index ee6372fc2..96a0a6157 100644 --- a/src/main/java/com/hbm/items/machine/ItemStamp.java +++ b/src/main/java/com/hbm/items/machine/ItemStamp.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index 755dda1fd..5374c19bd 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -42,6 +42,7 @@ public class NEIRegistry { handlers.add(new CrystallizerRecipeHandler()); handlers.add(new BookRecipeHandler()); handlers.add(new FusionRecipeHandler()); + handlers.add(new PlasmaForgeRecipeHandler()); handlers.add(new SILEXRecipeHandler()); handlers.add(new FuelPoolHandler()); handlers.add(new RBMKRodDisassemblyHandler()); diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java index 36e103dd1..4bce456bd 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java @@ -1,8 +1,10 @@ package com.hbm.tileentity.machine.fusion; import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.container.ContainerMachinePlasmaForge; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachinePlasmaForge; import com.hbm.inventory.recipes.PlasmaForgeRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; @@ -17,12 +19,14 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardReceiverMK2; 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.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiverMK2, IControlReceiver, IGUIProvider { @@ -30,6 +34,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement public long power; public long maxPower = 10_000_000; + public boolean didProcess; public ModuleMachinePlasma plasmaModule; @@ -63,15 +68,75 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement this.trySubscribe(worldObj, pos); if(inputTank.getTankType() != Fluids.NONE) this.trySubscribe(inputTank.getTankType(), worldObj, pos); } + + double speed = 1D; + double pow = 1D; + + this.plasmaModule.update(speed, pow, true, slots[1]); + this.didProcess = this.plasmaModule.didProcess; + if(this.plasmaModule.markDirty) this.markDirty(); + + this.networkPackNT(100); } } public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new DirPos[] { - + new DirPos(xCoord + dir.offsetX * 6 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 6 - rot.offsetZ * 2, dir), + new DirPos(xCoord + dir.offsetX * 6 - rot.offsetX * 1, yCoord, zCoord + dir.offsetZ * 6 - rot.offsetZ * 1, dir), + new DirPos(xCoord + dir.offsetX * 6 + rot.offsetX * 0, yCoord, zCoord + dir.offsetZ * 6 + rot.offsetZ * 0, dir), + new DirPos(xCoord + dir.offsetX * 6 + rot.offsetX * 1, yCoord, zCoord + dir.offsetZ * 6 + rot.offsetZ * 1, dir), + new DirPos(xCoord + dir.offsetX * 6 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 6 + rot.offsetZ * 2, dir), + new DirPos(xCoord - dir.offsetX * 6 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 6 - rot.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord - dir.offsetX * 6 - rot.offsetX * 1, yCoord, zCoord - dir.offsetZ * 6 - rot.offsetZ * 1, dir.getOpposite()), + new DirPos(xCoord - dir.offsetX * 6 + rot.offsetX * 0, yCoord, zCoord - dir.offsetZ * 6 + rot.offsetZ * 0, dir.getOpposite()), + new DirPos(xCoord - dir.offsetX * 6 + rot.offsetX * 1, yCoord, zCoord - dir.offsetZ * 6 + rot.offsetZ * 1, dir.getOpposite()), + new DirPos(xCoord - dir.offsetX * 6 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 6 + rot.offsetZ * 2, dir.getOpposite()), }; } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + this.inputTank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeBoolean(didProcess); + this.plasmaModule.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + boolean wasProcessing = this.didProcess; + this.inputTank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); + this.plasmaModule.deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.inputTank.readFromNBT(nbt, "i"); + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); + this.plasmaModule.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.inputTank.writeToNBT(nbt, "i"); + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); + this.plasmaModule.writeToNBT(nbt); + } + @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery @@ -102,7 +167,14 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement @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.plasmaModule.recipe = selection; + this.markChanged(); + } + } } AxisAlignedBB bb = null; @@ -119,13 +191,6 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement return 65536.0D; } - @Override - public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - return null; - } - - @Override - public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return null; - } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachinePlasmaForge(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachinePlasmaForge(player.inventory, this); } } diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_plasmaforge.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_plasmaforge.png index ed940ab4fd58838dd3472be2a7e0d3cd976a132a..caa53ffc026690a72b2e4b92ed36ce0d8e54f9d9 100644 GIT binary patch literal 7213 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/chunk_ore.ilmenite_alt.png b/src/main/resources/assets/hbm/textures/items/chunk_ore.ilmenite_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..7e890373fd67f77cd7d2777f3fa555ade07ae717 GIT binary patch literal 334 zcmV-U0kQsxP)B5dTCs2cc8Iq3F=f zJ&+Ei9Toie6As$Ogh1W0C4V3;-jLiR#Zlksp2PdR=Ww|2?J0ir0Nl@yN;nrFb=dCWZMJwDo4|Luo>&0fSWf9yg#a~d z?$~sCtz7@@-D9s_2Yzl~O=sfq>6O5Dcje{a#d0M;`ADO)(?kW1+f58p=kE4Cohso% gK$)_kS@7@Z8wB`YZ-}4zJOBUy07*qoM6N<$f_Q9}X8-^I literal 0 HcmV?d00001