Merged release valve with the tank
This commit is contained in:
parent
db4af58b2b
commit
62be2b5b1d
12 changed files with 243 additions and 270 deletions
|
@ -0,0 +1,142 @@
|
||||||
|
package resonantinduction.archaic.trough;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
import resonantinduction.mechanical.Mechanical;
|
||||||
|
import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork;
|
||||||
|
import calclavia.lib.render.ColorCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum to hold info about each pipe material. Values are by default and some can change with pipe
|
||||||
|
* upgrades.
|
||||||
|
*
|
||||||
|
* @Note unsupportedFluids should only be used by filters. All pipes should allow all fluid types.
|
||||||
|
* However, pipes that can't support the fluid should have an effect. Eg no gas support should cause
|
||||||
|
* the pipe to leak. No molten support should cause the pipe to take damage.
|
||||||
|
*
|
||||||
|
* @author DarkGuardsman
|
||||||
|
*/
|
||||||
|
public enum EnumPipeMaterial
|
||||||
|
{
|
||||||
|
/** Simple water only pipe. Should render open toped when it can */
|
||||||
|
WOOD("wood", false, true, false, -1, 200),
|
||||||
|
/** Another version of the wooden pipe */
|
||||||
|
STONE("stone", false, true, false, -1, 1000);
|
||||||
|
|
||||||
|
public String matName = "material";
|
||||||
|
List<String> unsupportedFluids = new ArrayList<String>();
|
||||||
|
public boolean canSupportGas = false;
|
||||||
|
public boolean canSupportFluids = false;
|
||||||
|
public boolean canSupportMoltenFluids = false;
|
||||||
|
public int maxPressure = 1000;
|
||||||
|
public int maxVolume = 2000;
|
||||||
|
/**
|
||||||
|
* Materials are stored as meta were there sub types are stored by NBT. Item versions of the
|
||||||
|
* pipes are still meta so there is a set spacing to allow for a large but defined range of sub
|
||||||
|
* pipes
|
||||||
|
*/
|
||||||
|
public static int spacing = 1000;
|
||||||
|
|
||||||
|
private EnumPipeMaterial()
|
||||||
|
{
|
||||||
|
this.canSupportGas = true;
|
||||||
|
this.canSupportFluids = true;
|
||||||
|
canSupportMoltenFluids = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EnumPipeMaterial(String name, boolean gas, boolean fluid, boolean molten, String... strings)
|
||||||
|
{
|
||||||
|
this.matName = name;
|
||||||
|
this.canSupportGas = gas;
|
||||||
|
this.canSupportFluids = fluid;
|
||||||
|
this.canSupportMoltenFluids = molten;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EnumPipeMaterial(String name, boolean gas, boolean fluid, boolean molten, int pressure, int volume, String... strings)
|
||||||
|
{
|
||||||
|
this(name, gas, fluid, molten, strings);
|
||||||
|
this.maxPressure = pressure;
|
||||||
|
this.maxVolume = volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnumPipeMaterial get(World world, int x, int y, int z)
|
||||||
|
{
|
||||||
|
return get(world.getBlockMetadata(x, y, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnumPipeMaterial get(int i)
|
||||||
|
{
|
||||||
|
if (i < EnumPipeMaterial.values().length)
|
||||||
|
{
|
||||||
|
return EnumPipeMaterial.values()[i];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnumPipeMaterial get(ItemStack stack)
|
||||||
|
{
|
||||||
|
if (stack != null)
|
||||||
|
{
|
||||||
|
return getFromItemMeta(stack.getItemDamage());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnumPipeMaterial getFromItemMeta(int meta)
|
||||||
|
{
|
||||||
|
meta = meta / spacing;
|
||||||
|
if (meta < EnumPipeMaterial.values().length)
|
||||||
|
{
|
||||||
|
return EnumPipeMaterial.values()[meta];
|
||||||
|
}
|
||||||
|
return EnumPipeMaterial.WOOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMeta(int typeID)
|
||||||
|
{
|
||||||
|
return (this.ordinal() * spacing) + typeID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMeta()
|
||||||
|
{
|
||||||
|
return this.getMeta(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getType(int meta)
|
||||||
|
{
|
||||||
|
return meta / spacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getDropItemMeta(World world, int x, int y, int z)
|
||||||
|
{
|
||||||
|
int meta = world.getBlockMetadata(x, y, z);
|
||||||
|
TileEntity ent = world.getBlockTileEntity(x, y, z);
|
||||||
|
meta *= spacing;
|
||||||
|
if (ent instanceof TileFluidNetwork)
|
||||||
|
{
|
||||||
|
meta += ((TileFluidNetwork) ent).getSubID();
|
||||||
|
}
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canSupport(FluidStack fluid)
|
||||||
|
{
|
||||||
|
if (fluid != null && fluid.getFluid() != null)
|
||||||
|
{
|
||||||
|
if (fluid.getFluid().isGaseous(fluid) && this.canSupportGas)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (!fluid.getFluid().isGaseous(fluid) && this.canSupportFluids)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,8 +3,6 @@ package resonantinduction.mechanical;
|
||||||
import net.minecraftforge.client.MinecraftForgeClient;
|
import net.minecraftforge.client.MinecraftForgeClient;
|
||||||
import resonantinduction.core.render.RenderRIItem;
|
import resonantinduction.core.render.RenderRIItem;
|
||||||
import resonantinduction.mechanical.fluid.pipe.ItemPipeRenderer;
|
import resonantinduction.mechanical.fluid.pipe.ItemPipeRenderer;
|
||||||
import resonantinduction.mechanical.fluid.pipe.RenderPipe;
|
|
||||||
import resonantinduction.mechanical.fluid.pipe.TilePipe;
|
|
||||||
import resonantinduction.mechanical.fluid.tank.ItemTankRenderer;
|
import resonantinduction.mechanical.fluid.tank.ItemTankRenderer;
|
||||||
import resonantinduction.mechanical.fluid.tank.RenderTank;
|
import resonantinduction.mechanical.fluid.tank.RenderTank;
|
||||||
import resonantinduction.mechanical.fluid.tank.TileTank;
|
import resonantinduction.mechanical.fluid.tank.TileTank;
|
||||||
|
@ -23,7 +21,6 @@ public class ClientProxy extends CommonProxy
|
||||||
{
|
{
|
||||||
MinecraftForgeClient.registerItemRenderer(Mechanical.blockTank.blockID, new ItemTankRenderer());
|
MinecraftForgeClient.registerItemRenderer(Mechanical.blockTank.blockID, new ItemTankRenderer());
|
||||||
MinecraftForgeClient.registerItemRenderer(Mechanical.itemPipe.itemID, new ItemPipeRenderer());
|
MinecraftForgeClient.registerItemRenderer(Mechanical.itemPipe.itemID, new ItemPipeRenderer());
|
||||||
MinecraftForgeClient.registerItemRenderer(Mechanical.blockReleaseValve.blockID, new ItemPipeRenderer());
|
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileTank.class, RenderTank.INSTANCE);
|
ClientRegistry.bindTileEntitySpecialRenderer(TileTank.class, RenderTank.INSTANCE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,6 @@ import resonantinduction.mechanical.fluid.pump.TileGrate;
|
||||||
import resonantinduction.mechanical.fluid.pump.TilePump;
|
import resonantinduction.mechanical.fluid.pump.TilePump;
|
||||||
import resonantinduction.mechanical.fluid.tank.BlockTank;
|
import resonantinduction.mechanical.fluid.tank.BlockTank;
|
||||||
import resonantinduction.mechanical.fluid.tank.TileTank;
|
import resonantinduction.mechanical.fluid.tank.TileTank;
|
||||||
import resonantinduction.mechanical.fluid.valve.BlockReleaseValve;
|
|
||||||
import resonantinduction.mechanical.fluid.valve.TileReleaseValve;
|
|
||||||
import resonantinduction.mechanical.gear.ItemGear;
|
import resonantinduction.mechanical.gear.ItemGear;
|
||||||
import resonantinduction.mechanical.item.ItemPipeGauge;
|
import resonantinduction.mechanical.item.ItemPipeGauge;
|
||||||
import resonantinduction.mechanical.logistic.BlockDetector;
|
import resonantinduction.mechanical.logistic.BlockDetector;
|
||||||
|
@ -96,7 +94,6 @@ public class Mechanical
|
||||||
blockTank = contentRegistry.createBlock(BlockTank.class, ItemBlockFluidContainer.class, TileTank.class);
|
blockTank = contentRegistry.createBlock(BlockTank.class, ItemBlockFluidContainer.class, TileTank.class);
|
||||||
blockGrate = contentRegistry.createTile(BlockGrate.class, TileGrate.class);
|
blockGrate = contentRegistry.createTile(BlockGrate.class, TileGrate.class);
|
||||||
blockPump = contentRegistry.createTile(BlockPump.class, TilePump.class);
|
blockPump = contentRegistry.createTile(BlockPump.class, TilePump.class);
|
||||||
blockReleaseValve = contentRegistry.createTile(BlockReleaseValve.class, TileReleaseValve.class);
|
|
||||||
|
|
||||||
itemPipeGuage = contentRegistry.createItem(ItemPipeGauge.class);
|
itemPipeGuage = contentRegistry.createItem(ItemPipeGauge.class);
|
||||||
itemPipe = contentRegistry.createItem(ItemPipe.class);
|
itemPipe = contentRegistry.createItem(ItemPipe.class);
|
||||||
|
|
|
@ -49,7 +49,11 @@ public abstract class FluidNetwork extends Network<IFluidNetwork, IFluidConnecto
|
||||||
this.tank = new FluidTank(0);
|
this.tank = new FluidTank(0);
|
||||||
for (IFluidConnector part : this.getConnectors())
|
for (IFluidConnector part : this.getConnectors())
|
||||||
{
|
{
|
||||||
part.setNetwork(this);
|
if (part.getNetwork() instanceof IFluidNetwork)
|
||||||
|
{
|
||||||
|
part.setNetwork(this);
|
||||||
|
}
|
||||||
|
|
||||||
this.buildPart(part);
|
this.buildPart(part);
|
||||||
}
|
}
|
||||||
this.rebuildHandler();
|
this.rebuildHandler();
|
||||||
|
|
|
@ -23,12 +23,8 @@ import calclavia.lib.render.ColorCode;
|
||||||
*/
|
*/
|
||||||
public enum EnumPipeMaterial
|
public enum EnumPipeMaterial
|
||||||
{
|
{
|
||||||
/** Simple water only pipe. Should render open toped when it can */
|
|
||||||
WOOD("wood", false, true, false, -1, 200),
|
|
||||||
/** Gas only pipe */
|
/** Gas only pipe */
|
||||||
GLASS("glass", true, false, false, 100, 300),
|
GLASS("glass", true, false, false, 100, 300),
|
||||||
/** Another version of the wooden pipe */
|
|
||||||
STONE("stone", false, true, false, -1, 1000),
|
|
||||||
/** Cheap fluid pipe */
|
/** Cheap fluid pipe */
|
||||||
TIN("tin", false, true, false, 300, 1000),
|
TIN("tin", false, true, false, 300, 1000),
|
||||||
/** Cheap fluid pipe */
|
/** Cheap fluid pipe */
|
||||||
|
@ -101,25 +97,6 @@ public enum EnumPipeMaterial
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EnumPipeMaterial get(ItemStack stack)
|
|
||||||
{
|
|
||||||
if (stack != null)
|
|
||||||
{
|
|
||||||
return getFromItemMeta(stack.getItemDamage());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EnumPipeMaterial getFromItemMeta(int meta)
|
|
||||||
{
|
|
||||||
meta = meta / spacing;
|
|
||||||
if (meta < EnumPipeMaterial.values().length)
|
|
||||||
{
|
|
||||||
return EnumPipeMaterial.values()[meta];
|
|
||||||
}
|
|
||||||
return EnumPipeMaterial.WOOD;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMeta(int typeID)
|
public int getMeta(int typeID)
|
||||||
{
|
{
|
||||||
return (this.ordinal() * spacing) + typeID;
|
return (this.ordinal() * spacing) + typeID;
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package resonantinduction.mechanical.fluid.pipe;
|
package resonantinduction.mechanical.fluid.pipe;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -21,6 +24,22 @@ public class ItemPipe extends ItemMultipartBase
|
||||||
public TMultiPart newPart(ItemStack itemStack, EntityPlayer player, World world, BlockCoord pos, int side, Vector3 hit)
|
public TMultiPart newPart(ItemStack itemStack, EntityPlayer player, World world, BlockCoord pos, int side, Vector3 hit)
|
||||||
{
|
{
|
||||||
PartPipe part = (PartPipe) MultiPartRegistry.createPart("resonant_induction_pipe", false);
|
PartPipe part = (PartPipe) MultiPartRegistry.createPart("resonant_induction_pipe", false);
|
||||||
|
part.preparePlacement(itemStack.getItemDamage());
|
||||||
return part;
|
return part;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMetadata(int damage)
|
||||||
|
{
|
||||||
|
return damage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getSubItems(int itemID, CreativeTabs tab, List listToAddTo)
|
||||||
|
{
|
||||||
|
for (EnumPipeMaterial material : EnumPipeMaterial.values())
|
||||||
|
{
|
||||||
|
listToAddTo.add(new ItemStack(itemID, 1, material.ordinal()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,13 +34,8 @@ public class ItemPipeRenderer implements IItemRenderer
|
||||||
{
|
{
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glRotatef(180f, 0f, 0f, 1f);
|
GL11.glRotatef(180f, 0f, 0f, 1f);
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderPipe.getTexture(item.getItemDamage()));
|
|
||||||
int meta = item.getItemDamage();
|
int meta = item.getItemDamage();
|
||||||
|
|
||||||
if (Mechanical.blockReleaseValve != null && item.itemID == Mechanical.blockReleaseValve.blockID)
|
|
||||||
{
|
|
||||||
meta = EnumPipeMaterial.IRON.getMeta();
|
|
||||||
}
|
|
||||||
if (type == ItemRenderType.ENTITY)
|
if (type == ItemRenderType.ENTITY)
|
||||||
{
|
{
|
||||||
GL11.glTranslatef(-.5F, -1F, -.5F);
|
GL11.glTranslatef(-.5F, -1F, -.5F);
|
||||||
|
@ -65,11 +60,6 @@ public class ItemPipeRenderer implements IItemRenderer
|
||||||
{
|
{
|
||||||
RenderPipe.render(item.getItemDamage(), (byte) 0b000011);
|
RenderPipe.render(item.getItemDamage(), (byte) 0b000011);
|
||||||
}
|
}
|
||||||
if (Mechanical.blockReleaseValve != null && item.itemID == Mechanical.blockReleaseValve.blockID)
|
|
||||||
{
|
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderReleaseValve.VALVE_TEXTURE);
|
|
||||||
valve.render();
|
|
||||||
}
|
|
||||||
|
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package resonantinduction.mechanical.fluid.pipe;
|
package resonantinduction.mechanical.fluid.pipe;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||||
|
@ -11,6 +13,7 @@ import net.minecraftforge.fluids.FluidTankInfo;
|
||||||
import net.minecraftforge.fluids.IFluidHandler;
|
import net.minecraftforge.fluids.IFluidHandler;
|
||||||
import resonantinduction.api.fluid.IFluidConnector;
|
import resonantinduction.api.fluid.IFluidConnector;
|
||||||
import resonantinduction.api.fluid.IFluidNetwork;
|
import resonantinduction.api.fluid.IFluidNetwork;
|
||||||
|
import resonantinduction.api.fluid.IFluidPipe;
|
||||||
import resonantinduction.core.prefab.part.PartFramedConnection;
|
import resonantinduction.core.prefab.part.PartFramedConnection;
|
||||||
import resonantinduction.mechanical.Mechanical;
|
import resonantinduction.mechanical.Mechanical;
|
||||||
import resonantinduction.mechanical.fluid.network.PipeNetwork;
|
import resonantinduction.mechanical.fluid.network.PipeNetwork;
|
||||||
|
@ -23,20 +26,8 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidConnector, IFluidNetwork> implements IFluidConnector, TSlottedPart, JNormalOcclusion, IHollowConnect, JIconHitEffects
|
public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidConnector, IFluidNetwork> implements IFluidConnector, TSlottedPart, JNormalOcclusion, IHollowConnect, JIconHitEffects
|
||||||
{
|
{
|
||||||
/** Client Side Connection Check */
|
|
||||||
private ForgeDirection testingSide;
|
|
||||||
|
|
||||||
public Object[] connections = new Object[6];
|
|
||||||
|
|
||||||
/** Network used to link all parts together */
|
|
||||||
protected IFluidNetwork network;
|
|
||||||
protected FluidTank tank = new FluidTank(1 * FluidContainerRegistry.BUCKET_VOLUME);
|
protected FluidTank tank = new FluidTank(1 * FluidContainerRegistry.BUCKET_VOLUME);
|
||||||
|
private boolean isExtracting = false;
|
||||||
/**
|
|
||||||
* Bitmask connections
|
|
||||||
*/
|
|
||||||
public byte currentWireConnections = 0x00;
|
|
||||||
public byte currentAcceptorConnections = 0x00;
|
|
||||||
|
|
||||||
public PartPipe()
|
public PartPipe()
|
||||||
{
|
{
|
||||||
|
@ -55,6 +46,35 @@ public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidConne
|
||||||
return "resonant_induction_pipe";
|
return "resonant_induction_pipe";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update()
|
||||||
|
{
|
||||||
|
if (isExtracting)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < this.getConnections().length; i++)
|
||||||
|
{
|
||||||
|
Object obj = this.getConnections()[i];
|
||||||
|
|
||||||
|
if (obj instanceof IFluidHandler)
|
||||||
|
{
|
||||||
|
((IFluidHandler) obj).drain(ForgeDirection.getOrientation(i).getOpposite(), FluidContainerRegistry.BUCKET_VOLUME, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item)
|
||||||
|
{
|
||||||
|
if (!world().isRemote)
|
||||||
|
{
|
||||||
|
isExtracting = !isExtracting;
|
||||||
|
player.addChatMessage("Pipe extraction mode: " + isExtracting);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.activate(player, part, item);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public void renderDynamic(codechicken.lib.vec.Vector3 pos, float frame, int pass)
|
public void renderDynamic(codechicken.lib.vec.Vector3 pos, float frame, int pass)
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class RenderPipe
|
||||||
|
|
||||||
public static ModelPipe MODEL_PIPE = new ModelPipe();
|
public static ModelPipe MODEL_PIPE = new ModelPipe();
|
||||||
public static ModelOpenTrough MODEL_TROUGH_PIPE = new ModelOpenTrough();
|
public static ModelOpenTrough MODEL_TROUGH_PIPE = new ModelOpenTrough();
|
||||||
private static HashMap<Pair<EnumPipeMaterial, Integer>, ResourceLocation> TEXTURES = new HashMap<Pair<EnumPipeMaterial, Integer>, ResourceLocation>();
|
private static HashMap<EnumPipeMaterial, ResourceLocation> TEXTURES = new HashMap<EnumPipeMaterial, ResourceLocation>();
|
||||||
public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe/iron.png");
|
public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe/iron.png");
|
||||||
|
|
||||||
public void render(PartPipe part, double x, double y, double z, float f)
|
public void render(PartPipe part, double x, double y, double z, float f)
|
||||||
|
@ -32,80 +32,61 @@ public class RenderPipe
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
|
GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
|
||||||
GL11.glScalef(1.0F, -1F, -1F);
|
GL11.glScalef(1.0F, -1F, -1F);
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(getTexture(material, 0));
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(getTexture(material));
|
||||||
render(material, part.getMaterialID(), part.getAllCurrentConnections());
|
render(material, part.getAllCurrentConnections());
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ResourceLocation getTexture(EnumPipeMaterial mat, int pipeID)
|
public static ResourceLocation getTexture(EnumPipeMaterial material)
|
||||||
{
|
{
|
||||||
if (mat != null)
|
if (material != null)
|
||||||
{
|
{
|
||||||
Pair<EnumPipeMaterial, Integer> index = new Pair<EnumPipeMaterial, Integer>(mat, pipeID);
|
if (!TEXTURES.containsKey(material))
|
||||||
|
|
||||||
if (!TEXTURES.containsKey(index))
|
|
||||||
{
|
{
|
||||||
String pipeName = "";
|
TEXTURES.put(material, new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe/" + material.matName + ".png"));
|
||||||
if (EnumPipeType.get(pipeID) != null)
|
|
||||||
{
|
|
||||||
pipeName = EnumPipeType.get(pipeID).getName(pipeID);
|
|
||||||
}
|
|
||||||
TEXTURES.put(index, new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "pipe/" + mat.matName + ".png"));
|
|
||||||
}
|
}
|
||||||
return TEXTURES.get(index);
|
|
||||||
|
return TEXTURES.get(material);
|
||||||
}
|
}
|
||||||
return TEXTURE;
|
return TEXTURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ResourceLocation getTexture(int meta)
|
public static void render(EnumPipeMaterial mat, byte side)
|
||||||
{
|
{
|
||||||
return getTexture(EnumPipeMaterial.getFromItemMeta(meta), EnumPipeMaterial.getType(meta));
|
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.DOWN))
|
||||||
}
|
{
|
||||||
|
MODEL_PIPE.renderBottom();
|
||||||
|
}
|
||||||
|
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.UP))
|
||||||
|
{
|
||||||
|
MODEL_PIPE.renderTop();
|
||||||
|
}
|
||||||
|
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.NORTH))
|
||||||
|
{
|
||||||
|
MODEL_PIPE.renderBack();
|
||||||
|
}
|
||||||
|
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.SOUTH))
|
||||||
|
{
|
||||||
|
MODEL_PIPE.renderFront();
|
||||||
|
}
|
||||||
|
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.WEST))
|
||||||
|
{
|
||||||
|
MODEL_PIPE.renderLeft();
|
||||||
|
}
|
||||||
|
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.EAST))
|
||||||
|
{
|
||||||
|
MODEL_PIPE.renderRight();
|
||||||
|
}
|
||||||
|
|
||||||
public static void render(EnumPipeMaterial mat, int pipeID, byte side)
|
MODEL_PIPE.renderMiddle();
|
||||||
{
|
|
||||||
if (mat == EnumPipeMaterial.WOOD)
|
|
||||||
{
|
|
||||||
MODEL_TROUGH_PIPE.render(side, false);
|
|
||||||
}
|
|
||||||
else if (mat == EnumPipeMaterial.STONE)
|
|
||||||
{
|
|
||||||
MODEL_TROUGH_PIPE.render(side, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.DOWN))
|
|
||||||
{
|
|
||||||
MODEL_PIPE.renderBottom();
|
|
||||||
}
|
|
||||||
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.UP))
|
|
||||||
{
|
|
||||||
MODEL_PIPE.renderTop();
|
|
||||||
}
|
|
||||||
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.NORTH))
|
|
||||||
{
|
|
||||||
MODEL_PIPE.renderBack();
|
|
||||||
}
|
|
||||||
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.SOUTH))
|
|
||||||
{
|
|
||||||
MODEL_PIPE.renderFront();
|
|
||||||
}
|
|
||||||
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.WEST))
|
|
||||||
{
|
|
||||||
MODEL_PIPE.renderLeft();
|
|
||||||
}
|
|
||||||
if (TileFluidNetwork.canRenderSide(side, ForgeDirection.EAST))
|
|
||||||
{
|
|
||||||
MODEL_PIPE.renderRight();
|
|
||||||
}
|
|
||||||
|
|
||||||
MODEL_PIPE.renderMiddle();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void render(int meta, byte sides)
|
public static void render(int meta, byte sides)
|
||||||
{
|
{
|
||||||
render(EnumPipeMaterial.getFromItemMeta(meta), EnumPipeMaterial.getType(meta), sides);
|
if (meta < EnumPipeMaterial.values().length)
|
||||||
|
{
|
||||||
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(getTexture(EnumPipeMaterial.values()[meta]));
|
||||||
|
render(EnumPipeMaterial.values()[meta], sides);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,153 +0,0 @@
|
||||||
package resonantinduction.mechanical.fluid.pipe;
|
|
||||||
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
|
||||||
import net.minecraftforge.fluids.Fluid;
|
|
||||||
import net.minecraftforge.fluids.IFluidHandler;
|
|
||||||
import resonantinduction.api.fluid.IFluidNetwork;
|
|
||||||
import resonantinduction.api.fluid.IFluidPipe;
|
|
||||||
import resonantinduction.mechanical.fluid.network.PipeNetwork;
|
|
||||||
import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork;
|
|
||||||
import universalelectricity.api.vector.Vector3;
|
|
||||||
import calclavia.lib.render.ColorCode;
|
|
||||||
import calclavia.lib.render.ColorCode.IColorCoded;
|
|
||||||
|
|
||||||
public class TilePipe extends TileFluidNetwork implements IColorCoded, IFluidPipe
|
|
||||||
{
|
|
||||||
/** gets the current color mark of the pipe */
|
|
||||||
@Override
|
|
||||||
public ColorCode getColor()
|
|
||||||
{
|
|
||||||
return EnumPipeType.getColorCode(this.colorID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** sets the current color mark of the pipe */
|
|
||||||
@Override
|
|
||||||
public boolean setColor(Object cc)
|
|
||||||
{
|
|
||||||
if (!worldObj.isRemote)
|
|
||||||
{
|
|
||||||
int p = this.colorID;
|
|
||||||
this.colorID = EnumPipeType.getUpdatedID(colorID, ColorCode.get(cc));
|
|
||||||
return p != this.colorID;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side)
|
|
||||||
{
|
|
||||||
int meta = new Vector3(this).getBlockMetadata(this.worldObj);
|
|
||||||
if (meta < EnumPipeMaterial.values().length)
|
|
||||||
{
|
|
||||||
EnumPipeMaterial pipeMat = EnumPipeMaterial.values()[meta];
|
|
||||||
if (pipeMat == EnumPipeMaterial.WOOD || pipeMat == EnumPipeMaterial.STONE)
|
|
||||||
{
|
|
||||||
if (side == ForgeDirection.UP)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tileEntity instanceof TilePipe)
|
|
||||||
{
|
|
||||||
int metaOther = new Vector3(tileEntity).getBlockMetadata(this.worldObj);
|
|
||||||
if (meta < EnumPipeMaterial.values().length && metaOther < EnumPipeMaterial.values().length)
|
|
||||||
{
|
|
||||||
EnumPipeMaterial pipeMat = EnumPipeMaterial.values()[meta];
|
|
||||||
EnumPipeMaterial pipeMatOther = EnumPipeMaterial.values()[metaOther];
|
|
||||||
// Same pipe types can connect
|
|
||||||
if (pipeMat == pipeMatOther)
|
|
||||||
{
|
|
||||||
this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork());
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
setRenderSide(side, true);
|
|
||||||
}
|
|
||||||
else if ((pipeMat == EnumPipeMaterial.WOOD || pipeMat == EnumPipeMaterial.STONE) && (pipeMatOther == EnumPipeMaterial.WOOD || pipeMatOther == EnumPipeMaterial.STONE))
|
|
||||||
{
|
|
||||||
// Wood and stone pipes can connect to each other but not other pipe types since
|
|
||||||
// they are more like a trough than a pipe
|
|
||||||
this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork());
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
setRenderSide(side, true);
|
|
||||||
}
|
|
||||||
else if (pipeMat != EnumPipeMaterial.WOOD && pipeMat != EnumPipeMaterial.STONE && pipeMatOther != EnumPipeMaterial.WOOD && pipeMatOther != EnumPipeMaterial.STONE && pipeMat != EnumPipeMaterial.GLASS && pipeMatOther != EnumPipeMaterial.GLASS)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Any other pipe can connect to each other as long as the color matches except
|
|
||||||
* for glass which only works with itself at the moment
|
|
||||||
*/
|
|
||||||
this.getNetwork().merge(((IFluidPipe) tileEntity).getNetwork());
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
setRenderSide(side, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (tileEntity instanceof IFluidHandler)
|
|
||||||
{
|
|
||||||
connectedBlocks[side.ordinal()] = tileEntity;
|
|
||||||
setRenderSide(side, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IFluidNetwork getNetwork()
|
|
||||||
{
|
|
||||||
if (this.network == null)
|
|
||||||
{
|
|
||||||
this.network = new PipeNetwork();
|
|
||||||
this.network.addConnector(this);
|
|
||||||
}
|
|
||||||
return this.network;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setNetwork(IFluidNetwork network)
|
|
||||||
{
|
|
||||||
if (network instanceof PipeNetwork)
|
|
||||||
{
|
|
||||||
this.network = (PipeNetwork) network;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTankUpdate()
|
|
||||||
{
|
|
||||||
if (this.getBlockMetadata() == EnumPipeMaterial.WOOD.ordinal() || this.getBlockMetadata() == EnumPipeMaterial.STONE.ordinal())
|
|
||||||
{
|
|
||||||
super.sendTankUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canDrain(ForgeDirection from, Fluid fluid)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPressureIn(ForgeDirection side)
|
|
||||||
{
|
|
||||||
return this.getMaxPressure();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onWrongPressure(ForgeDirection side, int pressure)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxPressure()
|
|
||||||
{
|
|
||||||
return 10000;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxFlowRate()
|
|
||||||
{
|
|
||||||
return 1000;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -13,7 +13,6 @@ import net.minecraft.world.World;
|
||||||
import resonantinduction.core.render.RIBlockRenderingHandler;
|
import resonantinduction.core.render.RIBlockRenderingHandler;
|
||||||
import resonantinduction.mechanical.fluid.pipe.EnumPipeMaterial;
|
import resonantinduction.mechanical.fluid.pipe.EnumPipeMaterial;
|
||||||
import resonantinduction.mechanical.fluid.pipe.ItemBlockFluidContainer;
|
import resonantinduction.mechanical.fluid.pipe.ItemBlockFluidContainer;
|
||||||
import resonantinduction.mechanical.fluid.pipe.TilePipe;
|
|
||||||
import resonantinduction.mechanical.fluid.prefab.BlockFluidNetwork;
|
import resonantinduction.mechanical.fluid.prefab.BlockFluidNetwork;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
import calclavia.lib.utility.FluidUtility;
|
import calclavia.lib.utility.FluidUtility;
|
||||||
|
@ -97,7 +96,7 @@ public class BlockTank extends BlockFluidNetwork
|
||||||
{
|
{
|
||||||
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
|
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
|
||||||
TileEntity entity = world.getBlockTileEntity(x, y, z);
|
TileEntity entity = world.getBlockTileEntity(x, y, z);
|
||||||
if (entity instanceof TilePipe)
|
if (entity instanceof TileTank)
|
||||||
{
|
{
|
||||||
ret.add(new ItemStack(this, 1, EnumPipeMaterial.getDropItemMeta(world, x, y, z)));
|
ret.add(new ItemStack(this, 1, EnumPipeMaterial.getDropItemMeta(world, x, y, z)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ tile.resonantinduction\:manipulator.name=Manipulator
|
||||||
tile.resonantinduction\:rejector.name=Rejector
|
tile.resonantinduction\:rejector.name=Rejector
|
||||||
|
|
||||||
# Fluid pipes
|
# Fluid pipes
|
||||||
tile.resonantinduction\:fluidPipe.2.name=Red Wood Trough
|
item.resonantinduction\:pipe.name=Pipe
|
||||||
tile.resonantinduction\:fluidPipe.3.name=Green Wood Trough
|
tile.resonantinduction\:fluidPipe.3.name=Green Wood Trough
|
||||||
tile.resonantinduction\:fluidPipe.4.name=Brown Wood Trough
|
tile.resonantinduction\:fluidPipe.4.name=Brown Wood Trough
|
||||||
tile.resonantinduction\:fluidPipe.5.name=Blue Wood Trough
|
tile.resonantinduction\:fluidPipe.5.name=Blue Wood Trough
|
||||||
|
|
Loading…
Reference in a new issue