Tesla now uses new multiblock library
This commit is contained in:
parent
ba212e9d29
commit
1b17e38217
11 changed files with 147 additions and 105 deletions
|
@ -17,7 +17,9 @@ import cpw.mods.fml.common.FMLCommonHandler;
|
|||
import cpw.mods.fml.relauncher.Side;
|
||||
|
||||
/**
|
||||
* Basic single stack inventory
|
||||
* Basic single stack inventory.
|
||||
*
|
||||
* TODO: Add filter-locking feature. Put filter in, locks the crate to only use that item.
|
||||
*
|
||||
* @author DarkGuardsman
|
||||
*/
|
||||
|
|
|
@ -23,7 +23,7 @@ import resonantinduction.api.IArmbot;
|
|||
import resonantinduction.api.IArmbotUseable;
|
||||
import resonantinduction.archaic.imprint.ItemBlockImprint;
|
||||
import resonantinduction.core.ResonantInduction;
|
||||
import resonantinduction.core.prefab.ContainerFake;
|
||||
import resonantinduction.core.prefab.ContainerDummy;
|
||||
import resonantinduction.electrical.encoder.coding.args.ArgumentData;
|
||||
import universalelectricity.api.vector.Vector3;
|
||||
import calclavia.lib.network.IPacketReceiver;
|
||||
|
@ -284,7 +284,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive
|
|||
*/
|
||||
public InventoryCrafting getCraftingMatrix()
|
||||
{
|
||||
InventoryCrafting inventoryCrafting = new InventoryCrafting(new ContainerFake(this), 3, 3);
|
||||
InventoryCrafting inventoryCrafting = new InventoryCrafting(new ContainerDummy(this), 3, 3);
|
||||
|
||||
for (int i = 0; i < this.craftingMatrix.length; i++)
|
||||
{
|
||||
|
|
|
@ -17,8 +17,8 @@ import resonantinduction.core.resource.ResourceGenerator;
|
|||
import resonantinduction.core.resource.fluid.BlockFluidMixture;
|
||||
import resonantinduction.core.resource.fluid.TileFluidMixture;
|
||||
import resonantinduction.core.resource.item.ItemOreResource;
|
||||
import calclavia.lib.multiblock.link.BlockMulti;
|
||||
import calclavia.lib.multiblock.link.TileMultiBlockPart;
|
||||
import calclavia.lib.multiblock.fake.BlockMultiFake;
|
||||
import calclavia.lib.multiblock.fake.TileMultiBlockPart;
|
||||
import calclavia.lib.network.PacketHandler;
|
||||
import calclavia.lib.network.PacketTile;
|
||||
import calclavia.lib.utility.LanguageUtility;
|
||||
|
|
|
@ -14,7 +14,7 @@ import net.minecraftforge.fluids.FluidTank;
|
|||
import net.minecraftforge.fluids.FluidTankInfo;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import universalelectricity.api.vector.Vector3;
|
||||
import calclavia.lib.multiblock.link.IBlockActivate;
|
||||
import calclavia.lib.multiblock.fake.IBlockActivate;
|
||||
import calclavia.lib.utility.FluidUtility;
|
||||
|
||||
import com.builtbroken.common.lang.TextHelper.TextColor;
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
package resonantinduction.core.prefab;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import calclavia.lib.prefab.tile.IPlayerUsing;
|
||||
|
||||
/**
|
||||
* Allows the use of a tile inventory without the need for a container class.
|
||||
*
|
||||
* @author DarkGuardsman
|
||||
*/
|
||||
public class ContainerDummy extends Container
|
||||
{
|
||||
protected TileEntity tile;
|
||||
|
||||
public ContainerDummy(TileEntity tile)
|
||||
{
|
||||
this.tile = tile;
|
||||
}
|
||||
|
||||
public ContainerDummy(EntityPlayer player, TileEntity tile)
|
||||
{
|
||||
this(tile);
|
||||
|
||||
if (tile instanceof IPlayerUsing)
|
||||
{
|
||||
((IPlayerUsing) tile).getPlayersUsing().add(player);
|
||||
}
|
||||
}
|
||||
|
||||
public void onContainerClosed(EntityPlayer player)
|
||||
{
|
||||
if (tile instanceof IPlayerUsing)
|
||||
{
|
||||
((IPlayerUsing) tile).getPlayersUsing().remove(player);
|
||||
}
|
||||
|
||||
super.onContainerClosed(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer par1EntityPlayer)
|
||||
{
|
||||
if (tile instanceof IInventory)
|
||||
{
|
||||
return ((IInventory) this.tile).isUseableByPlayer(par1EntityPlayer);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package resonantinduction.core.prefab;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
/**
|
||||
* Allows the use of a tile inv without the need for a container class
|
||||
*
|
||||
* @author DarkGuardsman
|
||||
*/
|
||||
public class ContainerFake extends Container
|
||||
{
|
||||
TileEntity entity = null;
|
||||
|
||||
public ContainerFake(TileEntity entity)
|
||||
{
|
||||
this.entity = entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer par1EntityPlayer)
|
||||
{
|
||||
if (entity instanceof IInventory)
|
||||
{
|
||||
return ((IInventory) this.entity).isUseableByPlayer(par1EntityPlayer);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -16,8 +16,8 @@ import resonantinduction.core.prefab.block.BlockRI;
|
|||
import resonantinduction.core.render.RIBlockRenderingHandler;
|
||||
import calclavia.components.CalclaviaLoader;
|
||||
import calclavia.lib.content.IExtraInfo.IExtraBlockInfo;
|
||||
import calclavia.lib.multiblock.link.IBlockActivate;
|
||||
import calclavia.lib.multiblock.link.IMultiBlock;
|
||||
import calclavia.lib.multiblock.fake.IBlockActivate;
|
||||
import calclavia.lib.multiblock.fake.IMultiBlock;
|
||||
|
||||
import com.builtbroken.common.Pair;
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ import resonantinduction.electrical.encoder.coding.IProgram;
|
|||
import resonantinduction.electrical.encoder.coding.ProgramHelper;
|
||||
import universalelectricity.api.vector.Vector2;
|
||||
import universalelectricity.api.vector.Vector3;
|
||||
import calclavia.lib.multiblock.link.IBlockActivate;
|
||||
import calclavia.lib.multiblock.link.IMultiBlock;
|
||||
import calclavia.lib.multiblock.fake.IBlockActivate;
|
||||
import calclavia.lib.multiblock.fake.IMultiBlock;
|
||||
import calclavia.lib.network.PacketHandler;
|
||||
import calclavia.lib.utility.LanguageUtility;
|
||||
import calclavia.lib.utility.MathUtility;
|
||||
|
|
|
@ -2,7 +2,7 @@ package resonantinduction.electrical.encoder.gui;
|
|||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import resonantinduction.core.prefab.ContainerFake;
|
||||
import resonantinduction.core.prefab.ContainerDummy;
|
||||
import resonantinduction.electrical.encoder.TileEncoder;
|
||||
import calclavia.lib.gui.GuiContainerBase;
|
||||
|
||||
|
@ -20,7 +20,7 @@ public class GuiEncoderBase extends GuiContainerBase
|
|||
|
||||
public GuiEncoderBase(InventoryPlayer player, TileEncoder tileEntity)
|
||||
{
|
||||
this(player, tileEntity, new ContainerFake(tileEntity));
|
||||
this(player, tileEntity, new ContainerDummy(tileEntity));
|
||||
}
|
||||
|
||||
public int getGuiLeft()
|
||||
|
|
|
@ -41,7 +41,7 @@ public class BlockTesla extends BlockIOBase implements ITileEntityProvider
|
|||
public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ)
|
||||
{
|
||||
TileEntity t = world.getBlockTileEntity(x, y, z);
|
||||
TileTesla tileEntity = ((TileTesla) t).getControllingTelsa();
|
||||
TileTesla tileEntity = ((TileTesla) t).getMultiBlock().get();
|
||||
|
||||
if (entityPlayer.getCurrentEquippedItem() != null)
|
||||
{
|
||||
|
|
|
@ -28,6 +28,8 @@ import universalelectricity.api.energy.EnergyStorageHandler;
|
|||
import universalelectricity.api.vector.Vector3;
|
||||
import universalelectricity.api.vector.VectorWorld;
|
||||
import calclavia.lib.CustomDamageSource;
|
||||
import calclavia.lib.multiblock.reference.IMultiBlockStructure;
|
||||
import calclavia.lib.multiblock.reference.MultiBlockHandler;
|
||||
import calclavia.lib.network.IPacketReceiver;
|
||||
import calclavia.lib.network.IPacketSender;
|
||||
import calclavia.lib.prefab.tile.TileElectrical;
|
||||
|
@ -46,7 +48,7 @@ import cpw.mods.fml.common.network.PacketDispatcher;
|
|||
* @author Calclavia
|
||||
*
|
||||
*/
|
||||
public class TileTesla extends TileElectrical implements ITesla, IPacketSender, IPacketReceiver, ILinkable
|
||||
public class TileTesla extends TileElectrical implements IMultiBlockStructure<TileTesla>, ITesla, IPacketSender, IPacketReceiver, ILinkable
|
||||
{
|
||||
public final static int DEFAULT_COLOR = 12;
|
||||
public final long TRANSFER_CAP = 10000;
|
||||
|
@ -62,12 +64,6 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
private final Set<TileTesla> outputBlacklist = new HashSet<TileTesla>();
|
||||
private final Set<TileTesla> connectedTeslas = new HashSet<TileTesla>();
|
||||
|
||||
/**
|
||||
* Caching
|
||||
*/
|
||||
private TileTesla topCache = null;
|
||||
private TileTesla controlCache = null;
|
||||
|
||||
/**
|
||||
* Quantum Tesla
|
||||
*/
|
||||
|
@ -81,6 +77,8 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
private boolean isLinkedClient;
|
||||
private boolean isTransfering;
|
||||
|
||||
private TileTesla topCache;
|
||||
|
||||
public TileTesla()
|
||||
{
|
||||
this.energy = new EnergyStorageHandler(TRANSFER_CAP);
|
||||
|
@ -104,7 +102,7 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
/**
|
||||
* Only transfer if it is the bottom controlling Tesla tower.
|
||||
*/
|
||||
if (this.isController())
|
||||
if (this.getMultiBlock().isPrimary())
|
||||
{
|
||||
// this.produce();
|
||||
|
||||
|
@ -162,7 +160,7 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
continue;
|
||||
}
|
||||
|
||||
tesla = ((TileTesla) tesla).getControllingTelsa();
|
||||
tesla = getMultiBlock().get();
|
||||
}
|
||||
|
||||
transferTeslaCoils.add(tesla);
|
||||
|
@ -215,7 +213,7 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
|
||||
if (tesla instanceof TileTesla)
|
||||
{
|
||||
((TileTesla) tesla).getControllingTelsa().outputBlacklist.add(this);
|
||||
getMultiBlock().get().outputBlacklist.add(this);
|
||||
targetVector = new Vector3(((TileTesla) tesla).getTopTelsa());
|
||||
}
|
||||
|
||||
|
@ -264,7 +262,7 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
}
|
||||
}
|
||||
|
||||
this.clearCache();
|
||||
this.topCache = null;
|
||||
}
|
||||
|
||||
private void transfer(ITesla tesla, long transferEnergy)
|
||||
|
@ -285,7 +283,7 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
@Override
|
||||
public boolean canConnect(ForgeDirection direction)
|
||||
{
|
||||
return super.canConnect(direction) && this.isController();
|
||||
return super.canConnect(direction) && this.getMultiBlock().isPrimary();
|
||||
}
|
||||
|
||||
public void sendPacket(int type)
|
||||
|
@ -356,21 +354,10 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
}
|
||||
}
|
||||
|
||||
private boolean isController()
|
||||
{
|
||||
return this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord) == 0;
|
||||
}
|
||||
|
||||
private void clearCache()
|
||||
{
|
||||
this.topCache = null;
|
||||
this.controlCache = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long teslaTransfer(long transferEnergy, boolean doTransfer)
|
||||
{
|
||||
if (isController() || this.getControllingTelsa() == this)
|
||||
if (getMultiBlock().isPrimary())
|
||||
{
|
||||
if (doTransfer)
|
||||
{
|
||||
|
@ -392,7 +379,7 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
this.energy.setEnergy(0);
|
||||
}
|
||||
|
||||
return this.getControllingTelsa().teslaTransfer(transferEnergy, doTransfer);
|
||||
return getMultiBlock().get().teslaTransfer(transferEnergy, doTransfer);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -403,6 +390,14 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
|
||||
public void updatePositionStatus()
|
||||
{
|
||||
Vector3[] vecs = getMultiBlockVectors();
|
||||
|
||||
if (vecs.length > 0)
|
||||
{
|
||||
((TileTesla) vecs[vecs.length - 1].getTileEntity(worldObj)).getMultiBlock().deconstruct();
|
||||
((TileTesla) vecs[vecs.length - 1].getTileEntity(worldObj)).getMultiBlock().construct();
|
||||
}
|
||||
|
||||
boolean isTop = new Vector3(this).translate(new Vector3(0, 1, 0)).getTileEntity(this.worldObj) instanceof TileTesla;
|
||||
boolean isBottom = new Vector3(this).translate(new Vector3(0, -1, 0)).getTileEntity(this.worldObj) instanceof TileTesla;
|
||||
|
||||
|
@ -457,41 +452,6 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
return returnTile;
|
||||
}
|
||||
|
||||
/**
|
||||
* For non-controlling Tesla to use.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public TileTesla getControllingTelsa()
|
||||
{
|
||||
if (this.controlCache != null)
|
||||
{
|
||||
return this.controlCache;
|
||||
}
|
||||
|
||||
Vector3 checkPosition = new Vector3(this);
|
||||
TileTesla returnTile = this;
|
||||
|
||||
while (true)
|
||||
{
|
||||
TileEntity t = checkPosition.getTileEntity(this.worldObj);
|
||||
|
||||
if (t instanceof TileTesla)
|
||||
{
|
||||
returnTile = (TileTesla) t;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
checkPosition.y--;
|
||||
}
|
||||
|
||||
this.controlCache = returnTile;
|
||||
return returnTile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called only on bottom.
|
||||
*
|
||||
|
@ -651,4 +611,62 @@ public class TileTesla extends TileElectrical implements ITesla, IPacketSender,
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiblock Methods.
|
||||
*/
|
||||
private MultiBlockHandler<TileTesla> multiBlock;
|
||||
|
||||
@Override
|
||||
public void onMultiBlockChanged()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vector3[] getMultiBlockVectors()
|
||||
{
|
||||
List<Vector3> vectors = new ArrayList<Vector3>();
|
||||
|
||||
Vector3 checkPosition = new Vector3(this);
|
||||
|
||||
while (true)
|
||||
{
|
||||
TileEntity t = checkPosition.getTileEntity(this.worldObj);
|
||||
|
||||
if (t instanceof TileTesla)
|
||||
{
|
||||
checkPosition.add(new Vector3((TileTesla) t).subtract(getPosition()));
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
checkPosition.y--;
|
||||
}
|
||||
|
||||
return vectors.toArray(new Vector3[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public World getWorld()
|
||||
{
|
||||
return worldObj;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vector3 getPosition()
|
||||
{
|
||||
return new Vector3(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MultiBlockHandler<TileTesla> getMultiBlock()
|
||||
{
|
||||
if (multiBlock == null)
|
||||
multiBlock = new MultiBlockHandler<TileTesla>(this);
|
||||
|
||||
return multiBlock;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue