From 428cd342bdc2e32dbb0285fcfe732b2d42cdfe02 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 25 Sep 2022 00:26:45 +0200 Subject: [PATCH] the mcdonalds among us meal --- src/main/java/com/hbm/blocks/ModBlocks.java | 9 +- .../com/hbm/blocks/machine/FoundryBasin.java | 26 ++ .../hbm/blocks/machine/FoundryChannel.java | 101 +++++ .../com/hbm/blocks/machine/FoundryMold.java | 87 ++++ .../hbm/blocks/machine/MachineDiFurnace.java | 2 - .../java/com/hbm/crafting/MineralRecipes.java | 4 + .../com/hbm/crafting/SmeltingRecipes.java | 1 + src/main/java/com/hbm/items/ModItems.java | 6 + src/main/java/com/hbm/main/ClientProxy.java | 7 + .../com/hbm/render/block/RenderBasin.java | 101 +++++ .../com/hbm/render/block/RenderChannel.java | 382 ++++++++++++++++++ .../java/com/hbm/render/block/RenderMold.java | 101 +++++ .../hbm/render/tileentity/RenderCrucible.java | 8 + .../hbm/render/tileentity/RenderFoundry.java | 72 ++++ .../java/com/hbm/tileentity/TileMappings.java | 4 + .../tileentity/machine/IRenderFoundry.java | 14 + .../machine/TileEntityCrucible.java | 44 ++ .../machine/TileEntityFoundryBasin.java | 38 +- .../machine/TileEntityFoundryChannel.java | 158 ++++++++ .../machine/TileEntityFoundryMold.java | 128 ++++++ .../hbm/textures/blocks/foundry_basin.png | Bin 0 -> 651 bytes .../textures/blocks/foundry_basin_bottom.png | Bin 0 -> 515 bytes .../textures/blocks/foundry_basin_inner.png | Bin 0 -> 533 bytes .../textures/blocks/foundry_basin_side.png | Bin 0 -> 599 bytes .../hbm/textures/blocks/foundry_basin_top.png | Bin 0 -> 466 bytes .../blocks/foundry_channel_bottom.png | Bin 0 -> 515 bytes .../textures/blocks/foundry_channel_inner.png | Bin 0 -> 329 bytes .../textures/blocks/foundry_channel_side.png | Bin 0 -> 319 bytes .../textures/blocks/foundry_channel_top.png | Bin 0 -> 523 bytes .../textures/blocks/foundry_mold_bottom.png | Bin 0 -> 515 bytes .../textures/blocks/foundry_mold_inner.png | Bin 0 -> 329 bytes .../hbm/textures/blocks/foundry_mold_side.png | Bin 0 -> 319 bytes .../hbm/textures/blocks/foundry_mold_top.png | Bin 0 -> 466 bytes .../assets/hbm/textures/blocks/lava_gray.png | Bin 0 -> 751 bytes .../hbm/textures/items/ball_fireclay.png | Bin 0 -> 425 bytes .../hbm/textures/items/ingot_firebrick.png | Bin 0 -> 403 bytes .../textures/models/machines/lava_gray.png | Bin 0 -> 751 bytes 37 files changed, 1288 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/FoundryChannel.java create mode 100644 src/main/java/com/hbm/blocks/machine/FoundryMold.java create mode 100644 src/main/java/com/hbm/render/block/RenderBasin.java create mode 100644 src/main/java/com/hbm/render/block/RenderChannel.java create mode 100644 src/main/java/com/hbm/render/block/RenderMold.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderFoundry.java create mode 100644 src/main/java/com/hbm/tileentity/machine/IRenderFoundry.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_basin.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_basin_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_basin_inner.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_basin_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_basin_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_channel_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_channel_inner.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_channel_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_channel_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_mold_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_mold_inner.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_mold_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/foundry_mold_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/lava_gray.png create mode 100644 src/main/resources/assets/hbm/textures/items/ball_fireclay.png create mode 100644 src/main/resources/assets/hbm/textures/items/ingot_firebrick.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/lava_gray.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 1ea3b62cb..9c1a06c9e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -638,8 +638,10 @@ public class ModBlocks { public static Block machine_stirling_steel; public static Block machine_sawmill; public static Block machine_crucible; - + + public static Block foundry_mold; public static Block foundry_basin; + public static Block foundry_channel; public static Block machine_difurnace_off; public static Block machine_difurnace_on; @@ -1822,7 +1824,9 @@ public class ModBlocks { machine_sawmill = new MachineSawmill().setBlockName("machine_sawmill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_crucible = new MachineCrucible().setBlockName("machine_crucible").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_crucible"); + foundry_mold = new FoundryMold().setBlockName("foundry_mold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":foundry_mold"); foundry_basin = new FoundryBasin().setBlockName("foundry_basin").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":foundry_basin"); + foundry_channel = new FoundryChannel().setBlockName("foundry_channel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":foundry_channel"); machine_difurnace_off = new MachineDiFurnace(false).setBlockName("machine_difurnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_difurnace_on = new MachineDiFurnace(true).setBlockName("machine_difurnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); @@ -3015,6 +3019,9 @@ public class ModBlocks { register(machine_stirling_steel); register(machine_sawmill); register(machine_crucible); + register(foundry_mold); + register(foundry_basin); + register(foundry_channel); GameRegistry.registerBlock(machine_difurnace_off, machine_difurnace_off.getUnlocalizedName()); GameRegistry.registerBlock(machine_difurnace_on, machine_difurnace_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_difurnace_rtg_off, machine_difurnace_rtg_off.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/FoundryBasin.java b/src/main/java/com/hbm/blocks/machine/FoundryBasin.java index 81b55214c..5b05e610b 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryBasin.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryBasin.java @@ -1,21 +1,47 @@ package com.hbm.blocks.machine; import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityFoundryBasin; import api.hbm.block.ICrucibleAcceptor; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class FoundryBasin extends BlockContainer implements ICrucibleAcceptor { + @SideOnly(Side.CLIENT) public IIcon iconTop; + @SideOnly(Side.CLIENT) public IIcon iconSide; + @SideOnly(Side.CLIENT) public IIcon iconBottom; + @SideOnly(Side.CLIENT) public IIcon iconInner; + public FoundryBasin() { super(Material.rock); } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":foundry_basin_top"); + this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":foundry_basin_side"); + this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":foundry_basin_bottom"); + this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":foundry_basin_inner"); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } @Override public TileEntity createNewTileEntity(World world, int meta) { diff --git a/src/main/java/com/hbm/blocks/machine/FoundryChannel.java b/src/main/java/com/hbm/blocks/machine/FoundryChannel.java new file mode 100644 index 000000000..f4103c90d --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/FoundryChannel.java @@ -0,0 +1,101 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityFoundryChannel; + +import api.hbm.block.ICrucibleAcceptor; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor { + + @SideOnly(Side.CLIENT) public IIcon iconTop; + @SideOnly(Side.CLIENT) public IIcon iconSide; + @SideOnly(Side.CLIENT) public IIcon iconBottom; + @SideOnly(Side.CLIENT) public IIcon iconInner; + @SideOnly(Side.CLIENT) public IIcon iconLava; + + public FoundryChannel() { + super(Material.rock); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_top"); + this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_side"); + this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_bottom"); + this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":foundry_channel_inner"); + this.iconLava = iconRegister.registerIcon(RefStrings.MODID + ":lava_gray"); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityFoundryChannel(); + } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).pour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).canAcceptPartialFlow(world, x, y, z, side, stack); + } + + @Override + public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryChannel) world.getTileEntity(x, y, z)).flow(world, x, y, z, side, stack); + } + + public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + + if(dir == ForgeDirection.UP || dir == ForgeDirection.DOWN || dir == ForgeDirection.UNKNOWN) + return false; + + Block b = world.getBlock(x + dir.offsetX, y, z + dir.offsetZ); + + return b == ModBlocks.foundry_channel || b == ModBlocks.foundry_mold; + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType() { + return renderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/FoundryMold.java b/src/main/java/com/hbm/blocks/machine/FoundryMold.java new file mode 100644 index 000000000..26edda4e5 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/FoundryMold.java @@ -0,0 +1,87 @@ +package com.hbm.blocks.machine; + +import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityFoundryMold; + +import api.hbm.block.ICrucibleAcceptor; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class FoundryMold extends BlockContainer implements ICrucibleAcceptor { + + @SideOnly(Side.CLIENT) public IIcon iconTop; + @SideOnly(Side.CLIENT) public IIcon iconSide; + @SideOnly(Side.CLIENT) public IIcon iconBottom; + @SideOnly(Side.CLIENT) public IIcon iconInner; + + public FoundryMold() { + super(Material.rock); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":foundry_mold_top"); + this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":foundry_mold_side"); + this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":foundry_mold_bottom"); + this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":foundry_mold_inner"); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityFoundryMold(); + } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryMold) world.getTileEntity(x, y, z)).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryMold) world.getTileEntity(x, y, z)).pour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryMold) world.getTileEntity(x, y, z)).canAcceptPartialFlow(world, x, y, z, side, stack); + } + + @Override + public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + return ((TileEntityFoundryMold) world.getTileEntity(x, y, z)).flow(world, x, y, z, side, stack); + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType() { + return renderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineDiFurnace.java b/src/main/java/com/hbm/blocks/machine/MachineDiFurnace.java index 6696b38e3..c99c41064 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineDiFurnace.java +++ b/src/main/java/com/hbm/blocks/machine/MachineDiFurnace.java @@ -28,7 +28,6 @@ import net.minecraft.world.World; public class MachineDiFurnace extends BlockContainer { private final Random field_149933_a = new Random(); - private Random rand; private final boolean isActive; private static boolean keepInventory; @@ -39,7 +38,6 @@ public class MachineDiFurnace extends BlockContainer { public MachineDiFurnace(boolean blockState) { super(Material.iron); - rand = new Random(); isActive = blockState; } diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index 08bf58939..e0a7f7179 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -5,6 +5,8 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; import com.hbm.items.special.ItemWasteLong; import com.hbm.items.special.ItemWasteShort; +import com.hbm.main.CraftingManager; + import static com.hbm.inventory.OreDictManager.*; import cpw.mods.fml.common.registry.GameRegistry; @@ -432,6 +434,8 @@ public class MineralRecipes { GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ingot_pu_mix, 1), new Object[] { "tinyPu239", "tinyPu239", "tinyPu239", "tinyPu239", "tinyPu239", "tinyPu239", "tinyPu240", "tinyPu240", "tinyPu240" })); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ingot_am_mix, 1), new Object[] { "nuggetAmericium241", "nuggetAmericium241", "nuggetAmericium241", "nuggetAmericium242", "nuggetAmericium242", "nuggetAmericium242", "nuggetAmericium242", "nuggetAmericium242", "nuggetAmericium242" })); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ingot_am_mix, 1), new Object[] { "tinyAm241", "tinyAm241", "tinyAm241", "tinyAm242", "tinyAm242", "tinyAm242", "tinyAm242", "tinyAm242", "tinyAm242" })); + + CraftingManager.addShapelessAuto(new ItemStack(ModItems.ball_fireclay, 4), new Object[] { Items.clay_ball, Items.clay_ball, Items.clay_ball, AL.dust() }); } //Bundled 1/9 recipes diff --git a/src/main/java/com/hbm/crafting/SmeltingRecipes.java b/src/main/java/com/hbm/crafting/SmeltingRecipes.java index 69ad39366..202457866 100644 --- a/src/main/java/com/hbm/crafting/SmeltingRecipes.java +++ b/src/main/java/com/hbm/crafting/SmeltingRecipes.java @@ -110,6 +110,7 @@ public class SmeltingRecipes { GameRegistry.addSmelting(ModItems.rag_damp, new ItemStack(ModItems.rag), 0.1F); GameRegistry.addSmelting(ModItems.rag_piss, new ItemStack(ModItems.rag), 0.1F); GameRegistry.addSmelting(DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.TOBACCO), DictFrame.fromOne(ModItems.plant_item, EnumPlantType.TOBACCO), 0.1F); + GameRegistry.addSmelting(ModItems.ball_fireclay, new ItemStack(ModItems.ingot_firebrick), 0.1F); //GameRegistry.addSmelting(Items.bone, new ItemStack(Items.slime_ball, 3), 0.0F); //GameRegistry.addSmelting(new ItemStack(Items.dye, 1, 15), new ItemStack(Items.slime_ball, 1), 0.0F); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 703e05aa6..8d3f1e0fb 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -147,6 +147,7 @@ public class ModItems { public static Item ingot_c4; public static Item ingot_boron; public static Item ingot_graphite; + public static Item ingot_firebrick; public static Item ingot_smore; public static Item ingot_gh336; @@ -1207,6 +1208,7 @@ public class ModItems { public static Item ballistite; public static Item ball_dynamite; public static Item ball_tnt; + public static Item ball_fireclay; public static Item pellet_cluster; public static Item powder_fire; @@ -2641,6 +2643,7 @@ public class ModItems { ingot_cobalt = new Item().setUnlocalizedName("ingot_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cobalt"); ingot_boron = new Item().setUnlocalizedName("ingot_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_boron"); ingot_graphite = new Item().setUnlocalizedName("ingot_graphite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_graphite"); + ingot_firebrick = new Item().setUnlocalizedName("ingot_firebrick").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_firebrick"); ingot_smore = new ItemFood(10, 20F, false).setUnlocalizedName("ingot_smore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_smore"); sulfur = new Item().setUnlocalizedName("sulfur").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sulfur"); @@ -3992,6 +3995,7 @@ public class ModItems { ballistite = new Item().setUnlocalizedName("ballistite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ballistite"); ball_dynamite = new Item().setUnlocalizedName("ball_dynamite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_dynamite"); ball_tnt = new Item().setUnlocalizedName("ball_tnt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_tnt"); + ball_fireclay = new Item().setUnlocalizedName("ball_fireclay").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_fireclay"); pellet_gas = new ItemCustomLore().setUnlocalizedName("pellet_gas").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellet_gas"); magnetron = new ItemCustomLore().setUnlocalizedName("magnetron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":magnetron_alt"); pellet_buckshot = new Item().setUnlocalizedName("pellet_buckshot").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_lead"); @@ -5807,6 +5811,7 @@ public class ModItems { GameRegistry.registerItem(ingot_cobalt, ingot_cobalt.getUnlocalizedName()); GameRegistry.registerItem(ingot_boron, ingot_boron.getUnlocalizedName()); GameRegistry.registerItem(ingot_graphite, ingot_graphite.getUnlocalizedName()); + GameRegistry.registerItem(ingot_firebrick, ingot_firebrick.getUnlocalizedName()); GameRegistry.registerItem(ingot_dura_steel, ingot_dura_steel.getUnlocalizedName()); GameRegistry.registerItem(ingot_polymer, ingot_polymer.getUnlocalizedName()); GameRegistry.registerItem(ingot_bakelite, ingot_bakelite.getUnlocalizedName()); @@ -6048,6 +6053,7 @@ public class ModItems { GameRegistry.registerItem(ballistite, ballistite.getUnlocalizedName()); GameRegistry.registerItem(ball_dynamite, ball_dynamite.getUnlocalizedName()); GameRegistry.registerItem(ball_tnt, ball_tnt.getUnlocalizedName()); + GameRegistry.registerItem(ball_fireclay, ball_fireclay.getUnlocalizedName()); //Crystals GameRegistry.registerItem(crystal_coal, crystal_coal.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 62d6468a3..8cc2be030 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -265,6 +265,9 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStirling.class, new RenderStirling()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySawmill.class, new RenderSawmill()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCrucible.class, new RenderCrucible()); + //Foundry + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry()); //AMS ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSEmitter.class, new RenderAMSEmitter()); @@ -740,6 +743,10 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderDiode()); RenderingRegistry.registerBlockHandler(new RenderBoxDuct()); RenderingRegistry.registerBlockHandler(new RenderBlockDecoModel(ModBlocks.deco_computer.getRenderType(), ResourceManager.deco_computer)); + + RenderingRegistry.registerBlockHandler(new RenderBasin()); + RenderingRegistry.registerBlockHandler(new RenderMold()); + RenderingRegistry.registerBlockHandler(new RenderChannel()); RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_dynamite.getRenderType(), ResourceManager.charge_dynamite)); RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_c4.getRenderType(), ResourceManager.charge_c4)); diff --git a/src/main/java/com/hbm/render/block/RenderBasin.java b/src/main/java/com/hbm/render/block/RenderBasin.java new file mode 100644 index 000000000..a13e97ca4 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderBasin.java @@ -0,0 +1,101 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.machine.FoundryBasin; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +public class RenderBasin implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + FoundryBasin basin = (FoundryBasin) block; + double x = 0; + double y = 0; + double z = 0; + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, basin.iconTop); + renderer.renderFaceYPos(block, x, y - 0.875D, z, basin.iconBottom); + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, basin.iconBottom); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, basin.iconSide); + renderer.renderFaceXPos(block, x - 0.875D, y, z, basin.iconInner); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, basin.iconSide); + renderer.renderFaceXNeg(block, x + 0.875D, y, z, basin.iconInner); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, basin.iconSide); + renderer.renderFaceZPos(block, x, y, z - 0.875D, basin.iconInner); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, basin.iconSide); + renderer.renderFaceZNeg(block, x, y, z + 0.875D, basin.iconInner); + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + int colorMult = block.colorMultiplier(world, x, y, z); + float r = (float) (colorMult >> 16 & 255) / 255.0F; + float g = (float) (colorMult >> 8 & 255) / 255.0F; + float b = (float) (colorMult & 255) / 255.0F; + + float mulBottom = 0.5F; + float mulTop = 1.0F; + float mulZ = 0.8F; + float mulX = 0.6F; + + if(EntityRenderer.anaglyphEnable) { + float aR = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F; + float aG = (r * 30.0F + g * 70.0F) / 100.0F; + float aB = (r * 30.0F + b * 70.0F) / 100.0F; + r = aR; + g = aG; + b = aB; + } + + FoundryBasin basin = (FoundryBasin) block; + + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, basin.iconTop); + renderer.renderFaceYPos(block, x, y - 0.875D, z, basin.iconBottom); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, basin.iconBottom); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXPos(block, x, y, z, basin.iconSide); + renderer.renderFaceXNeg(block, x, y, z, basin.iconSide); + renderer.renderFaceXPos(block, x - 0.875D, y, z, basin.iconInner); + renderer.renderFaceXNeg(block, x + 0.875D, y, z, basin.iconInner); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZPos(block, x, y, z, basin.iconSide); + renderer.renderFaceZNeg(block, x, y, z, basin.iconSide); + renderer.renderFaceZPos(block, x, y, z - 0.875D, basin.iconInner); + renderer.renderFaceZNeg(block, x, y, z + 0.875D, basin.iconInner); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return FoundryBasin.renderID; + } +} diff --git a/src/main/java/com/hbm/render/block/RenderChannel.java b/src/main/java/com/hbm/render/block/RenderChannel.java new file mode 100644 index 000000000..3ae945e39 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderChannel.java @@ -0,0 +1,382 @@ +package com.hbm.render.block; + +import java.awt.Color; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.machine.FoundryChannel; +import com.hbm.lib.Library; +import com.hbm.tileentity.machine.TileEntityFoundryChannel; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +public class RenderChannel implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + double height = 0.5D; + double x = 0; + double y = 0; + double z = 0; + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + FoundryChannel channel = (FoundryChannel) block; + + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + + //center + renderer.setRenderBounds(0.375D, 0D, 0.375D, 0.625D, 0.125D, 0.625D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + renderer.setRenderBounds(0.3125D, 0D, 0.3125D, 0.6875D, 0.125D, 0.6875D); + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + + //pos X bottom + renderer.setRenderBounds(0.625D, 0D, 0.3125D, 1D, 0.125D, 0.6875D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + + //pos X + renderer.setRenderBounds(0.625D, 0D, 0.3125D, 1D, height, 0.375D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, channel.iconInner); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + + renderer.setRenderBounds(0.625D, 0D, 0.625D, 1D, height, 0.6875D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, channel.iconInner); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + + //neg x bottom + renderer.setRenderBounds(0D, 0D, 0.3125D, 0.375D, 0.125D, 0.6875D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + + //neg x + renderer.setRenderBounds(0D, 0D, 0.3125D, 0.375D, height, 0.375D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, channel.iconInner); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + + renderer.setRenderBounds(0D, 0D, 0.625D, 0.375D, height, 0.6875D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, channel.iconInner); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + + //pos Z bottom + renderer.setRenderBounds(0.3125D, 0D, 0.625D, 0.6875D, 0.125D, 1D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + + //pos z + renderer.setRenderBounds(0.3125D, 0D, 0.625D, 0.375D, height, 1D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, channel.iconInner); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + + renderer.setRenderBounds(0.625D, 0D, 0.625D, 0.6875D, height, 1D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, channel.iconInner); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + + //neg z bottom + renderer.setRenderBounds(0.3125D, 0D, 0D, 0.6875D, 0.125D, 0.375D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + + //neg z + renderer.setRenderBounds(0.3125D, 0D, 0D, 0.375D, height, 0.375D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, channel.iconInner); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + + renderer.setRenderBounds(0.625D, 0D, 0D, 0.6875D, height, 0.375D); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, channel.iconInner); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + int colorMult = block.colorMultiplier(world, x, y, z); + float r = (float) (colorMult >> 16 & 255) / 255.0F; + float g = (float) (colorMult >> 8 & 255) / 255.0F; + float b = (float) (colorMult & 255) / 255.0F; + + float mulBottom = 0.5F; + float mulTop = 1.0F; + float mulZ = 0.8F; + float mulX = 0.6F; + + if(EntityRenderer.anaglyphEnable) { + float aR = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F; + float aG = (r * 30.0F + g * 70.0F) / 100.0F; + float aB = (r * 30.0F + b * 70.0F) / 100.0F; + r = aR; + g = aG; + b = aB; + } + + FoundryChannel channel = (FoundryChannel) block; + + TileEntity te = world.getTileEntity(x, y, z); + TileEntityFoundryChannel tile = null; + + if(te instanceof TileEntityFoundryChannel) { + tile = (TileEntityFoundryChannel) te; + } + + boolean doRender = tile != null ? (tile.amount > 0 && tile.type != null) : false; + double level = doRender ? tile.amount * 0.25D / tile.getCapacity() : 0; + Color color = doRender ? new Color(tile.type.moltenColor).brighter() : null; + + boolean posX = channel.canConnectTo(world, x, y, z, Library.POS_X); + boolean negX = channel.canConnectTo(world, x, y, z, Library.NEG_X); + boolean posZ = channel.canConnectTo(world, x, y, z, Library.POS_Z); + boolean negZ = channel.canConnectTo(world, x, y, z, Library.NEG_Z); + + double height = 0.5D; + + renderer.setRenderBounds(0.375D, 0D, 0.375D, 0.625D, 0.125D, 0.625D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + renderer.setRenderBounds(0.3125D, 0D, 0.3125D, 0.6875D, 0.125D, 0.6875D); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + + if(doRender) { + renderer.setRenderBounds(0.375D, 0.125D, 0.375D, 0.625D, 0.125D + level, 0.625D); + tessellator.setColorOpaque_F(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + renderer.renderFaceYPos(block, x, y, z, channel.iconLava); + } + + if(posX) { + renderer.setRenderBounds(0.625D, 0D, 0.3125D, 1D, 0.125D, 0.6875D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + + renderer.setRenderBounds(0.625D, 0D, 0.3125D, 1D, height, 0.375D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + renderer.renderFaceZPos(block, x, y, z, channel.iconInner); + + renderer.setRenderBounds(0.625D, 0D, 0.625D, 1D, height, 0.6875D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZNeg(block, x, y, z, channel.iconInner); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + + if(doRender) { + renderer.setRenderBounds(0.625D, 0.125D, 0.3125D, 1D, 0.125D + level, 0.6875D); + tessellator.setColorOpaque_F(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + renderer.renderFaceYPos(block, x, y, z, channel.iconLava); + renderer.renderFaceXPos(block, x, y, z, channel.iconLava); + } + + } else { + renderer.setRenderBounds(0.625, 0D, 0.3125D, 0.6875D, height, 0.6875D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXNeg(block, x, y, z, channel.iconInner); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + } + + if(negX) { + renderer.setRenderBounds(0D, 0D, 0.3125D, 0.375D, 0.125D, 0.6875D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + + renderer.setRenderBounds(0D, 0D, 0.3125D, 0.375D, height, 0.375D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + renderer.renderFaceZPos(block, x, y, z, channel.iconInner); + + renderer.setRenderBounds(0D, 0D, 0.625D, 0.375D, height, 0.6875D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZNeg(block, x, y, z, channel.iconInner); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + + if(doRender) { + renderer.setRenderBounds(0D, 0.125D, 0.3125D, 0.375D, 0.125D + level, 0.6875D); + tessellator.setColorOpaque_F(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + renderer.renderFaceYPos(block, x, y, z, channel.iconLava); + renderer.renderFaceXNeg(block, x, y, z, channel.iconLava); + } + + } else { + renderer.setRenderBounds(0.3125D, 0D, 0.3125D, 0.375D, height, 0.6875D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + renderer.renderFaceXPos(block, x, y, z, channel.iconInner); + } + + if(posZ) { + renderer.setRenderBounds(0.3125D, 0D, 0.625D, 0.6875D, 0.125D, 1D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + + renderer.setRenderBounds(0.3125D, 0D, 0.625D, 0.375D, height, 1D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + renderer.renderFaceXPos(block, x, y, z, channel.iconInner); + + renderer.setRenderBounds(0.625D, 0D, 0.625D, 0.6875D, height, 1D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXNeg(block, x, y, z, channel.iconInner); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + + if(doRender) { + renderer.setRenderBounds(0.3125D, 0.125D, 0.625D, 0.6875D, 0.125D + level, 1D); + tessellator.setColorOpaque_F(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + renderer.renderFaceYPos(block, x, y, z, channel.iconLava); + renderer.renderFaceZPos(block, x, y, z, channel.iconLava); + } + + } else { + renderer.setRenderBounds(0.3125D, 0D, 0.625D, 0.6875D, height, 0.6875D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZNeg(block, x, y, z, channel.iconInner); + renderer.renderFaceZPos(block, x, y, z, channel.iconSide); + } + + if(negZ) { + renderer.setRenderBounds(0.3125D, 0D, 0D, 0.6875D, 0.125D, 0.375D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconBottom); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, channel.iconBottom); + + renderer.setRenderBounds(0.3125D, 0D, 0D, 0.375D, height, 0.375D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXNeg(block, x, y, z, channel.iconSide); + renderer.renderFaceXPos(block, x, y, z, channel.iconInner); + + renderer.setRenderBounds(0.625D, 0D, 0D, 0.6875D, height, 0.375D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXNeg(block, x, y, z, channel.iconInner); + renderer.renderFaceXPos(block, x, y, z, channel.iconSide); + + if(doRender) { + renderer.setRenderBounds(0.3125D, 0.125D, 0D, 0.6875D, 0.125D + level, 0.375D); + tessellator.setColorOpaque_F(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + renderer.renderFaceYPos(block, x, y, z, channel.iconLava); + renderer.renderFaceZNeg(block, x, y, z, channel.iconLava); + } + + } else { + renderer.setRenderBounds(0.3125D, 0D, 0.3125D, 0.6875D, height, 0.375D); + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y, z, channel.iconTop); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZNeg(block, x, y, z, channel.iconSide); + renderer.renderFaceZPos(block, x, y, z, channel.iconInner); + } + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return FoundryChannel.renderID; + } +} diff --git a/src/main/java/com/hbm/render/block/RenderMold.java b/src/main/java/com/hbm/render/block/RenderMold.java new file mode 100644 index 000000000..c1793ee2c --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderMold.java @@ -0,0 +1,101 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.machine.FoundryMold; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +public class RenderMold implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + FoundryMold basin = (FoundryMold) block; + double x = 0; + double y = 0; + double z = 0; + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, 1F, 0F); + renderer.renderFaceYPos(block, x, y - 0.5D, z, basin.iconTop); + renderer.renderFaceYPos(block, x, y - 0.875D, z, basin.iconBottom); + tessellator.setNormal(0F, -1F, 0F); + renderer.renderFaceYNeg(block, x, y, z, basin.iconBottom); + tessellator.setNormal(1F, 0F, 0F); + renderer.renderFaceXPos(block, x, y, z, basin.iconSide); + renderer.renderFaceXPos(block, x - 0.875D, y, z, basin.iconInner); + tessellator.setNormal(-1F, 0F, 0F); + renderer.renderFaceXNeg(block, x, y, z, basin.iconSide); + renderer.renderFaceXNeg(block, x + 0.875D, y, z, basin.iconInner); + tessellator.setNormal(0F, 0F, 1F); + renderer.renderFaceZPos(block, x, y, z, basin.iconSide); + renderer.renderFaceZPos(block, x, y, z - 0.875D, basin.iconInner); + tessellator.setNormal(0F, 0F, -1F); + renderer.renderFaceZNeg(block, x, y, z, basin.iconSide); + renderer.renderFaceZNeg(block, x, y, z + 0.875D, basin.iconInner); + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + int colorMult = block.colorMultiplier(world, x, y, z); + float r = (float) (colorMult >> 16 & 255) / 255.0F; + float g = (float) (colorMult >> 8 & 255) / 255.0F; + float b = (float) (colorMult & 255) / 255.0F; + + float mulBottom = 0.5F; + float mulTop = 1.0F; + float mulZ = 0.8F; + float mulX = 0.6F; + + if(EntityRenderer.anaglyphEnable) { + float aR = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F; + float aG = (r * 30.0F + g * 70.0F) / 100.0F; + float aB = (r * 30.0F + b * 70.0F) / 100.0F; + r = aR; + g = aG; + b = aB; + } + + FoundryMold mold = (FoundryMold) block; + + tessellator.setColorOpaque_F(r * mulTop, g * mulTop, b * mulTop); + renderer.renderFaceYPos(block, x, y - 0.5D, z, mold.iconTop); + renderer.renderFaceYPos(block, x, y - 0.875D, z, mold.iconBottom); + tessellator.setColorOpaque_F(r * mulBottom, g * mulBottom, b * mulBottom); + renderer.renderFaceYNeg(block, x, y, z, mold.iconBottom); + tessellator.setColorOpaque_F(r * mulX, g * mulX, b * mulX); + renderer.renderFaceXPos(block, x, y, z, mold.iconSide); + renderer.renderFaceXNeg(block, x, y, z, mold.iconSide); + renderer.renderFaceXPos(block, x - 0.875D, y, z, mold.iconInner); + renderer.renderFaceXNeg(block, x + 0.875D, y, z, mold.iconInner); + tessellator.setColorOpaque_F(r * mulZ, g * mulZ, b * mulZ); + renderer.renderFaceZPos(block, x, y, z, mold.iconSide); + renderer.renderFaceZNeg(block, x, y, z, mold.iconSide); + renderer.renderFaceZPos(block, x, y, z - 0.875D, mold.iconInner); + renderer.renderFaceZNeg(block, x, y, z + 0.875D, mold.iconInner); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return FoundryMold.renderID; + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderCrucible.java b/src/main/java/com/hbm/render/tileentity/RenderCrucible.java index 5fd645ad1..3bcb5f57f 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCrucible.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCrucible.java @@ -2,6 +2,7 @@ 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; @@ -19,6 +20,13 @@ public class RenderCrucible extends TileEntitySpecialRenderer implements IItemRe GL11.glTranslated(x + 0.5D, y, z + 0.5D); GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + } bindTexture(ResourceManager.crucible_tex); ResourceManager.crucible_heat.renderAll(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderFoundry.java b/src/main/java/com/hbm/render/tileentity/RenderFoundry.java new file mode 100644 index 000000000..c27f25fe9 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderFoundry.java @@ -0,0 +1,72 @@ +package com.hbm.render.tileentity; + +import java.awt.Color; + +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.IRenderFoundry; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +public class RenderFoundry extends TileEntitySpecialRenderer { + + public static final ResourceLocation lava = new ResourceLocation(RefStrings.MODID, "textures/models/machines/lava_gray.png"); + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + IRenderFoundry foundry = (IRenderFoundry) tile; + + if(!foundry.shouldRender()) return; + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + GL11.glDepthMask(false); + Tessellator tess = Tessellator.instance; + this.bindTexture(lava); + + int hex = foundry.getMat().moltenColor; + Color color = new Color(hex); + + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + tess.startDrawingQuads(); + tess.setNormal(0F, 1F, 0F); + tess.setColorRGBA_F(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F); + tess.addVertexWithUV(foundry.minX(), foundry.getLevel(), foundry.minZ(), foundry.minZ(), foundry.maxX()); + tess.addVertexWithUV(foundry.minX(), foundry.getLevel(), foundry.maxZ(), foundry.maxZ(), foundry.maxX()); + tess.addVertexWithUV(foundry.maxX(), foundry.getLevel(), foundry.maxZ(), foundry.maxZ(), foundry.minX()); + tess.addVertexWithUV(foundry.maxX(), foundry.getLevel(), foundry.minZ(), foundry.minZ(), foundry.minX()); + tess.draw(); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + tess.startDrawingQuads(); + tess.setNormal(0F, 1F, 0F); + tess.setColorRGBA_F(1F, 1F, 1F, 0.3F); + tess.addVertexWithUV(foundry.minX(), foundry.getLevel(), foundry.minZ(), foundry.minZ(), foundry.maxX()); + tess.addVertexWithUV(foundry.minX(), foundry.getLevel(), foundry.maxZ(), foundry.maxZ(), foundry.maxX()); + tess.addVertexWithUV(foundry.maxX(), foundry.getLevel(), foundry.maxZ(), foundry.maxZ(), foundry.minX()); + tess.addVertexWithUV(foundry.maxX(), foundry.getLevel(), foundry.minZ(), foundry.minZ(), foundry.minX()); + tess.draw(); + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopAttrib(); + GL11.glPopMatrix(); + + GL11.glDepthMask(true); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 3ae08ab0c..4bf7992a5 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -251,6 +251,10 @@ public class TileMappings { put(TileEntityStirling.class, "tileentity_stirling"); put(TileEntitySawmill.class, "tileentity_sawmill"); put(TileEntityCrucible.class, "tileentity_crucible"); + + put(TileEntityFoundryMold.class, "tileentity_foundry_mold"); + put(TileEntityFoundryBasin.class, "tileentity_foundry_basin"); + put(TileEntityFoundryChannel.class, "tileentity_foundry_channel"); put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter"); put(TileEntityDiFurnaceRTG.class, "tileentity_rtg_difurnace"); diff --git a/src/main/java/com/hbm/tileentity/machine/IRenderFoundry.java b/src/main/java/com/hbm/tileentity/machine/IRenderFoundry.java new file mode 100644 index 000000000..b5d0011c8 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/IRenderFoundry.java @@ -0,0 +1,14 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.material.NTMMaterial; + +public interface IRenderFoundry { + + public boolean shouldRender(); + public double getLevel(); + public NTMMaterial getMat(); + public double minX(); + public double maxX(); + public double minZ(); + public double maxZ(); +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 672beb8a2..febaef81e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; +import com.hbm.blocks.BlockDummyable; import com.hbm.inventory.container.ContainerCrucible; import com.hbm.inventory.gui.GUICrucible; import com.hbm.inventory.material.MaterialShapes; @@ -15,18 +16,22 @@ import com.hbm.items.ModItems; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import api.hbm.block.ICrucibleAcceptor; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider { @@ -90,6 +95,45 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro this.progress = 0; } + /* TEMP */ + if(!this.wasteStack.isEmpty()) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + + outer: + for(MaterialStack stack : this.wasteStack) { + + for(int i = 0; i < 4; i++) { + int x = xCoord + dir.offsetX * 2; + int z = zCoord + dir.offsetZ * 2; + int y = yCoord - i - 1; + Block b = worldObj.getBlock(x, y, z); + if(b.isAir(worldObj, x, y, z)) continue; + + if(b instanceof ICrucibleAcceptor) { + + ICrucibleAcceptor acc = (ICrucibleAcceptor) b; + int pourAmount = Math.min(MaterialShapes.NUGGET.q(1), stack.amount); + MaterialStack toPour = new MaterialStack(stack.material, pourAmount); + + if(acc.canAcceptPartialPour(worldObj, x, y, z, 0.5, 1, 0.5, ForgeDirection.UP, toPour)) { + int prev = pourAmount; + MaterialStack left = acc.pour(worldObj, x, y, z, 0.5, 1, 0.5, ForgeDirection.UP, toPour); + + int diff = prev - (left != null ? left.amount : 0); + stack.amount -= diff; + + break outer; + } + } else { + break; + } + } + } + } + + this.wasteStack.removeIf(x -> x.amount <= 0); + NBTTagCompound data = new NBTTagCompound(); int[] rec = new int[recipeStack.size() * 2]; int[] was = new int[wasteStack.size() * 2]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java index 212218f1e..ca3972325 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java @@ -2,12 +2,13 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.material.MaterialShapes; import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.inventory.material.NTMMaterial; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.oredict.OreDictionary; -public class TileEntityFoundryBasin extends TileEntityFoundryBase { +public class TileEntityFoundryBasin extends TileEntityFoundryBase implements IRenderFoundry { @Override public int getCapacity() { @@ -18,15 +19,24 @@ public class TileEntityFoundryBasin extends TileEntityFoundryBase { public void updateEntity() { super.updateEntity(); + if(!worldObj.isRemote) { + + if(this.lastType != this.type || this.lastAmount != this.amount) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + this.lastType = this.type; + this.lastAmount = this.amount; + } + } + //TODO: cool off } - //TODO: move to block @Override public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { if(side != ForgeDirection.UP) return false; //reject from any direction other than the top if(this.type != null && this.type != stack.material) return false; //reject if there's already a different material + if(this.amount >= this.getCapacity()) return false; //reject if the buffer is already full for(String name : stack.material.names) { String od = "block" + name; @@ -42,6 +52,10 @@ public class TileEntityFoundryBasin extends TileEntityFoundryBase { @Override public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + if(this.type == null) { + this.type = stack.material; + } + if(stack.amount + this.amount <= this.getCapacity()) { this.amount += stack.amount; return null; @@ -57,4 +71,24 @@ public class TileEntityFoundryBasin extends TileEntityFoundryBase { @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return stack; } + + @Override + public boolean shouldRender() { + return this.type != null && this.amount > 0; + } + + @Override + public double getLevel() { + return 0.125 + this.amount * 0.75D / this.getCapacity(); + } + + @Override + public NTMMaterial getMat() { + return this.type; + } + + @Override public double minX() { return 0.125D; } + @Override public double maxX() { return 0.875D; } + @Override public double minZ() { return 0.125D; } + @Override public double maxZ() { return 0.875D; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java new file mode 100644 index 000000000..47bd3718c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java @@ -0,0 +1,158 @@ +package com.hbm.tileentity.machine; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.material.MaterialShapes; +import com.hbm.inventory.material.Mats.MaterialStack; + +import api.hbm.block.ICrucibleAcceptor; +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityFoundryChannel extends TileEntityFoundryBase { + + @Override + public void updateEntity() { + super.updateEntity(); + + if(!worldObj.isRemote) { + + if(this.type == null && this.amount != 0) { + this.amount = 0; + } + + if(this.lastType != this.type || this.lastAmount != this.amount) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + this.lastType = this.type; + this.lastAmount = this.amount; + } + + if(worldObj.rand.nextInt(10) == 0 && this.amount > 0 && this.type != null) { + + List ints = new ArrayList() {{ add(2); add(3); add(4); add(5); }}; + Collections.shuffle(ints); + + for(Integer i : ints) { + ForgeDirection dir = ForgeDirection.getOrientation(i); + Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ); + + if(b instanceof ICrucibleAcceptor && b != ModBlocks.foundry_channel) { + ICrucibleAcceptor acc = (ICrucibleAcceptor) b; + + if(acc.canAcceptPartialFlow(worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir.getOpposite(), new MaterialStack(this.type, this.amount))) { + MaterialStack left = acc.flow(worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir.getOpposite(), new MaterialStack(this.type, this.amount)); + if(left == null) { + this.type = null; + this.amount = 0; + } else { + this.amount = left.amount; + } + return; + } + } + } + + for(Integer i : ints) { + ForgeDirection dir = ForgeDirection.getOrientation(i); + TileEntity b = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ); + + if(b instanceof TileEntityFoundryChannel) { + TileEntityFoundryChannel acc = (TileEntityFoundryChannel) b; + + if(acc.type == null || acc.type == this.type) { + acc.type = this.type; + + if(worldObj.rand.nextInt(5) == 0) { + //1:4 chance that the fill states are simply swapped + //this promotes faster spreading and prevents spread limits + int buf = this.amount; + this.amount = acc.amount; + acc.amount = buf; + + } else { + //otherwise, equalize the neighbors + int diff = this.amount - acc.amount; + + if(diff > 0) { + diff /= 2; + this.amount -= diff; + acc.amount += diff; + } + } + } + } + } + } + } + } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + if(side != ForgeDirection.UP) return false; //reject from any direction other than the top + if(this.type != null && this.type != stack.material) return false; //reject if there's already a different material + if(this.amount >= this.getCapacity()) return false; //reject if the buffer is already full + + return true; //pour + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + if(this.type == null) { + this.type = stack.material; + } + + if(stack.amount + this.amount <= this.getCapacity()) { + this.amount += stack.amount; + return null; + } + + int required = this.getCapacity() - this.amount; + this.amount = this.getCapacity(); + + stack.amount -= required; + + return stack; + } + + @Override + public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + + if(side == ForgeDirection.UP || side == ForgeDirection.DOWN) return false; + if(this.type != null && this.type != stack.material) return false; + if(this.amount >= this.getCapacity()) return false; + + return true; //pour + } + + @Override + public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + + if(this.type == null) { + this.type = stack.material; + } + + if(stack.amount + this.amount <= this.getCapacity()) { + this.amount += stack.amount; + return null; + } + + int required = this.getCapacity() - this.amount; + this.amount = this.getCapacity(); + + stack.amount -= required; + + return stack; + } + + @Override + public int getCapacity() { + return MaterialShapes.INGOT.q(1); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java new file mode 100644 index 000000000..f5118a71a --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java @@ -0,0 +1,128 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.material.MaterialShapes; +import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.inventory.material.NTMMaterial; + +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; + +public class TileEntityFoundryMold extends TileEntityFoundryBase implements IRenderFoundry { + + @Override + public int getCapacity() { + return MaterialShapes.INGOT.q(1); + } + + @Override + public void updateEntity() { + super.updateEntity(); + + if(!worldObj.isRemote) { + + if(this.lastType != this.type || this.lastAmount != this.amount) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + this.lastType = this.type; + this.lastAmount = this.amount; + } + } + + //TODO: cool off + } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + if(side != ForgeDirection.UP) return false; //reject from any direction other than the top + if(this.type != null && this.type != stack.material) return false; //reject if there's already a different material + if(this.amount >= this.getCapacity()) return false; //reject if the buffer is already full + + for(String name : stack.material.names) { + String od = "ingot" + name; + + if(!OreDictionary.getOres(od).isEmpty()) { + return true; //at least one block for this material? return TRUE + } + } + + return false; //no OD match -> no pouring + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + if(this.type == null) { + this.type = stack.material; + } + + if(stack.amount + this.amount <= this.getCapacity()) { + this.amount += stack.amount; + return null; + } + + int required = this.getCapacity() - this.amount; + this.amount = this.getCapacity(); + + stack.amount -= required; + + return stack; + } + + @Override + public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + + if(this.type != null && this.type != stack.material) return false; //reject if there's already a different material + if(this.amount >= this.getCapacity()) return false; //reject if the buffer is already full + + for(String name : stack.material.names) { + String od = "ingot" + name; + + if(!OreDictionary.getOres(od).isEmpty()) { + return true; //at least one block for this material? return TRUE + } + } + + return false; //no OD match -> no pouring + } + + @Override + public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { + + if(this.type == null) { + this.type = stack.material; + } + + if(stack.amount + this.amount <= this.getCapacity()) { + this.amount += stack.amount; + return null; + } + + int required = this.getCapacity() - this.amount; + this.amount = this.getCapacity(); + + stack.amount -= required; + + return stack; + } + + @Override + public boolean shouldRender() { + return this.type != null && this.amount > 0; + } + + @Override + public double getLevel() { + return 0.125 + this.amount * 0.25D / this.getCapacity(); + } + + @Override + public NTMMaterial getMat() { + return this.type; + } + + @Override public double minX() { return 0.125D; } + @Override public double maxX() { return 0.875D; } + @Override public double minZ() { return 0.125D; } + @Override public double maxZ() { return 0.875D; } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_basin.png b/src/main/resources/assets/hbm/textures/blocks/foundry_basin.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b5094ccff24edbbb94f8ff188d3fe1ba60675f GIT binary patch literal 651 zcmV;60(AX}P)CJZ_1#k`-+Nz0l~^9A>N5p}zyZw#OS`21%@ z>pc>X03#bROE=U_!|!#D5`uvZ>4h4AP-&{B1>h>%Fp4bz!^ohgm0()dI1$hjg11*U z?BTsaln#N!;}|50uj>-l4c^0SyG1`9XePUf0E|NRo}4c$PLC1*>ekUX2ZP~(dcLU8 zlh|^x%s3wPxLmDSuZi5~I#^qD^#0KyA|5O^F(6tO9a9T|k+4w5KBzj!q6v;pVK zil>7Btt2+k46WgMWAD^Y#@z-F`Uz*3ztG>VZ@KP5TJM?dvH=hW8YKm*qQ(&daGe+I z^CSBv0H9|yVW2R&3(IuX5oYOzs%=qHAa@$pRYM$f898|1oTs0}2hIP(1N|swofilx zajr!O(9a)^kphz46EW)6Eb1*E)0QWrfaCFidA0$d=_|C7NFn)fQ=^@Cd|za=&ZFc% zn-_TrrjOBzcR#M~)FdFKq;|T?!6Gl&d$GqPwkXv#-EI!G#NFa`9(Y0P9ZD*|?e6Gu lkQWsmcgVs1UjRg*;V-?A5Tu+8(mntH002ovPDHLkV1n*+A4mWI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_basin_bottom.png b/src/main/resources/assets/hbm/textures/blocks/foundry_basin_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..53406350fa015e77948f54ae5f07880b0c7b6a65 GIT binary patch literal 515 zcmV+e0{s1nP)B@dw6ZoCj;E>jGz$c{)GJf^Sd&W z@IX}f`FUezjNTce0}zoEMP*S{EO$hNW=6|MB7&@ zNsEZRX-0Uk?#BRgEqZH2CZ>vtpshWR0h*cZ1K*uZ6*B_?LU>;nV~nS%s2~U)v1K4U z2>*AEOvdQ6)-Y8>jRMnQV);46WMP$-j!_4;CTpY(BA~qs|$`@T#(TJd`IA5=g zq`Q!JvpE-t?EPAZ$YxW8d^|AQl(Gt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_basin_inner.png b/src/main/resources/assets/hbm/textures/blocks/foundry_basin_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..79de6ddee9ca2dafc11ff315da273349dfe574ae GIT binary patch literal 533 zcmV+w0_y#VP)R{&423^CKli;-gb<<|fgLbrzyLPKl3)P{MyR6-L9143 z-%VnhL2fUw0z65S*ykJ{TRwhx6A!I(tcA}%PrQC{Kt;J-8y8Ow-1ot=!@}jw9p4^; zSI-yDO6I-~0P^?iI{?nwV5yah^D{nOUU7SBe7X9?%kv}6u6epFKmy?Fj~grk1?2s^ zw_)z&oCpv4n8-;LbEo8txsz1+JIoysA*VD^Z5XObQYEDX0+?`GS8A<$p{O7T!)yW| z{KH`G`&nxt=S)&XLz&-@sbyATsa0BO+5x1On58l%^z)01GUPS_-FiC8b2Ig@_=hgt?<4gen2#$KHn- zDuPE)N}>18@p!<7F~*ea?nDG-SOWsEV6+r~D=z#|Y5Qc9%F8%;_OQ$bQ?sTGgdoQ5EFGtCS$1K_l-00000NkvXXu0mjfZ#?I0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_basin_side.png b/src/main/resources/assets/hbm/textures/blocks/foundry_basin_side.png new file mode 100644 index 0000000000000000000000000000000000000000..1573c1d22df8fd1d8b45a5a2ae6a5c16b074a5b9 GIT binary patch literal 599 zcmV-d0;v6oP)7`f)6g&V4ft@;_cn3mWjK?9w&MA(- z-dc>I_OPT~U85NStyS2?)#3czUDI7H-oAe2i@G6>Le5tur;iL$NYbiiJ}~SX%fx6F z+l)_z=j2F}go=G*0Z^Bl41lDz=qO@7OnASzAuVe@+^l&#jH%lVBdvh|fR8`6wB92D z2{1Jg%XCL=E#LD!fe?&M#4u6-M1i8REdbZqj%i{5n8X^js053$#)*)j5WKs-WvWnI?w1wY|8D=n-$uPJRCX2rm#q;BgG%m|amE$RGswFoTS;Us`t&t@kVs+W<&HMIZ&+qQ(&cu-X^g?MIGu z2*6M)qA)Zw9mDIYA)t&eK?nloIbfDhQBLBBcbt lT1#UsMr#n@oTF_WKLNs1Sd^roY0ERIK|E zEck-9dsJ3ciXe&7xN&07jP065MAr3PKIt7@-TR*N_0z}pO&ar%Z5SsJw=2W3Y{-ql z>q!=y5+!@|eUG!rAwT})966SvssWGyrLA~3O!mXjmAoIOJZZy+QObO)=_`-Lst@bE*Dqd9bTwQ;OgRYd$-7te_N0HrGDw|UPVzMhb;Ibp& zc4Yt%*V7ro5uF{p4IGYTgIH_J+Sty3NfMJAgD`c&=)ms`c+$I?#V`u?^>tC`?rucb zrskEeIs@igjgmb?tQ6BM?+oZGkG}6Af7d;z+s=UJ_L;NEA@U^cZXe)gsZn`@c*r({ zuIvmr9rzqM7U$cS^Y;H^+$=Sx10UfC*2XeA@F}WY$kQz6SJ`rsDneJX+?LF@8hO9k z1sK{I<#~*vkn8D;wYL16Ju-{}Y_lR(3g`iFx5yYL5o|U805C+O8bj!frT_o{07*qo IM6N<$f}gtGKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_channel_bottom.png b/src/main/resources/assets/hbm/textures/blocks/foundry_channel_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..53406350fa015e77948f54ae5f07880b0c7b6a65 GIT binary patch literal 515 zcmV+e0{s1nP)B@dw6ZoCj;E>jGz$c{)GJf^Sd&W z@IX}f`FUezjNTce0}zoEMP*S{EO$hNW=6|MB7&@ zNsEZRX-0Uk?#BRgEqZH2CZ>vtpshWR0h*cZ1K*uZ6*B_?LU>;nV~nS%s2~U)v1K4U z2>*AEOvdQ6)-Y8>jRMnQV);46WMP$-j!_4;CTpY(BA~qs|$`@T#(TJd`IA5=g zq`Q!JvpE-t?EPAZ$YxW8d^|AQl(Gt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_channel_inner.png b/src/main/resources/assets/hbm/textures/blocks/foundry_channel_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..62c97bacff6796ef91469355b8b7fb50e9d8692a GIT binary patch literal 329 zcmV-P0k-~$P)C}49e2^N5$La8DIi4rM^ zpFQ&^0z|BUhEv_<{@|Z~K<@9Z$~O0mQqAN0j?1$a6=l_BrbjKCe&D2Sm@U`5Yzr5s z4dc3E(+>btuZuMR<2=x$#B?&|VK!&A%RJ3LIG>EjzTmiN00ZFpZHbqH0&;tET|9!S zGD;NsVV`WOcm#D-;SreXujw9vh)|jBQ+;q$6;s8`KmZqZT}Mjk@L2^x7~ByN^t%xe zJmO2rkD+ZE+?~N4k09rsh#=K9DuTK@01-hc1v4We5QNH%C``Q{rC znx@(P@ehTzZU3fz3plAx@m?@B)+r$(m>I!)L_#gZQZTF&!B2_erX%dpm_w>4mh|F2^EFaE!Iq!S!g+jgFy{ixQ zI=aX|Jbj?|cQysLir|;F`8J4(m>|tqsrrHofzI**y=lO^0zV$cVi>?Eg2U4;h7y>o zWkuV{1y}n!n|h_{b3BY`TRFCAFbWfLonxC8{b`6}nY0%xjKT!dP;9I&@#*J;mP)X$ zHL3(@27p(xn58MEp}4u+VjRU>Z`SC|A|`Q+X(+B-TBJ7(h?A5?y(~RF-@2jSKE5Z? z{`hQHzqo%(aA7via+(!a2#=!}+Z35gfrelHXX*d)O7lD}6iD)nMb{CHy;+1~nS!f> zy^cN_M6B0c3}x_p7BC7EnhPGyic65r1y9b#jKYM=6_>A}X07Jnl`O3OG{muOn!d;3 zX&2ivFb&1YV9e+484bTok`M768`DsK?aep&(jSS9c=hm(e)DKcr2YQMwtl&N`{KXw zBQqfreVpraHddDe7XoWF86d#XAi|l*r!21UeKf@@$$PKYU0Ny;{0~CEr0w0;Us3=7 N002ovPDHLkV1ggf@4o;5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_mold_bottom.png b/src/main/resources/assets/hbm/textures/blocks/foundry_mold_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..53406350fa015e77948f54ae5f07880b0c7b6a65 GIT binary patch literal 515 zcmV+e0{s1nP)B@dw6ZoCj;E>jGz$c{)GJf^Sd&W z@IX}f`FUezjNTce0}zoEMP*S{EO$hNW=6|MB7&@ zNsEZRX-0Uk?#BRgEqZH2CZ>vtpshWR0h*cZ1K*uZ6*B_?LU>;nV~nS%s2~U)v1K4U z2>*AEOvdQ6)-Y8>jRMnQV);46WMP$-j!_4;CTpY(BA~qs|$`@T#(TJd`IA5=g zq`Q!JvpE-t?EPAZ$YxW8d^|AQl(Gt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/foundry_mold_inner.png b/src/main/resources/assets/hbm/textures/blocks/foundry_mold_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..62c97bacff6796ef91469355b8b7fb50e9d8692a GIT binary patch literal 329 zcmV-P0k-~$P)C}49e2^N5$La8DIi4rM^ zpFQ&^0z|BUhEv_<{@|Z~K<@9Z$~O0mQqAN0j?1$a6=l_BrbjKCe&D2Sm@U`5Yzr5s z4dc3E(+>btuZuMR<2=x$#B?&|VK!&A%RJ3LIG>EjzTmiN00ZFpZHbqH0&;tET|9!S zGD;NsVV`WOcm#D-;SreXujw9vh)|jBQ+;q$6;s8`KmZqZT}Mjk@L2^x7~ByN^t%xe zJmO2rkD+ZE+?~N4k09rsh#=K9DuTK@01-hc1v4We5QNH%C``Q{rC znx@(P@ehTzZU3fz3plAx@m?@B)+r$(m>I!)Ls1Sd^roY0ERIK|E zEck-9dsJ3ciXe&7xN&07jP065MAr3PKIt7@-TR*N_0z}pO&ar%Z5SsJw=2W3Y{-ql z>q!=y5+!@|eUG!rAwT})966SvssWGyrLA~3O!mXjmAoIOJZZy+QObO)=_`-Lst@bE*Dqd9bTwQ;OgRYd$-7te_N0HrGDw|UPVzMhb;Ibp& zc4Yt%*V7ro5uF{p4IGYTgIH_J+Sty3NfMJAgD`c&=)ms`c+$I?#V`u?^>tC`?rucb zrskEeIs@igjgmb?tQ6BM?+oZGkG}6Af7d;z+s=UJ_L;NEA@U^cZXe)gsZn`@c*r({ zuIvmr9rzqM7U$cS^Y;H^+$=Sx10UfC*2XeA@F}WY$kQz6SJ`rsDneJX+?LF@8hO9k z1sK{I<#~*vkn8D;wYL16Ju-{}Y_lR(3g`iFx5yYL5o|U805C+O8bj!frT_o{07*qo IM6N<$f}gtGKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/lava_gray.png b/src/main/resources/assets/hbm/textures/blocks/lava_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8ddc411d10e6fede7ace69edd35a16a8460e0c GIT binary patch literal 751 zcmVRs1G2tnWX)OF4Id?rZ}CX)%rlI@Rx3{;f*K4vY!;0e=V+?to zQ`a?BRnfLBRaGH`z_x9s(wOaA|`brpv%;$3ewAKs;16zcc}JNmxIaU8-hWIP`K|ALefr4&jjrqd}84-dS&ys+JFaU2J&HCk(Y-~YYS zwr#quBZ?yI!C-*z`@b@6w_8r96Mf&aUatv)fcyJ<0It_7UteE%p2z8QVmh5-2_Xj@E1Zck5>s^T%-U1002ovPDHLkV1fmbTK}qf+h{S7g{b6IY7Ed|MnfVSg@V_-zD5}M!qWZ1J z`pF1T-l%YP;WIphN;q(EST%ZkzZK>RMYX)T&P2w;j)1V?^3unN!u{VxfrhjrrBq}d97-s22hp}Fr0E(n9pNdaDAmOpk4#$!gEk(W$o({ zA%f$hs*xTycP)=J->=x^u^rSNCk TlXDjH00000NkvXXu0mjf*0Q?M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ingot_firebrick.png b/src/main/resources/assets/hbm/textures/items/ingot_firebrick.png new file mode 100644 index 0000000000000000000000000000000000000000..8e6650152986d9dd4f57882144938ccfcb9149e6 GIT binary patch literal 403 zcmV;E0c`$>P)NklA#2cU4FXB8sdG2|;L2?$Nuq?JD#icJ}7Iqd_RB zbP!7lBwRmM*>!i?4!X0NNY{EVGtA8M{N@Y(OqW;~@S=0?{jh3=k zunFDYUf{R^0DXJ5DUuRpUs41BEJZ*<)np6sJX%m|v=qfMjZpO#R7(XMH=u9NSc(AG z|00u0NNDOVd9|lfdVQRsZM&-@l=E30o?fVy3IOYrURs1G2tnWX)OF4Id?rZ}CX)%rlI@Rx3{;f*K4vY!;0e=V+?to zQ`a?BRnfLBRaGH`z_x9s(wOaA|`brpv%;$3ewAKs;16zcc}JNmxIaU8-hWIP`K|ALefr4&jjrqd}84-dS&ys+JFaU2J&HCk(Y-~YYS zwr#quBZ?yI!C-*z`@b@6w_8r96Mf&aUatv)fcyJ<0It_7UteE%p2z8QVmh5-2_Xj@E1Zck5>s^T%-U1002ovPDHLkV1fmbT