Work on Logistical Transporter
This commit is contained in:
parent
96b192efef
commit
fe9cd85564
7 changed files with 165 additions and 4 deletions
|
@ -31,6 +31,7 @@ import mekanism.common.TileEntityEnergyCube;
|
||||||
import mekanism.common.TileEntityEnrichmentChamber;
|
import mekanism.common.TileEntityEnrichmentChamber;
|
||||||
import mekanism.common.TileEntityFactory;
|
import mekanism.common.TileEntityFactory;
|
||||||
import mekanism.common.TileEntityGasTank;
|
import mekanism.common.TileEntityGasTank;
|
||||||
|
import mekanism.common.TileEntityLogisticalTransporter;
|
||||||
import mekanism.common.TileEntityMechanicalPipe;
|
import mekanism.common.TileEntityMechanicalPipe;
|
||||||
import mekanism.common.TileEntityMetallurgicInfuser;
|
import mekanism.common.TileEntityMetallurgicInfuser;
|
||||||
import mekanism.common.TileEntityOsmiumCompressor;
|
import mekanism.common.TileEntityOsmiumCompressor;
|
||||||
|
@ -187,6 +188,7 @@ public class ClientProxy extends CommonProxy
|
||||||
ClientRegistry.registerTileEntity(TileEntityDynamicTank.class, "DynamicTank", new RenderDynamicTank());
|
ClientRegistry.registerTileEntity(TileEntityDynamicTank.class, "DynamicTank", new RenderDynamicTank());
|
||||||
ClientRegistry.registerTileEntity(TileEntityDynamicValve.class, "DynamicValve", new RenderDynamicTank());
|
ClientRegistry.registerTileEntity(TileEntityDynamicValve.class, "DynamicValve", new RenderDynamicTank());
|
||||||
ClientRegistry.registerTileEntity(TileEntityChargepad.class, "Chargepad", new RenderChargepad());
|
ClientRegistry.registerTileEntity(TileEntityChargepad.class, "Chargepad", new RenderChargepad());
|
||||||
|
ClientRegistry.registerTileEntity(TileEntityLogisticalTransporter.class, "LogisticalTransporter", new RenderLogisticalTransporter());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,6 +1,44 @@
|
||||||
package mekanism.client;
|
package mekanism.client;
|
||||||
|
|
||||||
public class RenderLogisticalTransporter
|
import mekanism.common.MekanismUtils;
|
||||||
{
|
import mekanism.common.MekanismUtils.ResourceType;
|
||||||
|
import mekanism.common.TileEntityLogisticalTransporter;
|
||||||
|
import mekanism.common.TransporterUtils;
|
||||||
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
public class RenderLogisticalTransporter extends TileEntitySpecialRenderer
|
||||||
|
{
|
||||||
|
private ModelTransmitter model = new ModelTransmitter();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick)
|
||||||
|
{
|
||||||
|
renderAModelAt((TileEntityLogisticalTransporter)tileEntity, x, y, z, partialTick);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("incomplete-switch")
|
||||||
|
public void renderAModelAt(TileEntityLogisticalTransporter tileEntity, double x, double y, double z, float partialTick)
|
||||||
|
{
|
||||||
|
func_110628_a(MekanismUtils.getResource(ResourceType.RENDER, "LogisticalTransporter.png"));
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F);
|
||||||
|
GL11.glScalef(1.0F, -1F, -1F);
|
||||||
|
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||||
|
|
||||||
|
boolean[] connectable = TransporterUtils.getConnections(tileEntity);
|
||||||
|
|
||||||
|
model.renderCenter(connectable);
|
||||||
|
|
||||||
|
for(int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
model.renderSide(ForgeDirection.getOrientation(i), connectable[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,9 @@ public class TransmitterRenderer implements ISimpleBlockRenderingHandler
|
||||||
case 2:
|
case 2:
|
||||||
Minecraft.getMinecraft().renderEngine.func_110577_a(MekanismUtils.getResource(ResourceType.RENDER, "MechanicalPipe.png"));
|
Minecraft.getMinecraft().renderEngine.func_110577_a(MekanismUtils.getResource(ResourceType.RENDER, "MechanicalPipe.png"));
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
Minecraft.getMinecraft().renderEngine.func_110577_a(MekanismUtils.getResource(ResourceType.RENDER, "LogisticalTransporter.png"));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
transmitter.renderSide(ForgeDirection.UP, true);
|
transmitter.renderSide(ForgeDirection.UP, true);
|
||||||
|
|
|
@ -198,6 +198,10 @@ public class BlockTransmitter extends Block
|
||||||
{
|
{
|
||||||
connectable = PipeUtils.getConnections(tileEntity);
|
connectable = PipeUtils.getConnections(tileEntity);
|
||||||
}
|
}
|
||||||
|
else if(world.getBlockMetadata(x, y, z) == 3)
|
||||||
|
{
|
||||||
|
connectable = TransporterUtils.getConnections(tileEntity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return connectable;
|
return connectable;
|
||||||
|
@ -387,5 +391,4 @@ public class BlockTransmitter extends Block
|
||||||
|
|
||||||
return itemStack;
|
return itemStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
6
common/mekanism/common/ILogisticalTransporter.java
Normal file
6
common/mekanism/common/ILogisticalTransporter.java
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
package mekanism.common;
|
||||||
|
|
||||||
|
public interface ILogisticalTransporter
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ package mekanism.common;
|
||||||
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
|
||||||
public class TileEntityLogisticalTransporter extends TileEntity
|
public class TileEntityLogisticalTransporter extends TileEntity implements ILogisticalTransporter
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
109
common/mekanism/common/TransporterUtils.java
Normal file
109
common/mekanism/common/TransporterUtils.java
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
package mekanism.common;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import mekanism.api.Object3D;
|
||||||
|
import net.minecraft.inventory.IInventory;
|
||||||
|
import net.minecraft.inventory.ISidedInventory;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
|
||||||
|
public final class TransporterUtils
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Gets all the transporters around a tile entity.
|
||||||
|
* @param tileEntity - center tile entity
|
||||||
|
* @return array of TileEntities
|
||||||
|
*/
|
||||||
|
public static TileEntity[] getConnectedTransporters(TileEntity tileEntity)
|
||||||
|
{
|
||||||
|
TileEntity[] transporters = new TileEntity[] {null, null, null, null, null, null};
|
||||||
|
|
||||||
|
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
{
|
||||||
|
TileEntity transporter = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
|
||||||
|
|
||||||
|
if(transporter instanceof ILogisticalTransporter)
|
||||||
|
{
|
||||||
|
transporters[orientation.ordinal()] = transporter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return transporters;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all the adjacent connections to a TileEntity.
|
||||||
|
* @param tileEntity - center TileEntity
|
||||||
|
* @return boolean[] of adjacent connections
|
||||||
|
*/
|
||||||
|
public static boolean[] getConnections(TileEntity tileEntity)
|
||||||
|
{
|
||||||
|
boolean[] connectable = new boolean[] {false, false, false, false, false, false};
|
||||||
|
|
||||||
|
TileEntity[] connectedTransporters = getConnectedTransporters(tileEntity);
|
||||||
|
IInventory[] connectedInventories = getConnectedInventories(tileEntity);
|
||||||
|
|
||||||
|
for(IInventory inventory : connectedInventories)
|
||||||
|
{
|
||||||
|
if(inventory != null)
|
||||||
|
{
|
||||||
|
int side = Arrays.asList(connectedInventories).indexOf(inventory);
|
||||||
|
ForgeDirection forgeSide = ForgeDirection.getOrientation(side).getOpposite();
|
||||||
|
|
||||||
|
if(inventory.getSizeInventory() > 0)
|
||||||
|
{
|
||||||
|
if(inventory instanceof ISidedInventory)
|
||||||
|
{
|
||||||
|
ISidedInventory sidedInventory = (ISidedInventory)inventory;
|
||||||
|
|
||||||
|
if(sidedInventory.getAccessibleSlotsFromSide(forgeSide.ordinal()) != null)
|
||||||
|
{
|
||||||
|
if(sidedInventory.getAccessibleSlotsFromSide(forgeSide.ordinal()).length > 0)
|
||||||
|
{
|
||||||
|
connectable[side] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
connectable[side] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(TileEntity tile : connectedTransporters)
|
||||||
|
{
|
||||||
|
if(tile != null)
|
||||||
|
{
|
||||||
|
int side = Arrays.asList(connectedTransporters).indexOf(tile);
|
||||||
|
|
||||||
|
connectable[side] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return connectable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all the inventories around a tile entity.
|
||||||
|
* @param tileEntity - center tile entity
|
||||||
|
* @return array of IInventories
|
||||||
|
*/
|
||||||
|
public static IInventory[] getConnectedInventories(TileEntity tileEntity)
|
||||||
|
{
|
||||||
|
IInventory[] inventories = new IInventory[] {null, null, null, null, null, null};
|
||||||
|
|
||||||
|
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
{
|
||||||
|
TileEntity inventory = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
|
||||||
|
|
||||||
|
if(inventory instanceof IInventory && !(inventory instanceof ILogisticalTransporter))
|
||||||
|
{
|
||||||
|
inventories[orientation.ordinal()] = (IInventory)inventory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return inventories;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue