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:
Aidan C. Brady 2015-03-03 18:18:32 -05:00
parent 2ed43e5328
commit 9260414177
22 changed files with 273 additions and 142 deletions

View file

@ -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)

View 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();
}

View file

@ -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");

View file

@ -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;
}
}
}
}

View file

@ -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

View file

@ -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());
}

View file

@ -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;

View file

@ -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());
}

View file

@ -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());

View file

@ -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;

View file

@ -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());
}

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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());
}

View file

@ -555,7 +555,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen
}
@Override
protected EnumSet<ForgeDirection> getConsumingSides()
public EnumSet<ForgeDirection> getConsumingSides()
{
return EnumSet.noneOf(ForgeDirection.class);
}

View file

@ -188,7 +188,7 @@ public class TileEntitySeismicVibrator extends TileEntityElectricBlock implement
}
@Override
protected EnumSet<ForgeDirection> getConsumingSides()
public EnumSet<ForgeDirection> getConsumingSides()
{
return EnumSet.of(ForgeDirection.UP);
}

View file

@ -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);

View file

@ -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)));

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}