From 03348a71bb504493f4bb3542749c39fbe2215f5b Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 18 Feb 2014 06:05:38 -0500 Subject: [PATCH] About finished with troughs just need to fix render and test fluid flow --- .../resonantinduction/archaic/Archaic.java | 140 +++++++++--------- .../archaic/ClientProxy.java | 16 ++ .../archaic/CommonProxy.java | 5 +- .../archaic/channel/BlockChannel.java | 36 +++++ ...ModelOpenTrough.java => ModelChannel.java} | 4 +- .../archaic/channel/RenderChannel.java | 34 +++-- .../archaic/channel/TileChannel.java | 26 +++- .../mechanical/fluid/pipe/RenderPipe.java | 4 +- 8 files changed, 177 insertions(+), 88 deletions(-) rename archaic/src/main/java/resonantinduction/archaic/channel/{ModelOpenTrough.java => ModelChannel.java} (99%) diff --git a/archaic/src/main/java/resonantinduction/archaic/Archaic.java b/archaic/src/main/java/resonantinduction/archaic/Archaic.java index 4b12e78d..534d7d23 100644 --- a/archaic/src/main/java/resonantinduction/archaic/Archaic.java +++ b/archaic/src/main/java/resonantinduction/archaic/Archaic.java @@ -5,6 +5,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.ShapedOreRecipe; import resonantinduction.archaic.blocks.BlockTurntable; +import resonantinduction.archaic.channel.BlockChannel; +import resonantinduction.archaic.channel.TileChannel; import resonantinduction.archaic.crate.BlockCrate; import resonantinduction.archaic.crate.ItemBlockCrate; import resonantinduction.archaic.crate.TileCrate; @@ -43,94 +45,96 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -/** - * Resonant Induction Archaic Module +/** Resonant Induction Archaic Module * - * @author DarkCow, Calclavia - */ + * @author DarkCow, Calclavia */ @Mod(modid = Archaic.ID, name = Archaic.NAME, version = Reference.VERSION, dependencies = "required-after:" + ResonantInduction.ID) @NetworkMod(channels = Reference.CHANNEL, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class Archaic { - /** Mod Information */ - public static final String ID = "ResonantInduction|Archaic"; - public static final String NAME = Reference.NAME + " Archaic"; + /** Mod Information */ + public static final String ID = "ResonantInduction|Archaic"; + public static final String NAME = Reference.NAME + " Archaic"; - @Instance(ID) - public static Archaic INSTANCE; + @Instance(ID) + public static Archaic INSTANCE; - @SidedProxy(clientSide = "resonantinduction.archaic.ClientProxy", serverSide = "resonantinduction.archaic.CommonProxy") - public static CommonProxy proxy; + @SidedProxy(clientSide = "resonantinduction.archaic.ClientProxy", serverSide = "resonantinduction.archaic.CommonProxy") + public static CommonProxy proxy; - @Mod.Metadata(ID) - public static ModMetadata metadata; + @Mod.Metadata(ID) + public static ModMetadata metadata; - public static final ContentRegistry contentRegistry = new ContentRegistry(Settings.CONFIGURATION, Settings.idManager, ID).setPrefix(Reference.PREFIX).setTab(TabRI.CORE); + public static final ContentRegistry contentRegistry = new ContentRegistry(Settings.CONFIGURATION, Settings.idManager, ID).setPrefix(Reference.PREFIX).setTab(TabRI.CORE); - public static Block blockEngineeringTable; - public static Block blockCrate; - public static Block blockImprinter; - public static Block blockTurntable; - public static Block blockFirebox; - public static Block blockHotPlate; - public static Block blockMillstone; - public static Block blockCast; - public static Item itemImprint; + public static Block blockEngineeringTable; + public static Block blockCrate; + public static Block blockImprinter; + public static Block blockTurntable; + public static Block blockFirebox; + public static Block blockHotPlate; + public static Block blockMillstone; + public static Block blockCast; + public static Block blockChannel; + public static Item itemImprint; - // Machine and Processing - public static Item itemHammer; + // Machine and Processing + public static Item itemHammer; - @EventHandler - public void preInit(FMLPreInitializationEvent evt) - { - Settings.load(); - NetworkRegistry.instance().registerGuiHandler(this, proxy); - blockEngineeringTable = contentRegistry.createTile(BlockEngineeringTable.class, TileEngineeringTable.class); - blockCrate = contentRegistry.createBlock(BlockCrate.class, ItemBlockCrate.class, TileCrate.class); - blockImprinter = contentRegistry.createTile(BlockImprinter.class, TileImprinter.class); - blockTurntable = contentRegistry.createBlock(BlockTurntable.class); - blockFirebox = contentRegistry.createBlock(BlockFirebox.class, ItemBlockMetadata.class, TileFirebox.class); - blockHotPlate = contentRegistry.createTile(BlockHotPlate.class, TileHotPlate.class); - blockMillstone = contentRegistry.createTile(BlockMillstone.class, TileMillstone.class); - blockCast = contentRegistry.createTile(BlockCast.class, TileCast.class); + @EventHandler + public void preInit(FMLPreInitializationEvent evt) + { + Settings.load(); + NetworkRegistry.instance().registerGuiHandler(this, proxy); + blockEngineeringTable = contentRegistry.createTile(BlockEngineeringTable.class, TileEngineeringTable.class); + blockCrate = contentRegistry.createBlock(BlockCrate.class, ItemBlockCrate.class, TileCrate.class); + blockImprinter = contentRegistry.createTile(BlockImprinter.class, TileImprinter.class); + blockTurntable = contentRegistry.createBlock(BlockTurntable.class); + blockFirebox = contentRegistry.createBlock(BlockFirebox.class, ItemBlockMetadata.class, TileFirebox.class); + blockHotPlate = contentRegistry.createTile(BlockHotPlate.class, TileHotPlate.class); + blockMillstone = contentRegistry.createTile(BlockMillstone.class, TileMillstone.class); + blockCast = contentRegistry.createTile(BlockCast.class, TileCast.class); + blockChannel = contentRegistry.createTile(BlockChannel.class, TileChannel.class); - itemImprint = contentRegistry.createItem(ItemImprint.class); - itemHammer = contentRegistry.createItem(ItemHammer.class); - proxy.preInit(); - Settings.save(); - TabRI.ITEMSTACK = new ItemStack(blockEngineeringTable); + itemImprint = contentRegistry.createItem(ItemImprint.class); + itemHammer = contentRegistry.createItem(ItemHammer.class); + proxy.preInit(); + Settings.save(); + TabRI.ITEMSTACK = new ItemStack(blockEngineeringTable); - PacketAnnotation.register(TileFirebox.class); - } + PacketAnnotation.register(TileFirebox.class); + proxy.preInit(); + } - @EventHandler - public void init(FMLInitializationEvent evt) - { - Settings.setModMetadata(metadata, ID, NAME, ResonantInduction.ID); - proxy.init(); - } + @EventHandler + public void init(FMLInitializationEvent evt) + { + Settings.setModMetadata(metadata, ID, NAME, ResonantInduction.ID); + proxy.init(); + } - @EventHandler - public void postInit(FMLPostInitializationEvent evt) - { - // Add recipes - GameRegistry.addRecipe(new ShapedOreRecipe(blockEngineeringTable, "RAH", "SCP", "WWW", 'R', Item.shears, 'H', Item.hoeStone, 'A', Item.axeStone, 'P', Item.pickaxeStone, 'S', Item.shovelStone, 'C', Block.workbench, 'W', "logWood")); + @EventHandler + public void postInit(FMLPostInitializationEvent evt) + { + // Add recipes + GameRegistry.addRecipe(new ShapedOreRecipe(blockEngineeringTable, "RAH", "SCP", "WWW", 'R', Item.shears, 'H', Item.hoeStone, 'A', Item.axeStone, 'P', Item.pickaxeStone, 'S', Item.shovelStone, 'C', Block.workbench, 'W', "logWood")); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockCrate, 1, 0), "WWW", "WSW", "WWW", 'S', Item.stick, 'W', "logWood")); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockCrate, 1, 1), "WWW", "WSW", "WWW", 'S', new ItemStack(blockCrate, 1, 0), 'W', "ingotIron")); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockCrate, 1, 2), "WWW", "WSW", "WWW", 'S', new ItemStack(blockCrate, 1, 1), 'W', UniversalRecipe.PRIMARY_METAL.get())); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockCrate, 1, 0), "WWW", "WSW", "WWW", 'S', Item.stick, 'W', "logWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockCrate, 1, 1), "WWW", "WSW", "WWW", 'S', new ItemStack(blockCrate, 1, 0), 'W', "ingotIron")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockCrate, 1, 2), "WWW", "WSW", "WWW", 'S', new ItemStack(blockCrate, 1, 1), 'W', UniversalRecipe.PRIMARY_METAL.get())); - GameRegistry.addRecipe(new ShapedOreRecipe(blockFirebox, "III", "SFS", "SSS", 'I', Item.ingotIron, 'F', Block.furnaceIdle, 'S', Block.stone)); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockFirebox, 1, 1), "III", "SFS", "SSS", 'I', UniversalRecipe.PRIMARY_METAL.get(), 'F', new ItemStack(blockFirebox, 1, 0), 'S', UniversalRecipe.WIRE.get())); + GameRegistry.addRecipe(new ShapedOreRecipe(blockFirebox, "III", "SFS", "SSS", 'I', Item.ingotIron, 'F', Block.furnaceIdle, 'S', Block.stone)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockFirebox, 1, 1), "III", "SFS", "SSS", 'I', UniversalRecipe.PRIMARY_METAL.get(), 'F', new ItemStack(blockFirebox, 1, 0), 'S', UniversalRecipe.WIRE.get())); - GameRegistry.addRecipe(new ShapedOreRecipe(blockImprinter, "SSS", "W W", "PPP", 'S', Block.stone, 'P', Block.pistonBase, 'W', "logWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(blockImprinter, "SSS", "W W", "PPP", 'S', Block.stone, 'P', Block.pistonBase, 'W', "logWood")); - GameRegistry.addRecipe(new ShapedOreRecipe(blockTurntable, "SSS", "PGP", "WWW", 'S', Block.stone, 'G', UniversalRecipe.MOTOR.get(), 'P', Block.pistonBase, 'W', "logWood")); - GameRegistry.addRecipe(new ShapedOreRecipe(blockCast, "I I", "IBI", "III", 'S', Item.ingotIron, 'B', Block.fenceIron)); + GameRegistry.addRecipe(new ShapedOreRecipe(blockTurntable, "SSS", "PGP", "WWW", 'S', Block.stone, 'G', UniversalRecipe.MOTOR.get(), 'P', Block.pistonBase, 'W', "logWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(blockCast, "I I", "IBI", "III", 'S', Item.ingotIron, 'B', Block.fenceIron)); - GameRegistry.addRecipe(new ShapedOreRecipe(blockHotPlate, "SSS", "III", 'I', Item.ingotIron, 'S', Block.stone)); + GameRegistry.addRecipe(new ShapedOreRecipe(blockHotPlate, "SSS", "III", 'I', Item.ingotIron, 'S', Block.stone)); - GameRegistry.addRecipe(new ShapedOreRecipe(itemImprint, "PPP", "PIP", "PPP", 'P', Item.paper, 'I', new ItemStack(Item.dyePowder, 0))); - GameRegistry.addRecipe(new ShapedOreRecipe(itemHammer, "CC ", "CS ", " S", 'C', Block.cobblestone, 'S', Item.stick)); - } + GameRegistry.addRecipe(new ShapedOreRecipe(itemImprint, "PPP", "PIP", "PPP", 'P', Item.paper, 'I', new ItemStack(Item.dyePowder, 0))); + GameRegistry.addRecipe(new ShapedOreRecipe(itemHammer, "CC ", "CS ", " S", 'C', Block.cobblestone, 'S', Item.stick)); + proxy.postInit(); + } } diff --git a/archaic/src/main/java/resonantinduction/archaic/ClientProxy.java b/archaic/src/main/java/resonantinduction/archaic/ClientProxy.java index dbef319a..065b38ed 100644 --- a/archaic/src/main/java/resonantinduction/archaic/ClientProxy.java +++ b/archaic/src/main/java/resonantinduction/archaic/ClientProxy.java @@ -1,6 +1,22 @@ package resonantinduction.archaic; +import net.minecraftforge.client.MinecraftForgeClient; +import resonantinduction.archaic.channel.ItemChannelRenderer; +import resonantinduction.archaic.channel.RenderChannel; +import resonantinduction.archaic.channel.TileChannel; +import cpw.mods.fml.client.registry.ClientRegistry; + public class ClientProxy extends CommonProxy { + @Override + public void preInit() + { + ClientRegistry.bindTileEntitySpecialRenderer(TileChannel.class, RenderChannel.INSTANCE); + } + @Override + public void init() + { + MinecraftForgeClient.registerItemRenderer(Archaic.blockChannel.blockID, new ItemChannelRenderer()); + } } diff --git a/archaic/src/main/java/resonantinduction/archaic/CommonProxy.java b/archaic/src/main/java/resonantinduction/archaic/CommonProxy.java index 805cbfec..686c5e9d 100644 --- a/archaic/src/main/java/resonantinduction/archaic/CommonProxy.java +++ b/archaic/src/main/java/resonantinduction/archaic/CommonProxy.java @@ -1,8 +1,11 @@ package resonantinduction.archaic; +import resonantinduction.archaic.channel.RenderChannel; +import resonantinduction.archaic.channel.TileChannel; import calclavia.lib.prefab.ProxyBase; +import cpw.mods.fml.client.registry.ClientRegistry; public class CommonProxy extends ProxyBase { - + } diff --git a/archaic/src/main/java/resonantinduction/archaic/channel/BlockChannel.java b/archaic/src/main/java/resonantinduction/archaic/channel/BlockChannel.java index b6e43b99..1faed247 100644 --- a/archaic/src/main/java/resonantinduction/archaic/channel/BlockChannel.java +++ b/archaic/src/main/java/resonantinduction/archaic/channel/BlockChannel.java @@ -1,7 +1,13 @@ package resonantinduction.archaic.channel; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import calclavia.lib.utility.FluidUtility; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import resonantinduction.core.Settings; import resonantinduction.core.prefab.fluid.BlockFluidNetwork; +import resonantinduction.core.render.RIBlockRenderingHandler; import universalelectricity.api.UniversalElectricity; /** Early tier version of the basic pipe. Open on the top, and can't support pressure. @@ -14,4 +20,34 @@ public class BlockChannel extends BlockFluidNetwork super(Settings.CONFIGURATION.getBlock("Channel", id).getInt(id), UniversalElectricity.machine); } + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderType() + { + return -1; + } + + @Override + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + return FluidUtility.playerActivatedFluidItem(world, x, y, z, entityplayer, side); + } + return super.onMachineActivated(world, x, y, z, entityplayer, side, hitX, hitY, hitZ); + } + } diff --git a/archaic/src/main/java/resonantinduction/archaic/channel/ModelOpenTrough.java b/archaic/src/main/java/resonantinduction/archaic/channel/ModelChannel.java similarity index 99% rename from archaic/src/main/java/resonantinduction/archaic/channel/ModelOpenTrough.java rename to archaic/src/main/java/resonantinduction/archaic/channel/ModelChannel.java index c5ef9bf8..8927db27 100644 --- a/archaic/src/main/java/resonantinduction/archaic/channel/ModelOpenTrough.java +++ b/archaic/src/main/java/resonantinduction/archaic/channel/ModelChannel.java @@ -11,7 +11,7 @@ import net.minecraft.client.model.ModelRenderer; import net.minecraftforge.common.ForgeDirection; import calclavia.lib.render.RenderUtility; -public class ModelOpenTrough extends ModelBase +public class ModelChannel extends ModelBase { // fields ModelRenderer base; @@ -52,7 +52,7 @@ public class ModelOpenTrough extends ModelBase ModelRenderer cornerFrontLeft; ModelRenderer cornerFrontRight; - public ModelOpenTrough() + public ModelChannel() { textureWidth = 128; textureHeight = 128; diff --git a/archaic/src/main/java/resonantinduction/archaic/channel/RenderChannel.java b/archaic/src/main/java/resonantinduction/archaic/channel/RenderChannel.java index f4059d40..46f18a18 100644 --- a/archaic/src/main/java/resonantinduction/archaic/channel/RenderChannel.java +++ b/archaic/src/main/java/resonantinduction/archaic/channel/RenderChannel.java @@ -1,10 +1,16 @@ package resonantinduction.archaic.channel; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; +import resonantinduction.api.mechanical.fluid.IFluidNetwork; +import resonantinduction.api.mechanical.fluid.IFluidPipe; import resonantinduction.core.Reference; +import resonantinduction.core.prefab.part.PartFramedConnection; +import resonantinduction.mechanical.fluid.pipe.EnumPipeMaterial; import resonantinduction.mechanical.fluid.pipe.ModelPipe; import resonantinduction.mechanical.fluid.pipe.PartPipe; import calclavia.lib.render.RenderUtility; @@ -12,27 +18,27 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public class RenderChannel +public class RenderChannel extends TileEntitySpecialRenderer { public static final RenderChannel INSTANCE = new RenderChannel(); - public static ModelOpenTrough MODEL_TROUGH_PIPE = new ModelOpenTrough(); - public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe.png"); - - public void render(PartPipe part, double x, double y, double z, float f) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - render(0, part.getAllCurrentConnections()); - GL11.glPopMatrix(); - } + public static ModelChannel MODEL_TROUGH_PIPE = new ModelChannel(); + public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "white.png"); public static void render(int meta, byte sides) { - RenderUtility.enableBlending(); RenderUtility.bind(TEXTURE); MODEL_TROUGH_PIPE.render(sides, meta == 0 ? true : false); - RenderUtility.disableBlending(); + } + + @Override + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) + { + System.out.println("Update tick channel renderer"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + render(0, (tileentity instanceof TileChannel ? ((TileChannel) tileentity).renderSides : (byte)0)); + GL11.glPopMatrix(); } } \ No newline at end of file diff --git a/archaic/src/main/java/resonantinduction/archaic/channel/TileChannel.java b/archaic/src/main/java/resonantinduction/archaic/channel/TileChannel.java index 17050326..e4919616 100644 --- a/archaic/src/main/java/resonantinduction/archaic/channel/TileChannel.java +++ b/archaic/src/main/java/resonantinduction/archaic/channel/TileChannel.java @@ -2,13 +2,16 @@ package resonantinduction.archaic.channel; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; +import resonantinduction.api.mechanical.fluid.IFluidConnector; import resonantinduction.api.mechanical.fluid.IFluidNetwork; import resonantinduction.api.mechanical.fluid.IFluidPipe; import resonantinduction.core.prefab.fluid.PipeNetwork; import resonantinduction.core.prefab.fluid.TileFluidNetwork; +import resonantinduction.mechanical.fluid.tank.TileTank; import calclavia.lib.multiblock.fake.IBlockActivate; import calclavia.lib.utility.WrenchUtility; @@ -55,6 +58,28 @@ public class TileChannel extends TileFluidNetwork implements IBlockActivate, IFl return false; } + @Override + public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) + { + if (!this.worldObj.isRemote) + { + if (tileEntity instanceof IFluidPipe) + { + if (tileEntity instanceof TileChannel) + { + getNetwork().merge(((IFluidConnector) tileEntity).getNetwork()); + this.setRenderSide(side, true); + connectedBlocks[side.ordinal()] = tileEntity; + } + } + else if (tileEntity instanceof IFluidHandler) + { + this.setRenderSide(side, true); + connectedBlocks[side.ordinal()] = tileEntity; + } + } + } + @Override public boolean canFlow() { @@ -125,5 +150,4 @@ public class TileChannel extends TileFluidNetwork implements IBlockActivate, IFl { return 500; } - } diff --git a/mechanical/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java b/mechanical/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java index 60464e12..8b5e45b6 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/fluid/pipe/RenderPipe.java @@ -4,7 +4,7 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import resonantinduction.archaic.channel.ModelOpenTrough; +import resonantinduction.archaic.channel.ModelChannel; import resonantinduction.core.Reference; import calclavia.lib.render.RenderUtility; import cpw.mods.fml.relauncher.Side; @@ -16,7 +16,7 @@ public class RenderPipe public static final RenderPipe INSTANCE = new RenderPipe(); public static ModelPipe MODEL_PIPE = new ModelPipe(); - public static ModelOpenTrough MODEL_TROUGH_PIPE = new ModelOpenTrough(); + public static ModelChannel MODEL_TROUGH_PIPE = new ModelChannel(); public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe.png"); public void render(PartPipe part, double x, double y, double z, float f)