Finished implementing Induction Matrix core functionality, just about everything works! Need to redesign GUI to include separate gauge for output rate
This commit is contained in:
parent
2ed43e5328
commit
9260414177
22 changed files with 273 additions and 142 deletions
src/main/java/mekanism
client/gui
common
base
block
content/matrix
tile
TileEntityChargepad.javaTileEntityElectricBlock.javaTileEntityElectricPump.javaTileEntityEnergyCube.javaTileEntityEntangledBlock.javaTileEntityFluidicPlenisher.javaTileEntityInductionCasing.javaTileEntityInductionCell.javaTileEntityInductionPort.javaTileEntityLaser.javaTileEntityLogisticalSorter.javaTileEntitySeismicVibrator.java
util
generators/common/tile
|
@ -1,5 +1,7 @@
|
|||
package mekanism.client.gui;
|
||||
|
||||
import mekanism.api.energy.IStrictEnergyStorage;
|
||||
import mekanism.client.gui.GuiEnergyGauge.IEnergyInfoHandler;
|
||||
import mekanism.client.render.MekanismRenderer;
|
||||
import mekanism.common.inventory.container.ContainerInductionMatrix;
|
||||
import mekanism.common.tile.TileEntityInductionCasing;
|
||||
|
@ -32,18 +34,15 @@ public class GuiInductionMatrix extends GuiMekanism
|
|||
|
||||
fontRendererObj.drawString(tileEntity.getInventoryName(), 45, 6, 0x404040);
|
||||
fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize - 94) + 2, 0x404040);
|
||||
/*fontRendererObj.drawString(MekanismUtils.localize("gui.volume") + ": " + tileEntity.clientCapacity/TankUpdateProtocol.FLUID_PER_TANK, 53, 26, 0x00CD00);
|
||||
fontRendererObj.drawString(tileEntity.structure.fluidStored != null ? LangUtils.localizeFluidStack(tileEntity.structure.fluidStored) + ":" : MekanismUtils.localize("gui.noFluid"), 53, 44, 0x00CD00);
|
||||
|
||||
if(tileEntity.structure.fluidStored != null)
|
||||
{
|
||||
fontRendererObj.drawString(tileEntity.structure.fluidStored.amount + "mB", 53, 53, 0x00CD00);
|
||||
}
|
||||
fontRendererObj.drawString(MekanismUtils.localize("gui.energy") + ":", 53, 26, 0x00CD00);
|
||||
fontRendererObj.drawString(MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()) + "/" + MekanismUtils.getEnergyDisplay(tileEntity.getMaxEnergy()), 53, 35, 0x00CD00);
|
||||
fontRendererObj.drawString(MekanismUtils.localize("gui.output") + ":", 53, 44, 0x00CD00);
|
||||
fontRendererObj.drawString(MekanismUtils.getEnergyDisplay(tileEntity.structure.lastOutput) + "/" + MekanismUtils.getEnergyDisplay(tileEntity.structure.outputCap), 53, 53, 0x00CD00);
|
||||
|
||||
if(xAxis >= 7 && xAxis <= 39 && yAxis >= 14 && yAxis <= 72)
|
||||
{
|
||||
drawCreativeTabHoveringText(tileEntity.structure.fluidStored != null ? LangUtils.localizeFluidStack(tileEntity.structure.fluidStored) + ": " + tileEntity.structure.fluidStored.amount + "mB" : MekanismUtils.localize("gui.empty"), xAxis, yAxis);
|
||||
}*/
|
||||
drawCreativeTabHoveringText(MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()), xAxis, yAxis);
|
||||
}
|
||||
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY);
|
||||
}
|
||||
|
@ -59,20 +58,15 @@ public class GuiInductionMatrix extends GuiMekanism
|
|||
int guiHeight = (height - ySize) / 2;
|
||||
drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize);
|
||||
|
||||
/*if(tileEntity.getScaledFluidLevel(58) > 0)
|
||||
if(tileEntity.getScaledEnergyLevel(58) > 0)
|
||||
{
|
||||
displayGauge(7, 14, tileEntity.getScaledFluidLevel(58), tileEntity.structure.fluidStored, 0);
|
||||
displayGauge(23, 14, tileEntity.getScaledFluidLevel(58), tileEntity.structure.fluidStored, 1);
|
||||
}*/
|
||||
displayGauge(7, 14, tileEntity.getScaledEnergyLevel(58), 0);
|
||||
displayGauge(23, 14, tileEntity.getScaledEnergyLevel(58), 1);
|
||||
}
|
||||
}
|
||||
|
||||
public void displayGauge(int xPos, int yPos, int scale, FluidStack fluid, int side /*0-left, 1-right*/)
|
||||
public void displayGauge(int xPos, int yPos, int scale, int side /*0-left, 1-right*/)
|
||||
{
|
||||
if(fluid == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int guiWidth = (width - xSize) / 2;
|
||||
int guiHeight = (height - ySize) / 2;
|
||||
|
||||
|
@ -93,7 +87,7 @@ public class GuiInductionMatrix extends GuiMekanism
|
|||
}
|
||||
|
||||
mc.renderEngine.bindTexture(MekanismRenderer.getBlocksTexture());
|
||||
drawTexturedModelRectFromIcon(guiWidth + xPos, guiHeight + yPos + 58 - renderRemaining - start, fluid.getFluid().getIcon(), 16, 16 - (16 - renderRemaining));
|
||||
drawTexturedModelRectFromIcon(guiWidth + xPos, guiHeight + yPos + 58 - renderRemaining - start, MekanismRenderer.energyIcon, 16, 16 - (16 - renderRemaining));
|
||||
start+=16;
|
||||
|
||||
if(renderRemaining == 0 || scale == 0)
|
||||
|
|
31
src/main/java/mekanism/common/base/IEnergyWrapper.java
Normal file
31
src/main/java/mekanism/common/base/IEnergyWrapper.java
Normal file
|
@ -0,0 +1,31 @@
|
|||
package mekanism.common.base;
|
||||
|
||||
import ic2.api.energy.tile.IEnergySink;
|
||||
import ic2.api.energy.tile.IEnergySource;
|
||||
import ic2.api.tile.IEnergyStorage;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
import mekanism.api.energy.ICableOutputter;
|
||||
import mekanism.api.energy.IStrictEnergyAcceptor;
|
||||
import mekanism.api.energy.IStrictEnergyStorage;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import cpw.mods.fml.common.Optional.Interface;
|
||||
import cpw.mods.fml.common.Optional.InterfaceList;
|
||||
|
||||
@InterfaceList({
|
||||
@Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2"),
|
||||
@Interface(iface = "ic2.api.energy.tile.IEnergySource", modid = "IC2"),
|
||||
@Interface(iface = "ic2.api.tile.IEnergyStorage", modid = "IC2"),
|
||||
@Interface(iface = "cofh.api.energy.IEnergyHandler", modid = "CoFHAPI|energy"),
|
||||
})
|
||||
public interface IEnergyWrapper extends IStrictEnergyStorage, IEnergyHandler, IEnergySink, IEnergySource, IEnergyStorage, IStrictEnergyAcceptor, ICableOutputter, IInventory
|
||||
{
|
||||
public EnumSet<ForgeDirection> getOutputtingSides();
|
||||
|
||||
public EnumSet<ForgeDirection> getConsumingSides();
|
||||
|
||||
public double getMaxOutput();
|
||||
}
|
|
@ -183,8 +183,8 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon
|
|||
|
||||
icons[0][0] = ctms[0][0].mainTextureData.icon;
|
||||
icons[1][0] = ctms[1][0].mainTextureData.icon;
|
||||
icons[2][0] = ctms[2][0].facingOverride.icon;
|
||||
icons[2][1] = ctms[2][1].facingOverride.icon;
|
||||
//icons[2][0] = ctms[2][0].facingOverride.icon;
|
||||
//icons[2][1] = ctms[2][1].facingOverride.icon;
|
||||
icons[2][0] = register.registerIcon("mekanism:InductionPortInput");
|
||||
icons[2][1] = register.registerIcon("mekanism:InductionPortOutput");
|
||||
icons[3][0] = register.registerIcon("mekanism:InductionCellBasic");
|
||||
|
|
|
@ -83,6 +83,7 @@ public class MatrixUpdateProtocol extends UpdateProtocol<SynchronizedMatrixData>
|
|||
{
|
||||
structure.cells.add(coord);
|
||||
structure.storageCap += ((TileEntityInductionCell)tile).tier.MAX_ELECTRICITY;
|
||||
structure.electricityStored += ((TileEntityInductionCell)tile).getEnergy();
|
||||
}
|
||||
else if(tile instanceof TileEntityInductionProvider)
|
||||
{
|
||||
|
@ -95,13 +96,13 @@ public class MatrixUpdateProtocol extends UpdateProtocol<SynchronizedMatrixData>
|
|||
@Override
|
||||
protected void onStructureDestroyed(SynchronizedMatrixData structure)
|
||||
{
|
||||
if(structure.electricityStored <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(Coord4D coord : structure.cells)
|
||||
{
|
||||
if(structure.electricityStored == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(coord.getTileEntity(pointer.getWorldObj()) instanceof TileEntityInductionCell)
|
||||
{
|
||||
TileEntityInductionCell cell = (TileEntityInductionCell)coord.getTileEntity(pointer.getWorldObj());
|
||||
|
@ -110,6 +111,11 @@ public class MatrixUpdateProtocol extends UpdateProtocol<SynchronizedMatrixData>
|
|||
cell.setEnergy(cell.getEnergy()+toAdd);
|
||||
structure.electricityStored -= toAdd;
|
||||
}
|
||||
|
||||
if(structure.electricityStored <= 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,10 @@ public class SynchronizedMatrixData extends SynchronizedData<SynchronizedMatrixD
|
|||
|
||||
public Set<Coord4D> providers = new HashSet<Coord4D>();
|
||||
|
||||
public double storageCap;
|
||||
public double remainingOutput;
|
||||
public double lastOutput;
|
||||
|
||||
public double storageCap;
|
||||
public double outputCap;
|
||||
|
||||
@Override
|
||||
|
|
|
@ -139,7 +139,7 @@ public class TileEntityChargepad extends TileEntityNoisyElectricBlock
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.of(ForgeDirection.DOWN, ForgeDirection.getOrientation(facing).getOpposite());
|
||||
}
|
||||
|
|
|
@ -4,10 +4,7 @@ import ic2.api.energy.EnergyNet;
|
|||
import ic2.api.energy.event.EnergyTileLoadEvent;
|
||||
import ic2.api.energy.event.EnergyTileUnloadEvent;
|
||||
import ic2.api.energy.tile.IEnergyConductor;
|
||||
import ic2.api.energy.tile.IEnergySink;
|
||||
import ic2.api.energy.tile.IEnergySource;
|
||||
import ic2.api.energy.tile.IEnergyTile;
|
||||
import ic2.api.tile.IEnergyStorage;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -15,27 +12,16 @@ import java.util.EnumSet;
|
|||
|
||||
import mekanism.api.Coord4D;
|
||||
import mekanism.api.MekanismConfig.general;
|
||||
import mekanism.api.energy.ICableOutputter;
|
||||
import mekanism.api.energy.IStrictEnergyAcceptor;
|
||||
import mekanism.api.energy.IStrictEnergyStorage;
|
||||
import mekanism.api.transmitters.IGridTransmitter;
|
||||
import mekanism.common.base.IEnergyWrapper;
|
||||
import mekanism.common.util.MekanismUtils;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import cpw.mods.fml.common.Optional.Interface;
|
||||
import cpw.mods.fml.common.Optional.InterfaceList;
|
||||
import cpw.mods.fml.common.Optional.Method;
|
||||
|
||||
@InterfaceList({
|
||||
@Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2"),
|
||||
@Interface(iface = "ic2.api.energy.tile.IEnergySource", modid = "IC2"),
|
||||
@Interface(iface = "ic2.api.tile.IEnergyStorage", modid = "IC2"),
|
||||
@Interface(iface = "cofh.api.energy.IEnergyHandler", modid = "CoFHAPI|energy"),
|
||||
})
|
||||
public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IStrictEnergyStorage, IEnergyHandler, IEnergySink, IEnergySource, IEnergyStorage, IStrictEnergyAcceptor, ICableOutputter
|
||||
public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IEnergyWrapper
|
||||
{
|
||||
/** How much energy is stored in this block. */
|
||||
public double electricityStored;
|
||||
|
@ -107,18 +93,21 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumSet<ForgeDirection> getOutputtingSides()
|
||||
{
|
||||
return EnumSet.noneOf(ForgeDirection.class);
|
||||
}
|
||||
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
@Override
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
EnumSet set = EnumSet.allOf(ForgeDirection.class);
|
||||
set.remove(ForgeDirection.UNKNOWN);
|
||||
return set;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMaxOutput()
|
||||
{
|
||||
return 0;
|
||||
|
|
|
@ -377,7 +377,7 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.of(ForgeDirection.getOrientation(facing).getOpposite());
|
||||
}
|
||||
|
|
|
@ -107,7 +107,7 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IPe
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
EnumSet set = EnumSet.allOf(ForgeDirection.class);
|
||||
set.removeAll(getOutputtingSides());
|
||||
|
|
|
@ -72,16 +72,19 @@ public class TileEntityEntangledBlock extends TileEntityElectricBlock implements
|
|||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumSet<ForgeDirection> getOutputtingSides()
|
||||
{
|
||||
return sharedInventory == null ? nothing : EnumSet.of(ForgeDirection.UP);
|
||||
}
|
||||
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
@Override
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return sharedInventory == null ? nothing : EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN, ForgeDirection.UP));
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMaxOutput()
|
||||
{
|
||||
return sharedInventory == null ? 0 : 1000;
|
||||
|
|
|
@ -395,7 +395,7 @@ public class TileEntityFluidicPlenisher extends TileEntityElectricBlock implemen
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.of(ForgeDirection.getOrientation(facing).getOpposite());
|
||||
}
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
package mekanism.common.tile;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import mekanism.api.energy.IStrictEnergyStorage;
|
||||
import mekanism.common.Mekanism;
|
||||
import mekanism.common.content.matrix.MatrixUpdateProtocol;
|
||||
import mekanism.common.content.matrix.SynchronizedMatrixData;
|
||||
import mekanism.common.multiblock.MultiblockManager;
|
||||
import mekanism.common.util.ChargeUtils;
|
||||
import mekanism.common.util.MekanismUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class TileEntityInductionCasing extends TileEntityMultiblock<SynchronizedMatrixData>
|
||||
public class TileEntityInductionCasing extends TileEntityMultiblock<SynchronizedMatrixData> implements IStrictEnergyStorage
|
||||
{
|
||||
public TileEntityInductionCasing()
|
||||
{
|
||||
|
@ -19,6 +25,54 @@ public class TileEntityInductionCasing extends TileEntityMultiblock<Synchronized
|
|||
super(name);
|
||||
inventory = new ItemStack[2];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate()
|
||||
{
|
||||
super.onUpdate();
|
||||
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
if(structure != null && isRendering)
|
||||
{
|
||||
structure.lastOutput = structure.outputCap-structure.remainingOutput;
|
||||
structure.remainingOutput = structure.outputCap;
|
||||
|
||||
ChargeUtils.charge(0, this);
|
||||
ChargeUtils.discharge(1, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList getNetworkedData(ArrayList data)
|
||||
{
|
||||
super.getNetworkedData(data);
|
||||
|
||||
if(structure != null)
|
||||
{
|
||||
data.add(structure.electricityStored);
|
||||
data.add(structure.storageCap);
|
||||
data.add(structure.outputCap);
|
||||
data.add(structure.lastOutput);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePacketData(ByteBuf dataStream)
|
||||
{
|
||||
super.handlePacketData(dataStream);
|
||||
|
||||
if(clientHasStructure)
|
||||
{
|
||||
structure.electricityStored = dataStream.readDouble();
|
||||
structure.storageCap = dataStream.readDouble();
|
||||
structure.outputCap = dataStream.readDouble();
|
||||
structure.lastOutput = dataStream.readDouble();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SynchronizedMatrixData getNewStructure()
|
||||
|
@ -43,4 +97,31 @@ public class TileEntityInductionCasing extends TileEntityMultiblock<Synchronized
|
|||
{
|
||||
return MekanismUtils.localize("gui.inductionMatrix");
|
||||
}
|
||||
|
||||
public int getScaledEnergyLevel(int i)
|
||||
{
|
||||
return (int)(getEnergy()*i / getMaxEnergy());
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getEnergy()
|
||||
{
|
||||
return structure != null ? structure.electricityStored : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnergy(double energy)
|
||||
{
|
||||
if(structure != null)
|
||||
{
|
||||
structure.electricityStored = Math.max(Math.min(energy, getMaxEnergy()), 0);
|
||||
MekanismUtils.saveChunk(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMaxEnergy()
|
||||
{
|
||||
return structure != null ? structure.storageCap : 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,9 +28,10 @@ public class TileEntityInductionCell extends TileEntityBasicBlock implements ISt
|
|||
public void handlePacketData(ByteBuf dataStream)
|
||||
{
|
||||
tier = InductionCellTier.values()[dataStream.readInt()];
|
||||
electricityStored = dataStream.readDouble();
|
||||
|
||||
super.handlePacketData(dataStream);
|
||||
|
||||
electricityStored = dataStream.readDouble();
|
||||
|
||||
MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord);
|
||||
}
|
||||
|
@ -39,9 +40,10 @@ public class TileEntityInductionCell extends TileEntityBasicBlock implements ISt
|
|||
public ArrayList getNetworkedData(ArrayList data)
|
||||
{
|
||||
data.add(tier.ordinal());
|
||||
data.add(electricityStored);
|
||||
|
||||
super.getNetworkedData(data);
|
||||
|
||||
data.add(electricityStored);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
|
|
@ -4,25 +4,22 @@ import ic2.api.energy.EnergyNet;
|
|||
import ic2.api.energy.event.EnergyTileLoadEvent;
|
||||
import ic2.api.energy.event.EnergyTileUnloadEvent;
|
||||
import ic2.api.energy.tile.IEnergyConductor;
|
||||
import ic2.api.energy.tile.IEnergySink;
|
||||
import ic2.api.energy.tile.IEnergySource;
|
||||
import ic2.api.energy.tile.IEnergyTile;
|
||||
import ic2.api.tile.IEnergyStorage;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import mekanism.api.Coord4D;
|
||||
import mekanism.api.EnumColor;
|
||||
import mekanism.api.IConfigurable;
|
||||
import mekanism.api.MekanismConfig.general;
|
||||
import mekanism.api.Range4D;
|
||||
import mekanism.api.energy.ICableOutputter;
|
||||
import mekanism.api.energy.IStrictEnergyAcceptor;
|
||||
import mekanism.api.energy.IStrictEnergyStorage;
|
||||
import mekanism.api.transmitters.IGridTransmitter;
|
||||
import mekanism.common.Mekanism;
|
||||
import mekanism.common.base.IEnergyWrapper;
|
||||
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
||||
import mekanism.common.util.CableUtils;
|
||||
import mekanism.common.util.LangUtils;
|
||||
import mekanism.common.util.MekanismUtils;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
@ -31,7 +28,6 @@ import net.minecraft.tileentity.TileEntity;
|
|||
import net.minecraft.util.ChatComponentText;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import cpw.mods.fml.common.Optional.Interface;
|
||||
import cpw.mods.fml.common.Optional.InterfaceList;
|
||||
import cpw.mods.fml.common.Optional.Method;
|
||||
|
@ -42,7 +38,7 @@ import cpw.mods.fml.common.Optional.Method;
|
|||
@Interface(iface = "ic2.api.tile.IEnergyStorage", modid = "IC2"),
|
||||
@Interface(iface = "cofh.api.energy.IEnergyHandler", modid = "CoFHAPI|energy"),
|
||||
})
|
||||
public class TileEntityInductionPort extends TileEntityInductionCasing implements IStrictEnergyStorage, IEnergyHandler, IEnergySink, IEnergySource, IEnergyStorage, IStrictEnergyAcceptor, ICableOutputter, IConfigurable
|
||||
public class TileEntityInductionPort extends TileEntityInductionCasing implements IEnergyWrapper, IConfigurable
|
||||
{
|
||||
public boolean ic2Registered = false;
|
||||
|
||||
|
@ -57,10 +53,48 @@ public class TileEntityInductionPort extends TileEntityInductionCasing implement
|
|||
@Override
|
||||
public void onUpdate()
|
||||
{
|
||||
super.onUpdate();
|
||||
|
||||
if(!ic2Registered && MekanismUtils.useIC2())
|
||||
{
|
||||
register();
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
if(structure != null && mode == true)
|
||||
{
|
||||
double prev = getEnergy();
|
||||
CableUtils.emit(this);
|
||||
structure.remainingOutput -= (prev-getEnergy());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumSet<ForgeDirection> getOutputtingSides()
|
||||
{
|
||||
if(structure != null && mode == true)
|
||||
{
|
||||
EnumSet set = EnumSet.allOf(ForgeDirection.class);
|
||||
set.remove(ForgeDirection.UNKNOWN);
|
||||
return set;
|
||||
}
|
||||
|
||||
return EnumSet.noneOf(ForgeDirection.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
if(structure != null && mode == false)
|
||||
{
|
||||
EnumSet set = EnumSet.allOf(ForgeDirection.class);
|
||||
set.remove(ForgeDirection.UNKNOWN);
|
||||
return set;
|
||||
}
|
||||
|
||||
return EnumSet.noneOf(ForgeDirection.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -105,31 +139,10 @@ public class TileEntityInductionPort extends TileEntityInductionCasing implement
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMaxOutput()
|
||||
{
|
||||
return structure != null ? structure.outputCap : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getEnergy()
|
||||
{
|
||||
return structure != null ? structure.electricityStored : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnergy(double energy)
|
||||
{
|
||||
if(structure != null)
|
||||
{
|
||||
structure.electricityStored = Math.max(Math.min(energy, getMaxEnergy()), 0);
|
||||
MekanismUtils.saveChunk(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMaxEnergy()
|
||||
{
|
||||
return structure != null ? structure.storageCap : 0;
|
||||
return structure != null ? structure.remainingOutput : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -215,7 +228,7 @@ public class TileEntityInductionPort extends TileEntityInductionCasing implement
|
|||
@Method(modid = "CoFHAPI|energy")
|
||||
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
|
||||
{
|
||||
if(structure != null && mode == false)
|
||||
if(getConsumingSides().contains(from))
|
||||
{
|
||||
double toAdd = (int)Math.min(getMaxEnergy()-getEnergy(), maxReceive* general.FROM_TE);
|
||||
|
||||
|
@ -234,13 +247,14 @@ public class TileEntityInductionPort extends TileEntityInductionCasing implement
|
|||
@Method(modid = "CoFHAPI|energy")
|
||||
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
|
||||
{
|
||||
if(structure != null && mode == true)
|
||||
if(getOutputtingSides().contains(from))
|
||||
{
|
||||
double toSend = Math.min(getEnergy(), Math.min(getMaxOutput(), maxExtract* general.FROM_TE));
|
||||
double toSend = Math.min(getEnergy(), Math.min(getMaxOutput(), maxExtract*general.FROM_TE));
|
||||
|
||||
if(!simulate)
|
||||
{
|
||||
setEnergy(getEnergy() - toSend);
|
||||
structure.remainingOutput -= toSend;
|
||||
}
|
||||
|
||||
return (int)Math.round(toSend* general.TO_TE);
|
||||
|
@ -303,27 +317,27 @@ public class TileEntityInductionPort extends TileEntityInductionCasing implement
|
|||
@Method(modid = "IC2")
|
||||
public boolean isTeleporterCompatible(ForgeDirection side)
|
||||
{
|
||||
return structure != null && mode == true;
|
||||
return canOutputTo(side);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canOutputTo(ForgeDirection side)
|
||||
{
|
||||
return structure != null && mode == true;
|
||||
return getOutputtingSides().contains(side);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Method(modid = "IC2")
|
||||
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction)
|
||||
{
|
||||
return structure != null && mode == false;
|
||||
return getConsumingSides().contains(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Method(modid = "IC2")
|
||||
public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction)
|
||||
{
|
||||
return structure != null && mode == true && receiver instanceof IEnergyConductor;
|
||||
return getOutputtingSides().contains(direction) && receiver instanceof IEnergyConductor;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -364,7 +378,7 @@ public class TileEntityInductionPort extends TileEntityInductionCasing implement
|
|||
@Override
|
||||
public boolean canReceiveEnergy(ForgeDirection side)
|
||||
{
|
||||
return structure != null && mode == false;
|
||||
return getConsumingSides().contains(side);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -390,13 +404,18 @@ public class TileEntityInductionPort extends TileEntityInductionCasing implement
|
|||
@Method(modid = "IC2")
|
||||
public void drawEnergy(double amount)
|
||||
{
|
||||
setEnergy(Math.max(getEnergy() - (amount*general.FROM_IC2), 0));
|
||||
if(structure != null)
|
||||
{
|
||||
double toDraw = Math.min(amount*general.FROM_IC2, getMaxOutput());
|
||||
setEnergy(Math.max(getEnergy() - toDraw, 0));
|
||||
structure.remainingOutput -= toDraw;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double transferEnergyToAcceptor(ForgeDirection side, double amount)
|
||||
{
|
||||
if(structure == null || mode == true)
|
||||
if(!getConsumingSides().contains(side))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -95,7 +95,7 @@ public class TileEntityLaser extends TileEntityNoisyElectricBlock implements IAc
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.of(ForgeDirection.getOrientation(facing).getOpposite());
|
||||
}
|
||||
|
|
|
@ -555,7 +555,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.noneOf(ForgeDirection.class);
|
||||
}
|
||||
|
|
|
@ -188,7 +188,7 @@ public class TileEntitySeismicVibrator extends TileEntityElectricBlock implement
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.of(ForgeDirection.UP);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
package mekanism.common.util;
|
||||
|
||||
import ic2.api.energy.EnergyNet;
|
||||
import ic2.api.energy.tile.IEnergyAcceptor;
|
||||
import ic2.api.energy.tile.IEnergySink;
|
||||
import ic2.api.energy.tile.IEnergySource;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
|
@ -11,18 +16,13 @@ import mekanism.api.energy.ICableOutputter;
|
|||
import mekanism.api.energy.IStrictEnergyAcceptor;
|
||||
import mekanism.api.transmitters.IGridTransmitter;
|
||||
import mekanism.api.transmitters.TransmissionType;
|
||||
import mekanism.common.base.IEnergyWrapper;
|
||||
import mekanism.common.tile.TileEntityElectricBlock;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import cofh.api.energy.IEnergyConnection;
|
||||
import cofh.api.energy.IEnergyProvider;
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
import ic2.api.energy.EnergyNet;
|
||||
import ic2.api.energy.tile.IEnergyAcceptor;
|
||||
import ic2.api.energy.tile.IEnergySink;
|
||||
import ic2.api.energy.tile.IEnergySource;
|
||||
|
||||
public final class CableUtils
|
||||
{
|
||||
|
@ -218,16 +218,16 @@ public final class CableUtils
|
|||
return false;
|
||||
}
|
||||
|
||||
public static void emit(TileEntityElectricBlock emitter)
|
||||
public static void emit(IEnergyWrapper emitter)
|
||||
{
|
||||
if(!emitter.getWorldObj().isRemote && MekanismUtils.canFunction(emitter))
|
||||
if(!((TileEntity)emitter).getWorldObj().isRemote && MekanismUtils.canFunction((TileEntity)emitter))
|
||||
{
|
||||
double energyToSend = Math.min(emitter.getEnergy(), emitter.getMaxOutput());
|
||||
|
||||
if(energyToSend > 0)
|
||||
{
|
||||
List<ForgeDirection> outputtingSides = new ArrayList<ForgeDirection>();
|
||||
boolean[] connectable = getConnections(emitter, emitter.getOutputtingSides());
|
||||
boolean[] connectable = getConnections((TileEntity)emitter, emitter.getOutputtingSides());
|
||||
|
||||
for(ForgeDirection side : emitter.getOutputtingSides())
|
||||
{
|
||||
|
@ -258,7 +258,7 @@ public final class CableUtils
|
|||
}
|
||||
}
|
||||
|
||||
private static double emit_do(TileEntityElectricBlock emitter, List<ForgeDirection> outputtingSides, double totalToSend, boolean tryAgain)
|
||||
private static double emit_do(IEnergyWrapper emitter, List<ForgeDirection> outputtingSides, double totalToSend, boolean tryAgain)
|
||||
{
|
||||
double remains = totalToSend%outputtingSides.size();
|
||||
double splitSend = (totalToSend-remains)/outputtingSides.size();
|
||||
|
@ -268,7 +268,7 @@ public final class CableUtils
|
|||
|
||||
for(ForgeDirection side : outputtingSides)
|
||||
{
|
||||
TileEntity tileEntity = Coord4D.get(emitter).getFromSide(side).getTileEntity(emitter.getWorldObj());
|
||||
TileEntity tileEntity = Coord4D.get((TileEntity)emitter).getFromSide(side).getTileEntity(((TileEntity)emitter).getWorldObj());
|
||||
double toSend = splitSend+remains;
|
||||
remains = 0;
|
||||
|
||||
|
@ -289,7 +289,7 @@ public final class CableUtils
|
|||
return sent;
|
||||
}
|
||||
|
||||
private static double emit_do_do(TileEntityElectricBlock from, TileEntity tileEntity, ForgeDirection side, double currentSending, boolean tryAgain)
|
||||
private static double emit_do_do(IEnergyWrapper from, TileEntity tileEntity, ForgeDirection side, double currentSending, boolean tryAgain)
|
||||
{
|
||||
double sent = 0;
|
||||
|
||||
|
@ -314,7 +314,7 @@ public final class CableUtils
|
|||
}
|
||||
else if(MekanismUtils.useIC2() && tileEntity instanceof IEnergySink)
|
||||
{
|
||||
if(((IEnergySink)tileEntity).acceptsEnergyFrom(from, side.getOpposite()))
|
||||
if(((IEnergySink)tileEntity).acceptsEnergyFrom((TileEntity)from, side.getOpposite()))
|
||||
{
|
||||
double toSend = Math.min(currentSending, EnergyNet.instance.getPowerFromTier(((IEnergySink)tileEntity).getSinkTier())*general.FROM_IC2);
|
||||
toSend = Math.min(toSend, ((IEnergySink)tileEntity).getDemandedEnergy()*general.FROM_IC2);
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
package mekanism.common.util;
|
||||
|
||||
import ic2.api.item.ElectricItem;
|
||||
import ic2.api.item.IElectricItem;
|
||||
import mekanism.api.MekanismConfig.general;
|
||||
import mekanism.api.energy.EnergizedItemManager;
|
||||
import mekanism.api.energy.IEnergizedItem;
|
||||
import mekanism.api.energy.IStrictEnergyStorage;
|
||||
import mekanism.common.Mekanism;
|
||||
import mekanism.common.tile.TileEntityElectricBlock;
|
||||
|
||||
import mekanism.common.tile.TileEntityContainerBlock;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import cofh.api.energy.IEnergyContainerItem;
|
||||
import ic2.api.item.ElectricItem;
|
||||
import ic2.api.item.IElectricItem;
|
||||
|
||||
public final class ChargeUtils
|
||||
{
|
||||
|
@ -20,42 +20,44 @@ public final class ChargeUtils
|
|||
* @param slotID - ID of the slot of which to charge
|
||||
* @param storer - TileEntity the item is being charged in
|
||||
*/
|
||||
public static void discharge(int slotID, TileEntityElectricBlock storer)
|
||||
public static void discharge(int slotID, IStrictEnergyStorage storer)
|
||||
{
|
||||
if(storer.inventory[slotID] != null && storer.getEnergy() < storer.getMaxEnergy())
|
||||
IInventory inv = (TileEntityContainerBlock)storer;
|
||||
|
||||
if(inv.getStackInSlot(slotID) != null && storer.getEnergy() < storer.getMaxEnergy())
|
||||
{
|
||||
if(storer.inventory[slotID].getItem() instanceof IEnergizedItem)
|
||||
if(inv.getStackInSlot(slotID).getItem() instanceof IEnergizedItem)
|
||||
{
|
||||
storer.setEnergy(storer.getEnergy() + EnergizedItemManager.discharge(storer.inventory[slotID], storer.getMaxEnergy() - storer.getEnergy()));
|
||||
storer.setEnergy(storer.getEnergy() + EnergizedItemManager.discharge(inv.getStackInSlot(slotID), storer.getMaxEnergy() - storer.getEnergy()));
|
||||
}
|
||||
else if(MekanismUtils.useIC2() && storer.inventory[slotID].getItem() instanceof IElectricItem)
|
||||
else if(MekanismUtils.useIC2() && inv.getStackInSlot(slotID).getItem() instanceof IElectricItem)
|
||||
{
|
||||
IElectricItem item = (IElectricItem)storer.inventory[slotID].getItem();
|
||||
IElectricItem item = (IElectricItem)inv.getStackInSlot(slotID).getItem();
|
||||
|
||||
if(item.canProvideEnergy(storer.inventory[slotID]))
|
||||
if(item.canProvideEnergy(inv.getStackInSlot(slotID)))
|
||||
{
|
||||
double gain = ElectricItem.manager.discharge(storer.inventory[slotID], (int)((storer.getMaxEnergy() - storer.getEnergy())* general.TO_IC2), 4, true, true, false)* general.FROM_IC2;
|
||||
double gain = ElectricItem.manager.discharge(inv.getStackInSlot(slotID), (int)((storer.getMaxEnergy() - storer.getEnergy())* general.TO_IC2), 4, true, true, false)* general.FROM_IC2;
|
||||
storer.setEnergy(storer.getEnergy() + gain);
|
||||
}
|
||||
}
|
||||
else if(MekanismUtils.useRF() && storer.inventory[slotID].getItem() instanceof IEnergyContainerItem)
|
||||
else if(MekanismUtils.useRF() && inv.getStackInSlot(slotID).getItem() instanceof IEnergyContainerItem)
|
||||
{
|
||||
ItemStack itemStack = storer.inventory[slotID];
|
||||
IEnergyContainerItem item = (IEnergyContainerItem)storer.inventory[slotID].getItem();
|
||||
ItemStack itemStack = inv.getStackInSlot(slotID);
|
||||
IEnergyContainerItem item = (IEnergyContainerItem)inv.getStackInSlot(slotID).getItem();
|
||||
|
||||
int itemEnergy = (int)Math.round(Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getEnergyStored(itemStack)));
|
||||
int toTransfer = (int)Math.round(Math.min(itemEnergy, ((storer.getMaxEnergy() - storer.getEnergy())* general.TO_TE)));
|
||||
|
||||
storer.setEnergy(storer.getEnergy() + (item.extractEnergy(itemStack, toTransfer, false)* general.FROM_TE));
|
||||
}
|
||||
else if(storer.inventory[slotID].getItem() == Items.redstone && storer.getEnergy()+ general.ENERGY_PER_REDSTONE <= storer.getMaxEnergy())
|
||||
else if(inv.getStackInSlot(slotID).getItem() == Items.redstone && storer.getEnergy()+ general.ENERGY_PER_REDSTONE <= storer.getMaxEnergy())
|
||||
{
|
||||
storer.setEnergy(storer.getEnergy() + general.ENERGY_PER_REDSTONE);
|
||||
storer.inventory[slotID].stackSize--;
|
||||
inv.getStackInSlot(slotID).stackSize--;
|
||||
|
||||
if(storer.inventory[slotID].stackSize <= 0)
|
||||
if(inv.getStackInSlot(slotID).stackSize <= 0)
|
||||
{
|
||||
storer.inventory[slotID] = null;
|
||||
inv.setInventorySlotContents(slotID, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -66,23 +68,25 @@ public final class ChargeUtils
|
|||
* @param slotID - ID of the slot of which to discharge
|
||||
* @param storer - TileEntity the item is being discharged in
|
||||
*/
|
||||
public static void charge(int slotID, TileEntityElectricBlock storer)
|
||||
public static void charge(int slotID, IStrictEnergyStorage storer)
|
||||
{
|
||||
if(storer.inventory[slotID] != null && storer.getEnergy() > 0)
|
||||
IInventory inv = (TileEntityContainerBlock)storer;
|
||||
|
||||
if(inv.getStackInSlot(slotID) != null && storer.getEnergy() > 0)
|
||||
{
|
||||
if(storer.inventory[slotID].getItem() instanceof IEnergizedItem)
|
||||
if(inv.getStackInSlot(slotID).getItem() instanceof IEnergizedItem)
|
||||
{
|
||||
storer.setEnergy(storer.getEnergy() - EnergizedItemManager.charge(storer.inventory[slotID], storer.getEnergy()));
|
||||
storer.setEnergy(storer.getEnergy() - EnergizedItemManager.charge(inv.getStackInSlot(slotID), storer.getEnergy()));
|
||||
}
|
||||
else if(Mekanism.hooks.IC2APILoaded && storer.inventory[slotID].getItem() instanceof IElectricItem)
|
||||
else if(Mekanism.hooks.IC2APILoaded && inv.getStackInSlot(slotID).getItem() instanceof IElectricItem)
|
||||
{
|
||||
double sent = ElectricItem.manager.charge(storer.inventory[slotID], (int)(storer.getEnergy()* general.TO_IC2), 4, true, false)* general.FROM_IC2;
|
||||
double sent = ElectricItem.manager.charge(inv.getStackInSlot(slotID), (int)(storer.getEnergy()* general.TO_IC2), 4, true, false)* general.FROM_IC2;
|
||||
storer.setEnergy(storer.getEnergy() - sent);
|
||||
}
|
||||
else if(MekanismUtils.useRF() && storer.inventory[slotID].getItem() instanceof IEnergyContainerItem)
|
||||
else if(MekanismUtils.useRF() && inv.getStackInSlot(slotID).getItem() instanceof IEnergyContainerItem)
|
||||
{
|
||||
ItemStack itemStack = storer.inventory[slotID];
|
||||
IEnergyContainerItem item = (IEnergyContainerItem)storer.inventory[slotID].getItem();
|
||||
ItemStack itemStack = inv.getStackInSlot(slotID);
|
||||
IEnergyContainerItem item = (IEnergyContainerItem)inv.getStackInSlot(slotID).getItem();
|
||||
|
||||
int itemEnergy = (int)Math.round(Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getMaxEnergyStored(itemStack) - item.getEnergyStored(itemStack)));
|
||||
int toTransfer = (int)Math.round(Math.min(itemEnergy, (storer.getEnergy()* general.TO_TE)));
|
||||
|
|
|
@ -105,7 +105,7 @@ public abstract class TileEntityGenerator extends TileEntityNoisyElectricBlock i
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.noneOf(ForgeDirection.class);
|
||||
}
|
||||
|
|
|
@ -84,7 +84,7 @@ public abstract class TileEntityReactorBlock extends TileEntityElectricBlock imp
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.noneOf(ForgeDirection.class);
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ public class TileEntityReactorPort extends TileEntityReactorBlock implements IFl
|
|||
}
|
||||
|
||||
@Override
|
||||
protected EnumSet<ForgeDirection> getConsumingSides()
|
||||
public EnumSet<ForgeDirection> getConsumingSides()
|
||||
{
|
||||
return EnumSet.noneOf(ForgeDirection.class);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue