Clean UP
This commit is contained in:
parent
1cf72c7f8d
commit
18079fb1ce
10 changed files with 254 additions and 7 deletions
11
.gitignore
vendored
11
.gitignore
vendored
|
@ -31,7 +31,16 @@ LICENSE
|
||||||
/src/common/universalelectricity/*
|
/src/common/universalelectricity/*
|
||||||
/src/common/basiccomponents/*
|
/src/common/basiccomponents/*
|
||||||
/src/common/buildcraft/*
|
/src/common/buildcraft/*
|
||||||
/src/common/BasicPipes/*
|
/src/common/BasicPipes/BasicPipesMain.java
|
||||||
|
/src/common/BasicPipes/PipeProxy.java
|
||||||
|
/src/common/BasicPipes/pipes/BlockPipe.java
|
||||||
|
/src/common/BasicPipes/pipes/BlockPump.java
|
||||||
|
/src/common/BasicPipes/pipes/ItemGuage.java
|
||||||
|
/src/common/BasicPipes/pipes/ItemParts.java
|
||||||
|
/src/common/BasicPipes/pipes/ItemPipe.java
|
||||||
|
/src/common/BasicPipes/pipes/TileEntityCondenser.java
|
||||||
|
/src/common/BasicPipes/pipes/TileEntityPipe.java
|
||||||
|
/src/common/BasicPipes/pipes/TileEntityPump.java
|
||||||
/bin/
|
/bin/
|
||||||
/conf/
|
/conf/
|
||||||
/docs/
|
/docs/
|
||||||
|
|
35
src/common/basicpipes/pipes/api/ILiquidConsumer.java
Normal file
35
src/common/basicpipes/pipes/api/ILiquidConsumer.java
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
package basicpipes.pipes.api;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
|
||||||
|
|
||||||
|
public interface ILiquidConsumer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* onRecieveLiquid
|
||||||
|
* @param vol - The amount this block received.
|
||||||
|
* @param side - The side of the block in which the liquid came from.
|
||||||
|
* @parm type - The type of liquid being received
|
||||||
|
* @return vol - The amount liquid that can't be recieved
|
||||||
|
*/
|
||||||
|
public int onReceiveLiquid(int type, int vol, ForgeDirection side);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics
|
||||||
|
* @param forgeDirection - The side in which the electricity is coming from.
|
||||||
|
* @parm type - The type of liquid
|
||||||
|
* @return Returns true or false if this consumer can receive electricity at this given tick or moment.
|
||||||
|
*/
|
||||||
|
public boolean canRecieveLiquid(int type, ForgeDirection forgeDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Return the stored liquid of type in this consumer.
|
||||||
|
*/
|
||||||
|
public int getStoredLiquid(int type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Return the maximum amount of stored liquid this consumer can get.
|
||||||
|
*/
|
||||||
|
public int getLiquidCapacity(int type);
|
||||||
|
|
||||||
|
}
|
30
src/common/basicpipes/pipes/api/ILiquidProducer.java
Normal file
30
src/common/basicpipes/pipes/api/ILiquidProducer.java
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
package basicpipes.pipes.api;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity.
|
||||||
|
* @author Calclavia
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ILiquidProducer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* onProduceLiquid
|
||||||
|
* block.
|
||||||
|
* @param type - the type of liquid
|
||||||
|
* @param maxvol - The maximum vol or requested volume
|
||||||
|
* @param side - The side
|
||||||
|
* @return vol - Return a vol of liquid type that is produced
|
||||||
|
*/
|
||||||
|
public int onProduceLiquid(int type, int maxVol, ForgeDirection side);
|
||||||
|
/**
|
||||||
|
* canProduceLiquid
|
||||||
|
* block.
|
||||||
|
* @param type - the type of liquid
|
||||||
|
* @param side - The side
|
||||||
|
* @return boolean - True if can, false if can't produce liquid of type or on that side
|
||||||
|
* Also used for connection rules of pipes'
|
||||||
|
*/
|
||||||
|
public boolean canProduceLiquid(int type, ForgeDirection side);
|
||||||
|
}
|
174
src/common/steampower/TradeHelper.java
Normal file
174
src/common/steampower/TradeHelper.java
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
package steampower;
|
||||||
|
|
||||||
|
import basicpipes.pipes.api.ILiquidConsumer;
|
||||||
|
import net.minecraft.src.TileEntity;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
|
||||||
|
public class TradeHelper {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param entity - entity at center of search
|
||||||
|
* @return an Array containing found entities and nulls of nonEntities
|
||||||
|
*/
|
||||||
|
public static TileEntity[] getSourounding(TileEntity entity)
|
||||||
|
{
|
||||||
|
TileEntity[] list = new TileEntity[]{null,null,null,null,null,null};
|
||||||
|
for(int i =0; i< 6;i++)
|
||||||
|
{
|
||||||
|
int x = entity.xCoord;
|
||||||
|
int y = entity.yCoord;
|
||||||
|
int z = entity.zCoord;
|
||||||
|
|
||||||
|
switch(i)
|
||||||
|
{
|
||||||
|
case 0: y = y - 1;break;//down
|
||||||
|
case 1: y = y + 1;break;//up
|
||||||
|
case 2: z = z + 1;break;//north
|
||||||
|
case 3: z = z - 1;break;//south
|
||||||
|
case 4: x = x + 1;break;//east
|
||||||
|
case 5: x = x - 1;break;//west
|
||||||
|
}
|
||||||
|
TileEntity aEntity = entity.worldObj.getBlockTileEntity(x, y, z);
|
||||||
|
if(aEntity instanceof TileEntity)
|
||||||
|
{
|
||||||
|
list[i] = aEntity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Only works for steam Power's boiler. Still needs recode to work for all things
|
||||||
|
* @param blockEntity - tile entity trading the liquid
|
||||||
|
* @param type - liquid type see chart for info
|
||||||
|
* @param rise - does the liquid rise up like a gas
|
||||||
|
* @return the remaining untraded liquid
|
||||||
|
*/
|
||||||
|
public static int shareLiquid(TileEntity blockEntity,int type,boolean rise)
|
||||||
|
{
|
||||||
|
TileEntity[] connectedBlocks = getSourounding(blockEntity);
|
||||||
|
ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity;
|
||||||
|
int wSum = ((ILiquidConsumer)blockEntity).getStoredLiquid(type);
|
||||||
|
int ammountStored = blockMachine.getStoredLiquid(type);
|
||||||
|
int tankCount = 1;
|
||||||
|
boolean bottom = false;
|
||||||
|
TileEntity firstEntity = null;
|
||||||
|
TileEntity secondEntity = null;
|
||||||
|
if(rise)
|
||||||
|
{
|
||||||
|
firstEntity = connectedBlocks[1];
|
||||||
|
secondEntity = connectedBlocks[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
firstEntity = connectedBlocks[0];
|
||||||
|
secondEntity = connectedBlocks[1];
|
||||||
|
}
|
||||||
|
//checks wether or not the block bellow it is a tank to move liquid too
|
||||||
|
if(firstEntity instanceof ILiquidConsumer)
|
||||||
|
{
|
||||||
|
int bWater = ((ILiquidConsumer) firstEntity).getStoredLiquid(type);
|
||||||
|
int bMax = ((ILiquidConsumer) firstEntity).getLiquidCapacity(type);
|
||||||
|
//checks if that tank has room to get liquid.
|
||||||
|
|
||||||
|
if(bWater < bMax)
|
||||||
|
{
|
||||||
|
int tradeVol = 0;
|
||||||
|
int emptyVol = Math.max( bMax - bWater,0);
|
||||||
|
tradeVol = Math.min(emptyVol, ammountStored);
|
||||||
|
int rejected = ((ILiquidConsumer) firstEntity).onReceiveLiquid(type, tradeVol, ForgeDirection.getOrientation(1));
|
||||||
|
ammountStored = ammountStored + rejected - tradeVol;
|
||||||
|
wSum -= tradeVol;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bottom = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//there was no tank bellow this tank
|
||||||
|
bottom = true;
|
||||||
|
}
|
||||||
|
//if this is the bottom tank or bottom tank is full. Update average water ammount.
|
||||||
|
if(bottom)
|
||||||
|
{
|
||||||
|
//get average water around center tank
|
||||||
|
for(int i = 2; i<6;i++)
|
||||||
|
{
|
||||||
|
TileEntity entityA = connectedBlocks[i];
|
||||||
|
if(entityA instanceof ILiquidConsumer)
|
||||||
|
{
|
||||||
|
//if is a tank add to the sum
|
||||||
|
wSum += ((ILiquidConsumer) entityA).getStoredLiquid(type);
|
||||||
|
tankCount += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//if this is the bottom tank or bottom tank is full then trade liquid with tanks around it.
|
||||||
|
for(int i = 2; i<6;i++)
|
||||||
|
{
|
||||||
|
int average = Math.round((float)wSum / (float)tankCount);// takes the sum and makes it an average
|
||||||
|
int tradeSum = 0;
|
||||||
|
TileEntity entity = connectedBlocks[i];
|
||||||
|
if(entity instanceof ILiquidConsumer)
|
||||||
|
{
|
||||||
|
int targetW = ((ILiquidConsumer) entity).getStoredLiquid(type);
|
||||||
|
if(targetW < average)
|
||||||
|
{
|
||||||
|
tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank
|
||||||
|
int rejectedAm = ((ILiquidConsumer) entity).onReceiveLiquid(type, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back
|
||||||
|
ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(secondEntity instanceof ILiquidConsumer)
|
||||||
|
{
|
||||||
|
int bWater = ((ILiquidConsumer) secondEntity).getStoredLiquid(type);
|
||||||
|
int bMax = ((ILiquidConsumer) secondEntity).getLiquidCapacity(type);
|
||||||
|
if(bottom && ammountStored > 0)
|
||||||
|
{
|
||||||
|
if(bWater < bMax)
|
||||||
|
{
|
||||||
|
int emptyVolS = Math.max( bMax - bWater,0);
|
||||||
|
int tradeVolS = Math.min(emptyVolS, ammountStored);
|
||||||
|
int rejectedS = ((ILiquidConsumer) secondEntity).onReceiveLiquid(type, tradeVolS, ForgeDirection.getOrientation(0));;
|
||||||
|
ammountStored =rejectedS + ammountStored - tradeVolS;
|
||||||
|
wSum -= tradeVolS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ammountStored;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param entity - entity in question
|
||||||
|
* @return 1-4 if corner 0 if not a corner
|
||||||
|
* you have to figure out which is which depending on what your using this for
|
||||||
|
* 1 should be north east 2 south east
|
||||||
|
*/
|
||||||
|
public static int corner(TileEntity entity)
|
||||||
|
{
|
||||||
|
TileEntity[] en = getSourounding(entity);
|
||||||
|
if(en[4] != null && en[2] != null && en[5] == null && en[3] == null)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(en[2] != null && en[5] != null && en[3] == null && en[4] == null)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if(en[5] != null && en[3] != null && en[4] == null && en[2] == null)
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if(en[3] != null && en[4] != null && en[2] == null && en[5] == null)
|
||||||
|
{
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package steampower.ap;
|
package steampower.api;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules.
|
* The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules.
|
|
@ -1,4 +1,4 @@
|
||||||
package steampower.ap;
|
package steampower.api;
|
||||||
|
|
||||||
|
|
||||||
public interface IHeatProducer
|
public interface IHeatProducer
|
|
@ -9,9 +9,9 @@ import net.minecraft.src.TileEntity;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import steampower.SteamPowerMain;
|
import steampower.SteamPowerMain;
|
||||||
import steampower.TileEntityMachine;
|
import steampower.TileEntityMachine;
|
||||||
|
import steampower.TradeHelper;
|
||||||
import steampower.burner.TileEntityFireBox;
|
import steampower.burner.TileEntityFireBox;
|
||||||
import universalelectricity.network.IPacketReceiver;
|
import universalelectricity.network.IPacketReceiver;
|
||||||
import basicpipes.TradeHelper;
|
|
||||||
import basicpipes.pipes.api.ILiquidConsumer;
|
import basicpipes.pipes.api.ILiquidConsumer;
|
||||||
import basicpipes.pipes.api.ILiquidProducer;
|
import basicpipes.pipes.api.ILiquidProducer;
|
||||||
|
|
||||||
|
|
|
@ -12,10 +12,10 @@ import net.minecraftforge.common.ForgeDirection;
|
||||||
import net.minecraftforge.common.ISidedInventory;
|
import net.minecraftforge.common.ISidedInventory;
|
||||||
import steampower.SteamPowerMain;
|
import steampower.SteamPowerMain;
|
||||||
import steampower.TileEntityMachine;
|
import steampower.TileEntityMachine;
|
||||||
import steampower.ap.IHeatProducer;
|
import steampower.TradeHelper;
|
||||||
|
import steampower.api.IHeatProducer;
|
||||||
import steampower.boiler.TileEntityBoiler;
|
import steampower.boiler.TileEntityBoiler;
|
||||||
import universalelectricity.network.IPacketReceiver;
|
import universalelectricity.network.IPacketReceiver;
|
||||||
import basicpipes.TradeHelper;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ import net.minecraft.src.TileEntitySpecialRenderer;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import steampower.boiler.TileEntityBoiler;
|
import steampower.boiler.TileEntityBoiler;
|
||||||
import basicpipes.TradeHelper;
|
|
||||||
|
|
||||||
public class RenderBoiler extends TileEntitySpecialRenderer
|
public class RenderBoiler extends TileEntitySpecialRenderer
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue