From 0c0a3c952b2cbe317757b8dae5824ba8191d1aec Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 12 Nov 2025 16:10:53 +0100 Subject: [PATCH] big chungus for playstation 3 --- changelog | 2 + src/main/java/com/hbm/blocks/ModBlocks.java | 6 ++ .../machine/fusion/MachineFusionBoiler.java | 44 ++++++++++ .../fusion/MachineFusionCollector.java | 44 ++++++++++ .../machine/fusion/MachineFusionTorus.java | 6 ++ .../java/com/hbm/crafting/MineralRecipes.java | 8 ++ .../container/ContainerFusionTorus.java | 72 ++++++++++++++++ .../com/hbm/inventory/gui/GUIFusionTorus.java | 78 ++++++++++++++++++ src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/ResourceManager.java | 4 + .../render/tileentity/RenderFusionBoiler.java | 61 ++++++++++++++ .../tileentity/RenderFusionCollector.java | 61 ++++++++++++++ .../java/com/hbm/tileentity/TileMappings.java | 2 + .../machine/albion/TileEntityCooledBase.java | 6 +- .../fusion/TileEntityFusionBoiler.java | 34 ++++++++ .../fusion/TileEntityFusionBreeder.java | 10 +-- .../fusion/TileEntityFusionCollector.java | 34 ++++++++ .../machine/fusion/TileEntityFusionTorus.java | 18 +++- .../gui/reactors/gui_fusion_torus.png | Bin 4971 -> 4966 bytes 19 files changed, 483 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java create mode 100644 src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerFusionTorus.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderFusionBoiler.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderFusionCollector.java create mode 100644 src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBoiler.java create mode 100644 src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java diff --git a/changelog b/changelog index 62e7761eb..fb7cb1a0d 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,7 @@ * Like boxducts, but for power ## Changed +* Updated chinese localization * Updated meteors * Meteors will now punch through weak blocks like leaves instead of getting stuck on trees * Meteor impacts now have new visuals @@ -45,6 +46,7 @@ * In their place, there's now a different, more useful structure with similar but not identical spawn rules * ROR controller torches can now set the threshold of particle accelerator dipoles * Removed the legacy recipes from the terra drills +* Slag can now be cast into ingots ## Fixed * Fixed arc furnace only allowing electrodes to be inserted when the lid is down instead of up diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 218f17767..5e4537899 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -8,7 +8,9 @@ import com.hbm.blocks.generic.*; import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect; import com.hbm.blocks.machine.*; import com.hbm.blocks.machine.albion.*; +import com.hbm.blocks.machine.fusion.MachineFusionBoiler; import com.hbm.blocks.machine.fusion.MachineFusionBreeder; +import com.hbm.blocks.machine.fusion.MachineFusionCollector; import com.hbm.blocks.machine.fusion.MachineFusionKlystron; import com.hbm.blocks.machine.fusion.MachineFusionTorus; import com.hbm.blocks.machine.pile.*; @@ -2061,6 +2063,8 @@ public class ModBlocks { fusion_torus = new MachineFusionTorus().setBlockName("fusion_torus").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); fusion_klystron = new MachineFusionKlystron().setBlockName("fusion_klystron").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); fusion_breeder = new MachineFusionBreeder().setBlockName("fusion_breeder").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + fusion_collector = new MachineFusionCollector().setBlockName("fusion_collector").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + fusion_boiler = new MachineFusionBoiler().setBlockName("fusion_boiler").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_icf_press = new MachineICFPress().setBlockName("machine_icf_press").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); icf = new MachineICF().setBlockName("icf").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3448,6 +3452,8 @@ public class ModBlocks { register(fusion_torus); register(fusion_klystron); register(fusion_breeder); + register(fusion_collector); + register(fusion_boiler); register(watz_element); register(watz_cooler); diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java new file mode 100644 index 000000000..e3273ad79 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionBoiler.java @@ -0,0 +1,44 @@ +package com.hbm.blocks.machine.fusion; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.fusion.TileEntityFusionBoiler; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineFusionBoiler extends BlockDummyable { + + public MachineFusionBoiler() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityFusionBoiler(); + if(meta >= 6) return new TileEntityProxyCombo().power().fluid(); + return null; + } + + @Override + public int[] getDimensions() { + return new int[] { 3, 0, 4, 4, 1, 1 }; + } + + @Override + public int getOffset() { + return 4; + } + + @Override + public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + return super.checkRequirement(world, x, y, z, dir, o); + } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + } +} diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java new file mode 100644 index 000000000..8a78f43b5 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionCollector.java @@ -0,0 +1,44 @@ +package com.hbm.blocks.machine.fusion; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.fusion.TileEntityFusionCollector; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineFusionCollector extends BlockDummyable { + + public MachineFusionCollector() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityFusionCollector(); + if(meta >= 6) return new TileEntityProxyCombo().power().fluid(); + return null; + } + + @Override + public int[] getDimensions() { + return new int[] { 3, 0, 2, 1, 2, 2 }; + } + + @Override + public int getOffset() { + return 1; + } + + @Override + public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + return super.checkRequirement(world, x, y, z, dir, o); + } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + } +} diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java index 45b2d2ca7..674cf4a09 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionTorus.java @@ -5,6 +5,7 @@ import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.fusion.TileEntityFusionTorus; import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -77,6 +78,11 @@ public class MachineFusionTorus extends BlockDummyable { 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 super.standardOpenBehavior(world, x, y, z, player, 0); + } @Override public int[] getDimensions() { diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index f0299b959..47a83f2ea 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -13,6 +13,7 @@ import com.hbm.items.special.ItemByproduct.EnumByproduct; import com.hbm.main.CraftingManager; import static com.hbm.inventory.OreDictManager.*; +import static com.hbm.inventory.material.Mats.*; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; @@ -54,6 +55,8 @@ public class MineralRecipes { add1To9Pair(ModBlocks.block_tcalloy, ModItems.ingot_tcalloy); add1To9Pair(ModBlocks.block_cdalloy, ModItems.ingot_cdalloy); + add1To9Pair(new ItemStack(ModBlocks.block_slag), new ItemStack(ModItems.ingot_raw, 9, MAT_SLAG.id)); + for(int i = 0; i < EnumCokeType.values().length; i++) { add1To9PairSameMeta(Item.getItemFromBlock(ModBlocks.block_coke), ModItems.coke, i); } @@ -479,6 +482,11 @@ public class MineralRecipes { add1To9(new ItemStack(one), new ItemStack(nine, 9)); add9To1(new ItemStack(nine), new ItemStack(one)); } + + public static void add1To9Pair(ItemStack one, ItemStack nine) { + add1To9(one, nine); + add9To1(nine, one); + } public static void add1To9PairSameMeta(Item one, Item nine, int meta) { add1To9SameMeta(one, nine, meta); diff --git a/src/main/java/com/hbm/inventory/container/ContainerFusionTorus.java b/src/main/java/com/hbm/inventory/container/ContainerFusionTorus.java new file mode 100644 index 000000000..e9b8cf481 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerFusionTorus.java @@ -0,0 +1,72 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.tileentity.machine.fusion.TileEntityFusionTorus; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerFusionTorus extends Container { + + protected TileEntityFusionTorus torus; + + public ContainerFusionTorus(InventoryPlayer invPlayer, TileEntityFusionTorus tedf) { + this.torus = tedf; + + this.addSlotToContainer(new SlotNonRetarded(torus, 0, 8, 82)); + this.addSlotToContainer(new SlotNonRetarded(torus, 1, 71, 81)); + this.addSlotToContainer(new SlotNonRetarded(torus, 2, 130, 36)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 35 + j * 18, 162 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 35 + i * 18, 220)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return torus.isUseableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack copy = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + copy = stack.copy(); + + if(index <= 2) { + if(!this.mergeItemStack(stack, 3, this.inventorySlots.size(), true)) return null; + } else { + + if(copy.getItem() == ModItems.blueprints) { + if(!this.mergeItemStack(stack, 1, 2, false)) return null; + } else if(copy.getItem() instanceof IBatteryItem || copy.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(stack, 0, 1, false)) return null; + } else { + return null; + } + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return copy; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java new file mode 100644 index 000000000..001ba4fc1 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java @@ -0,0 +1,78 @@ +package com.hbm.inventory.gui; + +import com.hbm.inventory.container.ContainerFusionTorus; +import com.hbm.lib.RefStrings; +import com.hbm.render.util.GaugeUtil; +import com.hbm.tileentity.machine.fusion.TileEntityFusionTorus; +import com.hbm.util.BobMathUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIFusionTorus extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/reactors/gui_fusion_torus.png"); + private TileEntityFusionTorus torus; + + public GUIFusionTorus(InventoryPlayer invPlayer, TileEntityFusionTorus torus) { + super(new ContainerFusionTorus(invPlayer, torus)); + this.torus = torus; + + this.xSize = 230; + this.ySize = 244; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + torus.tanks[0].renderTankInfo(this, x, y, guiLeft + 188, guiTop + 46, 16, 52); + torus.tanks[1].renderTankInfo(this, x, y, guiLeft + 206, guiTop + 46, 16, 52); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.torus.hasCustomInventoryName() ? this.torus.getInventoryName() : I18n.format(this.torus.getInventoryName()); + this.fontRendererObj.drawString(name, 106 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 35, this.ySize - 93, 4210752); + + this.fontRendererObj.drawString(EnumChatFormatting.AQUA + "/123K", 136 + 54, 32, 4210752); + int heat = (int) Math.ceil(300); + String label = (heat > 123 ? EnumChatFormatting.RED : EnumChatFormatting.AQUA) + "" + heat + "K"; + this.fontRendererObj.drawString(label, 166 + 54 - this.fontRendererObj.getStringWidth(label), 22, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float interp, int x, int y) { + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + // power LED + drawTexturedModalRect(guiLeft + 160, guiTop + 115, 246, 14, 8, 8); + // coolant LED + drawTexturedModalRect(guiLeft + 170, guiTop + 115, 246, 14, 8, 8); + // plasma LED + drawTexturedModalRect(guiLeft + 180, guiTop + 115, 246, 14, 8, 8); + + // recipe LED + drawTexturedModalRect(guiLeft + 87, guiTop + 76, 249, 0, 3, 6); + // progress LED + drawTexturedModalRect(guiLeft + 92, guiTop + 76, 249, 0, 3, 6); + + double gauge = BobMathUtil.sps((Minecraft.getMinecraft().theWorld.getTotalWorldTime() + interp) * 0.25) / 2 + 0.5D; + + // input energy + GaugeUtil.drawSmoothGauge(guiLeft + 52, guiTop + 124, this.zLevel, gauge, 5, 2, 1, 0xA00000); + // output genergy + GaugeUtil.drawSmoothGauge(guiLeft + 88, guiTop + 124, this.zLevel, gauge, 5, 2, 1, 0xA00000); + // fuel consumption + GaugeUtil.drawSmoothGauge(guiLeft + 124, guiTop + 124, this.zLevel, gauge, 5, 2, 1, 0xA00000); + + // coolant + torus.tanks[0].renderTank(guiLeft + 188, guiTop + 98, this.zLevel, 16, 52); + torus.tanks[1].renderTank(guiLeft + 206, guiTop + 98, this.zLevel, 16, 52); + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index b0c054c11..16510df7f 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -428,6 +428,8 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionTorus.class, new RenderFusionTorus()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionKlystron.class, new RenderFusionKlystron()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionBreeder.class, new RenderFusionBreeder()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionCollector.class, new RenderFusionCollector()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionBoiler.class, new RenderFusionBoiler()); //Watz ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatz.class, new RenderWatz()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatzPump.class, new RenderWatzPump()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 4e5cf548a..1363bae6c 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -251,6 +251,8 @@ public class ResourceManager { public static final IModelCustom fusion_torus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/torus.obj")).asVBO(); public static final IModelCustom fusion_klystron = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/klystron.obj")).asVBO(); public static final IModelCustom fusion_breeder = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/breeder.obj")).asVBO(); + public static final IModelCustom fusion_collector = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/collector.obj")).asVBO(); + public static final IModelCustom fusion_boiler = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fusion/boiler.obj")).asVBO(); //ICF public static final IModelCustom icf = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/reactors/icf.obj")).asVBO(); @@ -704,6 +706,8 @@ public class ResourceManager { public static final ResourceLocation fusion_torus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/torus.png"); public static final ResourceLocation fusion_klystron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/klystron.png"); public static final ResourceLocation fusion_breeder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/breeder.png"); + public static final ResourceLocation fusion_collector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/collector.png"); + public static final ResourceLocation fusion_boiler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/boiler.png"); //ICF public static final ResourceLocation icf_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/icf.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderFusionBoiler.java b/src/main/java/com/hbm/render/tileentity/RenderFusionBoiler.java new file mode 100644 index 000000000..5d2360f1b --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderFusionBoiler.java @@ -0,0 +1,61 @@ +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 net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderFusionBoiler extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fusion_boiler_tex); + ResourceManager.fusion_boiler.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.fusion_boiler); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(3.5, 3.5, 3.5); + GL11.glRotated(90, 0, 1, 0); + } + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fusion_boiler_tex); + ResourceManager.fusion_boiler.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderFusionCollector.java b/src/main/java/com/hbm/render/tileentity/RenderFusionCollector.java new file mode 100644 index 000000000..e555310cc --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderFusionCollector.java @@ -0,0 +1,61 @@ +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 net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderFusionCollector extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fusion_collector_tex); + ResourceManager.fusion_collector.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.fusion_collector); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -2, 0); + GL11.glScaled(5, 5, 5); + GL11.glRotated(90, 0, 1, 0); + } + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fusion_collector_tex); + ResourceManager.fusion_collector.renderAll(); + 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 3596fb2dc..60babe296 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -417,6 +417,8 @@ public class TileMappings { put(TileEntityFusionTorus.class, "tileentity_fusion_torus"); put(TileEntityFusionKlystron.class, "tileentity_fusion_klystron"); put(TileEntityFusionBreeder.class, "tileentity_fusion_breeder"); + put(TileEntityFusionCollector.class, "tileentity_fusion_collector"); + put(TileEntityFusionBoiler.class, "tileentity_fusion_boiler"); } private static void putNetwork() { diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityCooledBase.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityCooledBase.java index 18559eaa4..0ebdc0928 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityCooledBase.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityCooledBase.java @@ -7,11 +7,11 @@ import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; -import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; -public abstract class TileEntityCooledBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver { +public abstract class TileEntityCooledBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2 { public FluidTank[] tanks; @@ -39,7 +39,7 @@ public abstract class TileEntityCooledBase extends TileEntityMachineBase impleme for(DirPos pos : this.getConPos()) { this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); - this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.tryProvide(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } this.temperature += this.temp_passive_heating; diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBoiler.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBoiler.java new file mode 100644 index 000000000..4692184b2 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBoiler.java @@ -0,0 +1,34 @@ +package com.hbm.tileentity.machine.fusion; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; + +public class TileEntityFusionBoiler extends TileEntity { + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 4, + yCoord, + zCoord - 4, + xCoord + 5, + yCoord + 4, + zCoord + 5 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java index 0bd3ee0a5..161b6fe04 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java @@ -14,12 +14,12 @@ public class TileEntityFusionBreeder extends TileEntity { if(bb == null) { bb = AxisAlignedBB.getBoundingBox( - xCoord - 4, + xCoord - 2, yCoord, - zCoord - 4, - xCoord + 5, - yCoord + 5, - zCoord + 5 + zCoord - 2, + xCoord + 3, + yCoord + 4, + zCoord + 3 ); } diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java new file mode 100644 index 000000000..6f04b20fe --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java @@ -0,0 +1,34 @@ +package com.hbm.tileentity.machine.fusion; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; + +public class TileEntityFusionCollector extends TileEntity { + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 2, + yCoord, + zCoord - 2, + xCoord + 3, + yCoord + 4, + zCoord + 3 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java index b3aa16bc0..282d20c1c 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java @@ -1,13 +1,19 @@ package com.hbm.tileentity.machine.fusion; +import com.hbm.inventory.container.ContainerFusionTorus; +import com.hbm.inventory.gui.GUIFusionTorus; +import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.machine.albion.TileEntityCooledBase; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; -public class TileEntityFusionTorus extends TileEntityCooledBase { +public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIProvider { public TileEntityFusionTorus() { super(3); @@ -57,4 +63,14 @@ public class TileEntityFusionTorus extends TileEntityCooledBase { public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerFusionTorus(player.inventory, this); + } + + @Override + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIFusionTorus(player.inventory, this); + } } diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png index 323837eb3ad30494f12f161e1169c6b53e5f2757..87bf03dcaa757c9d5d166f336235b9246717e652 100644 GIT binary patch literal 4966 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 PGhk+9X;}H&g=_x;?G{)I