Updated to new UE, not done with complete implementation

This commit is contained in:
Aidan Brady 2013-07-26 18:16:21 -04:00
parent 13400fdc3d
commit 5d26f8e229
143 changed files with 1813 additions and 4424 deletions

View file

@ -41,7 +41,7 @@ public class GuiAdvancedElectricMachine extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
if(xAxis >= 179 && xAxis <= 198 && yAxis >= 47 && yAxis <= 54)

View file

@ -41,7 +41,7 @@ public class GuiElectricMachine extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
if(xAxis >= 179 && xAxis <= 198 && yAxis >= 47 && yAxis <= 54)

View file

@ -39,7 +39,7 @@ public class GuiElectricPump extends GuiContainer
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
fontRenderer.drawString("Inventory", 8, (ySize - 94) + 2, 0x404040);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString(tileEntity.fluidTank.getFluid() != null ? FluidRegistry.getFluidName(tileEntity.fluidTank.getFluid()) + ": " + tileEntity.fluidTank.getFluid().amount : "No fluid.", 51, 35, 0x00CD00);
fontRenderer.drawString(tileEntity.getVoltage() + "v", 51, 44, 0x00CD00);
@ -50,7 +50,7 @@ public class GuiElectricPump extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -34,7 +34,7 @@ public class GuiEnergyCube extends GuiContainer
@Override
protected void drawGuiContainerForegroundLayer(int par1, int par2)
{
String capacityInfo = ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES) + "/" + ElectricityDisplay.getDisplayShort(tileEntity.tier.MAX_ELECTRICITY, ElectricUnit.JOULES);
String capacityInfo = ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES) + "/" + ElectricityDisplay.getDisplayShort((float)tileEntity.tier.MAX_ELECTRICITY, ElectricUnit.JOULES);
String outputInfo = "Voltage: " + tileEntity.getVoltage() + "v";
fontRenderer.drawString(tileEntity.tier.name + " Energy Cube", 43, 6, 0x404040);
fontRenderer.drawString(capacityInfo, 45, 40, 0x00CD00);

View file

@ -44,7 +44,7 @@ public class GuiFactory extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
if(xAxis >= 179 && xAxis <= 198 && yAxis >= 47 && yAxis <= 54)

View file

@ -70,7 +70,7 @@ public class GuiMetallurgicInfuser extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -112,7 +112,7 @@ public class GuiRobitMain extends GuiContainer
if(!displayNameChange)
{
fontRenderer.drawString("Hi, I'm " + robit.getTranslatedEntityName() + "!", 29, 18, 0x00CD00);
fontRenderer.drawString("Energy: " + ElectricityDisplay.getDisplayShort(robit.getEnergy(), ElectricUnit.JOULES), 29, 36-4, 0x00CD00);
fontRenderer.drawString("Energy: " + ElectricityDisplay.getDisplayShort((float)robit.getEnergy(), ElectricUnit.JOULES), 29, 36-4, 0x00CD00);
fontRenderer.drawString("Following: " + robit.getFollowing(), 29, 45-4, 0x00CD00);
fontRenderer.drawString("Drop pickup: " + robit.getDropPickup(), 29, 54-4, 0x00CD00);
fontRenderer.drawString("Owner: " + robit.getOwnerName(), 29, 63-4, 0x00CD00);
@ -123,7 +123,7 @@ public class GuiRobitMain extends GuiContainer
if(xAxis >= 28 && xAxis <= 148 && yAxis >= 75 && yAxis <= 79)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(robit.getEnergy(), ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)robit.getEnergy(), ElectricUnit.JOULES), xAxis, yAxis);
}
else if(xAxis >= 152 && xAxis <= 170 && yAxis >= 54 && yAxis <= 72)
{

View file

@ -45,7 +45,7 @@ public class GuiTeleporter extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -20,7 +20,6 @@ import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import universalelectricity.prefab.implement.IToolConfigurator;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -169,42 +168,8 @@ public class BlockEnergyCube extends BlockContainer
if(entityplayer.getCurrentEquippedItem() != null)
{
Item tool = entityplayer.getCurrentEquippedItem().getItem();
if(tool instanceof IToolConfigurator)
{
if(((IToolConfigurator)tool).canWrench(entityplayer, x, y, z))
{
((IToolConfigurator)tool).wrenchUsed(entityplayer, x, y, z);
int change = 0;
switch(tileEntity.facing)
{
case 3:
change = 5;
break;
case 5:
change = 2;
break;
case 2:
change = 4;
break;
case 4:
change = 1;
break;
case 1:
change = 0;
break;
case 0:
change = 3;
break;
}
tileEntity.setFacing((short)change);
world.notifyBlocksOfNeighborChange(x, y, z, blockID);
return true;
}
}
else if(tool instanceof IToolWrench && !tool.getUnlocalizedName().contains("omniwrench"))
if(tool instanceof IToolWrench && !tool.getUnlocalizedName().contains("omniwrench"))
{
if(((IToolWrench)tool).canWrench(entityplayer, x, y, z))
{

View file

@ -16,7 +16,6 @@ import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import universalelectricity.prefab.implement.IToolConfigurator;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -162,36 +161,8 @@ public class BlockGasTank extends BlockContainer
if(entityplayer.getCurrentEquippedItem() != null)
{
Item tool = entityplayer.getCurrentEquippedItem().getItem();
if(tool instanceof IToolConfigurator)
{
if(((IToolConfigurator)tool).canWrench(entityplayer, x, y, z))
{
((IToolConfigurator)tool).wrenchUsed(entityplayer, x, y, z);
int change = 0;
switch(tileEntity.facing)
{
case 3:
change = 5;
break;
case 5:
change = 2;
break;
case 2:
change = 4;
break;
case 4:
change = 3;
break;
}
tileEntity.setFacing((short)change);
world.notifyBlocksOfNeighborChange(x, y, z, blockID);
return true;
}
}
else if(tool instanceof IToolWrench && !tool.getUnlocalizedName().contains("omniwrench"))
if(tool instanceof IToolWrench && !tool.getUnlocalizedName().contains("omniwrench"))
{
if(((IToolWrench)tool).canWrench(entityplayer, x, y, z))
{

View file

@ -30,7 +30,6 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.prefab.implement.IToolConfigurator;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -507,36 +506,8 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds
if(entityplayer.getCurrentEquippedItem() != null)
{
Item tool = entityplayer.getCurrentEquippedItem().getItem();
if(tool instanceof IToolConfigurator)
{
if(((IToolConfigurator)tool).canWrench(entityplayer, x, y, z))
{
((IToolConfigurator)tool).wrenchUsed(entityplayer, x, y, z);
int change = 0;
switch(tileEntity.facing)
{
case 3:
change = 5;
break;
case 5:
change = 2;
break;
case 2:
change = 4;
break;
case 4:
change = 3;
break;
}
tileEntity.setFacing((short)change);
world.notifyBlocksOfNeighborChange(x, y, z, blockID);
return true;
}
}
else if(tool instanceof IToolWrench && !tool.getUnlocalizedName().contains("omniwrench"))
if(tool instanceof IToolWrench && !tool.getUnlocalizedName().contains("omniwrench"))
{
if(((IToolWrench)tool).canWrench(entityplayer, x, y, z))
{

View file

@ -3,7 +3,6 @@ package mekanism.common;
import java.util.Arrays;
import java.util.List;
import universalelectricity.prefab.implement.IToolConfigurator;
import buildcraft.api.tools.IToolWrench;
import mekanism.api.GasTransmission;
@ -340,15 +339,15 @@ public class BlockTransmitter extends Block
if(entityplayer.getCurrentEquippedItem() != null)
{
Item tool = entityplayer.getCurrentEquippedItem().getItem();
if((tool instanceof IToolConfigurator && ((IToolConfigurator)tool).canWrench(entityplayer, x, y, z))
||(tool instanceof IToolWrench && ((IToolWrench)tool).canWrench(entityplayer, x, y, z)))
if(tool instanceof IToolWrench && ((IToolWrench)tool).canWrench(entityplayer, x, y, z))
{
if(entityplayer.isSneaking())
{
dismantleBlock(world, x, y, z, false);
}
return true;
if(entityplayer.isSneaking())
{
dismantleBlock(world, x, y, z, false);
}
return true;
}
}

View file

@ -14,7 +14,6 @@ import mekanism.api.IStrictEnergyAcceptor;
import mekanism.api.Object3D;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.core.block.IConnectionProvider;
import buildcraft.api.power.IPowerReceptor;
public final class CableUtils
@ -146,11 +145,6 @@ public final class CableUtils
return true;
}
if(tileEntity instanceof IConnectionProvider && ((IConnectionProvider)tileEntity).canConnect(side.getOpposite()))
{
return true;
}
if(tileEntity instanceof IEnergyAcceptor && ((IEnergyAcceptor)tileEntity).acceptsEnergyFrom(tile, MekanismUtils.toIC2Direction(side).getInverse()))
{
return true;

View file

@ -27,7 +27,7 @@ public final class ChargeUtils
}
else if(storer.inventory[slotID].getItem() instanceof IItemElectric)
{
storer.setEnergy(storer.getEnergy() + ElectricItemHelper.dechargeItem(storer.inventory[slotID], storer.getMaxEnergy() - storer.getEnergy(), storer.getVoltage()));
storer.setEnergy(storer.getEnergy() + ElectricItemHelper.dischargeItem(storer.inventory[slotID], (float)(storer.getMaxEnergy() - storer.getEnergy())));
}
else if(Mekanism.hooks.IC2Loaded && storer.inventory[slotID].getItem() instanceof IElectricItem)
{
@ -78,7 +78,7 @@ public final class ChargeUtils
}
else if(storer.inventory[slotID].getItem() instanceof IItemElectric)
{
storer.setEnergy(storer.getEnergy() - ElectricItemHelper.chargeItem(storer.inventory[slotID], storer.getEnergy(), storer.getVoltage()));
storer.setEnergy(storer.getEnergy() - ElectricItemHelper.chargeItem(storer.inventory[slotID], (float)storer.getEnergy()));
}
else if(Mekanism.hooks.IC2Loaded && storer.inventory[slotID].getItem() instanceof IElectricItem)
{

View file

@ -90,7 +90,7 @@ public class ContainerAdvancedElectricMachine extends Container
}
}
}
else if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
else if(MekanismUtils.canBeDischarged(slotStack))
{
if(slotID != 0 && slotID != 1 && slotID != 2 && slotID != 3)
{

View file

@ -63,24 +63,7 @@ public class ContainerDynamicTank extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
{
if(slotID != 2)
{
if (!mergeItemStack(slotStack, 2, 3, false))
{
return null;
}
}
else if(slotID == 2)
{
if(!mergeItemStack(slotStack, 3, inventorySlots.size(), true))
{
return null;
}
}
}
else if(FluidContainerRegistry.isEmptyContainer(slotStack) || FluidContainerRegistry.isFilledContainer(slotStack))
if(FluidContainerRegistry.isEmptyContainer(slotStack) || FluidContainerRegistry.isFilledContainer(slotStack))
{
if(slotID != 0 && slotID != 1)
{
@ -90,29 +73,29 @@ public class ContainerDynamicTank extends Container
}
}
else {
if(!mergeItemStack(slotStack, 3, inventorySlots.size(), true))
if(!mergeItemStack(slotStack, 2, inventorySlots.size(), true))
{
return null;
}
}
}
else {
if(slotID >= 3 && slotID <= 29)
if(slotID >= 2 && slotID <= 8)
{
if(!mergeItemStack(slotStack, 30, inventorySlots.size(), false))
if(!mergeItemStack(slotStack, 29, inventorySlots.size(), false))
{
return null;
}
}
else if(slotID > 28)
{
if(!mergeItemStack(slotStack, 3, 29, false))
if(!mergeItemStack(slotStack, 2, 28, false))
{
return null;
}
}
else {
if(!mergeItemStack(slotStack, 3, inventorySlots.size(), true))
if(!mergeItemStack(slotStack, 2, inventorySlots.size(), true))
{
return null;
}

View file

@ -106,7 +106,7 @@ public class ContainerElectricChest extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
if(MekanismUtils.canBeDischarged(slotStack))
{
if(slotID != 54)
{

View file

@ -72,7 +72,7 @@ public class ContainerElectricMachine extends Container
return null;
}
}
else if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
else if(MekanismUtils.canBeDischarged(slotStack))
{
if(slotID != 1)
{

View file

@ -65,11 +65,11 @@ public class ContainerElectricPump extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
if(MekanismUtils.canBeDischarged(slotStack))
{
if(slotID != 2)
{
if (!mergeItemStack(slotStack, 2, 3, false))
if(!mergeItemStack(slotStack, 2, 3, false))
{
return null;
}

View file

@ -86,11 +86,11 @@ public class ContainerEnergyCube extends Container
else {
if(slotID != 1 && slotID != 0)
{
if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
if(MekanismUtils.canBeDischarged(slotStack))
{
if(!mergeItemStack(slotStack, 1, 2, false))
{
if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || (slotStack.getItem() instanceof IElectricItem && (!(slotStack.getItem() instanceof IItemElectric) || ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes == 0)))
if(canTransfer(slotStack))
{
if(!mergeItemStack(slotStack, 0, 1, false))
{
@ -99,7 +99,7 @@ public class ContainerEnergyCube extends Container
}
}
}
else if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || (slotStack.getItem() instanceof IElectricItem && (!(slotStack.getItem() instanceof IItemElectric) || ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes == 0)))
else if(canTransfer(slotStack))
{
if(!mergeItemStack(slotStack, 0, 1, false))
{
@ -109,7 +109,7 @@ public class ContainerEnergyCube extends Container
}
else if(slotID == 1)
{
if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || (slotStack.getItem() instanceof IElectricItem && (!(slotStack.getItem() instanceof IItemElectric) || ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes == 0)))
if(canTransfer(slotStack))
{
if(!mergeItemStack(slotStack, 0, 1, false))
{
@ -176,4 +176,12 @@ public class ContainerEnergyCube extends Container
return stack;
}
private boolean canTransfer(ItemStack slotStack)
{
return (slotStack.getItem() instanceof IItemElectric &&
((IItemElectric)slotStack.getItem()).recharge(slotStack, 1, false) != 0) ||
(slotStack.getItem() instanceof IElectricItem && (!(slotStack.getItem() instanceof IItemElectric) ||
((IItemElectric)slotStack.getItem()).discharge(slotStack, 1, false) == 0));
}
}

View file

@ -140,7 +140,7 @@ public class ContainerFactory extends Container
return null;
}
}
else if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
else if(MekanismUtils.canBeDischarged(slotStack))
{
if(slotID != 1)
{

View file

@ -85,7 +85,7 @@ public class ContainerMetallurgicInfuser extends Container
return null;
}
}
else if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
else if(MekanismUtils.canBeDischarged(slotStack))
{
if(!mergeItemStack(slotStack, 4, 5, false))
{

View file

@ -62,7 +62,7 @@ public class ContainerTeleporter extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
if(MekanismUtils.canBeDischarged(slotStack))
{
if(slotID != 0)
{

View file

@ -161,7 +161,7 @@ public class EntityRobit extends EntityCreature implements IInventory, ISustaine
}
else if(inventory[27].getItem() instanceof IItemElectric)
{
setEnergy(getEnergy() + ElectricItemHelper.dechargeItem(inventory[27], MAX_ELECTRICITY - getEnergy(), 120/*VOLTAGE*/));
setEnergy(getEnergy() + ElectricItemHelper.dischargeItem(inventory[27], (float)(MAX_ELECTRICITY - getEnergy())));
}
else if(Mekanism.hooks.IC2Loaded && inventory[27].getItem() instanceof IElectricItem)
{

View file

@ -73,12 +73,6 @@ public class ItemAtomicDisassembler extends ItemEnergized
return true;
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return new ElectricityPack();
}
@Override
public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
{

View file

@ -52,7 +52,7 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, II
list.add("Hold " + EnumColor.AQUA + "shift" + EnumColor.GREY + " for more details.");
}
else {
list.add(EnumColor.BRIGHT_GREEN + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort(getJoules(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.BRIGHT_GREEN + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort((float)getEnergy(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.BRIGHT_GREEN + "Voltage: " + EnumColor.GREY + getVoltage(itemstack) + "v");
list.add(EnumColor.AQUA + "Inventory: " + EnumColor.GREY + (getInventory(itemstack) != null && getInventory(itemstack).tagCount() != 0));
}
@ -67,62 +67,10 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, II
}
@Override
public double getJoules(ItemStack itemStack)
{
return getEnergy(itemStack);
}
@Override
public void setJoules(double wattHours, ItemStack itemStack)
{
setEnergy(itemStack, wattHours);
}
@Override
public double getMaxJoules(ItemStack itemStack)
{
return getMaxEnergy(itemStack);
}
@Override
public double getVoltage(ItemStack itemStack)
public float getVoltage(ItemStack itemStack)
{
return getEnergyCubeTier(itemStack).VOLTAGE;
}
@Override
public ElectricityPack onReceive(ElectricityPack electricityPack, ItemStack itemStack)
{
double rejectedElectricity = Math.max((getJoules(itemStack) + electricityPack.getWatts()) - getMaxJoules(itemStack), 0);
double joulesToStore = electricityPack.getWatts() - rejectedElectricity;
setJoules(getJoules(itemStack) + joulesToStore, itemStack);
return ElectricityPack.getFromWatts(joulesToStore, getVoltage(itemStack));
}
@Override
public ElectricityPack onProvide(ElectricityPack electricityPack, ItemStack itemStack)
{
double electricityToUse = Math.min(getJoules(itemStack), electricityPack.getWatts());
setJoules(getJoules(itemStack) - electricityToUse, itemStack);
return ElectricityPack.getFromWatts(electricityToUse, getVoltage(itemStack));
}
@Override
public ElectricityPack getReceiveRequest(ItemStack itemStack)
{
return ElectricityPack.getFromWatts(Math.min(getMaxJoules(itemStack) - getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack));
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return ElectricityPack.getFromWatts(Math.min(getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack));
}
public double getTransferRate(ItemStack itemStack)
{
return getMaxTransfer(itemStack);
}
@Override
public String getUnlocalizedName(ItemStack itemstack)
@ -139,7 +87,7 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, II
{
TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z);
tileEntity.tier = ((IEnergyCube)stack.getItem()).getEnergyCubeTier(stack);
tileEntity.electricityStored = getJoules(stack);
tileEntity.electricityStored = getEnergy(stack);
((ISustainedInventory)tileEntity).setInventory(getInventory(stack));
@ -187,35 +135,45 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, II
@Override
public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
{
double energyNeeded = getMaxEnergy(itemStack)-getEnergy(itemStack);
double energyToStore = Math.min(Math.min(amount*Mekanism.FROM_IC2, getMaxEnergy(itemStack)*0.01), energyNeeded);
if(!simulate)
if(canReceive(itemStack))
{
setEnergy(itemStack, getEnergy(itemStack) + energyToStore);
double energyNeeded = getMaxEnergy(itemStack)-getEnergy(itemStack);
double energyToStore = Math.min(Math.min(amount*Mekanism.FROM_IC2, getMaxEnergy(itemStack)*0.01), energyNeeded);
if(!simulate)
{
setEnergy(itemStack, getEnergy(itemStack) + energyToStore);
}
return (int)(energyToStore*Mekanism.TO_IC2);
}
return (int)(energyToStore*Mekanism.TO_IC2);
return 0;
}
@Override
public int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
{
double energyWanted = amount*Mekanism.FROM_IC2;
double energyToGive = Math.min(Math.min(energyWanted, getMaxEnergy(itemStack)*0.01), getJoules(itemStack));
if(!simulate)
if(canSend(itemStack))
{
setJoules(getJoules(itemStack) - energyToGive, itemStack);
double energyWanted = amount*Mekanism.FROM_IC2;
double energyToGive = Math.min(Math.min(energyWanted, getMaxEnergy(itemStack)*0.01), getEnergy(itemStack));
if(!simulate)
{
setEnergy(itemStack, getEnergy(itemStack) - energyToGive);
}
return (int)(energyToGive*Mekanism.TO_IC2);
}
return (int)(energyToGive*Mekanism.TO_IC2);
return 0;
}
@Override
public boolean canUse(ItemStack itemStack, int amount)
{
return getJoules(itemStack) >= amount*Mekanism.FROM_IC2;
return getEnergy(itemStack) >= amount*Mekanism.FROM_IC2;
}
@Override
@ -316,7 +274,7 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, II
itemStack.setTagCompound(new NBTTagCompound());
}
double electricityStored = Math.max(Math.min(amount, getMaxJoules(itemStack)), 0);
double electricityStored = Math.max(Math.min(amount, getMaxEnergy(itemStack)), 0);
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
itemStack.setItemDamage((int)Math.max(1, (Math.abs(((electricityStored/getMaxEnergy(itemStack))*100)-100))));
}
@ -348,29 +306,39 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, II
@Override
public float receiveEnergy(ItemStack theItem, float energy, boolean doReceive)
{
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_BC, energyNeeded);
if(doReceive)
if(canReceive(theItem))
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_BC, energyNeeded);
if(doReceive)
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
}
return (float)(toReceive*Mekanism.TO_BC);
}
return (float)(toReceive*Mekanism.TO_BC);
return 0;
}
@Override
public float transferEnergy(ItemStack theItem, float energy, boolean doTransfer)
{
double energyRemaining = getEnergy(theItem);
double toSend = Math.min(energy*Mekanism.FROM_BC, energyRemaining);
if(doTransfer)
if(canSend(theItem))
{
setEnergy(theItem, getEnergy(theItem) - toSend);
double energyRemaining = getEnergy(theItem);
double toSend = Math.min(energy*Mekanism.FROM_BC, energyRemaining);
if(doTransfer)
{
setEnergy(theItem, getEnergy(theItem) - toSend);
}
return (float)(toSend*Mekanism.TO_BC);
}
return (float)(toSend*Mekanism.TO_BC);
return 0;
}
@Override
@ -390,4 +358,40 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, II
{
return false;
}
@Override
public float recharge(ItemStack itemStack, float energy, boolean doRecharge)
{
return receiveEnergy(itemStack, energy, doRecharge);
}
@Override
public float discharge(ItemStack itemStack, float energy, boolean doDischarge)
{
return transferEnergy(itemStack, energy, doDischarge);
}
@Override
public float getElectricityStored(ItemStack theItem)
{
return (float)getEnergy(theItem);
}
@Override
public float getMaxElectricityStored(ItemStack theItem)
{
return (float)getMaxEnergy(theItem);
}
@Override
public void setElectricity(ItemStack itemStack, float joules)
{
setEnergy(itemStack, joules);
}
@Override
public float getTransfer(ItemStack itemStack)
{
return (float)getMaxTransfer(itemStack);
}
}

View file

@ -151,7 +151,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
list.add(EnumColor.INDIGO + "Locked: " + EnumColor.GREY + getLocked(itemstack));
}
list.add(EnumColor.BRIGHT_GREEN + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort(getJoules(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.BRIGHT_GREEN + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort((float)getEnergy(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.BRIGHT_GREEN + "Voltage: " + EnumColor.GREY + getVoltage(itemstack) + "v");
if(hasTank(itemstack))
@ -176,60 +176,10 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
}
@Override
public double getJoules(ItemStack itemStack)
{
return getEnergy(itemStack);
}
@Override
public void setJoules(double wattHours, ItemStack itemStack)
{
setEnergy(itemStack, wattHours);
}
@Override
public double getMaxJoules(ItemStack itemStack)
{
return getMaxEnergy(itemStack);
}
@Override
public double getVoltage(ItemStack itemStack)
public float getVoltage(ItemStack itemStack)
{
return 120;
}
@Override
public ElectricityPack onReceive(ElectricityPack electricityPack, ItemStack itemStack)
{
double rejectedElectricity = Math.max((getJoules(itemStack) + electricityPack.getWatts()) - getMaxJoules(itemStack), 0);
double joulesToStore = electricityPack.getWatts() - rejectedElectricity;
this.setJoules(getJoules(itemStack) + joulesToStore, itemStack);
return ElectricityPack.getFromWatts(joulesToStore, getVoltage(itemStack));
}
@Override
public ElectricityPack onProvide(ElectricityPack electricityPack, ItemStack itemStack)
{
return new ElectricityPack();
}
@Override
public ElectricityPack getReceiveRequest(ItemStack itemStack)
{
return ElectricityPack.getFromWatts(Math.min(getMaxJoules(itemStack) - getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack));
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return new ElectricityPack();
}
public double getTransferRate(ItemStack itemStack)
{
return getMaxTransfer(itemStack);
}
@Override
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata)
@ -268,7 +218,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
((ISustainedInventory)tileEntity).setInventory(getInventory(stack));
tileEntity.electricityStored = getJoules(stack);
tileEntity.electricityStored = getEnergy(stack);
}
return place;
@ -277,15 +227,20 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
@Override
public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
{
double energyNeeded = getMaxEnergy(itemStack)-getEnergy(itemStack);
double energyToStore = Math.min(Math.min(amount*Mekanism.FROM_IC2, getMaxEnergy(itemStack)*0.01), energyNeeded);
if(!simulate)
if(canReceive(itemStack))
{
setEnergy(itemStack, getEnergy(itemStack) + energyToStore);
double energyNeeded = getMaxEnergy(itemStack)-getEnergy(itemStack);
double energyToStore = Math.min(Math.min(amount*Mekanism.FROM_IC2, getMaxEnergy(itemStack)*0.01), energyNeeded);
if(!simulate)
{
setEnergy(itemStack, getEnergy(itemStack) + energyToStore);
}
return (int)(energyToStore*Mekanism.TO_IC2);
}
return (int)(energyToStore*Mekanism.TO_IC2);
return 0;
}
@Override
@ -297,7 +252,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
@Override
public boolean canUse(ItemStack itemStack, int amount)
{
return getJoules(itemStack) >= amount*Mekanism.FROM_IC2;
return getEnergy(itemStack) >= amount*Mekanism.FROM_IC2;
}
@Override
@ -477,7 +432,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
{
PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketElectricChest().setParams(ElectricChestPacketType.CLIENT_OPEN, 2, 0, false), entityplayer);
}
else if(getLocked(itemstack) && getJoules(itemstack) > 0)
else if(getLocked(itemstack) && getEnergy(itemstack) > 0)
{
PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketElectricChest().setParams(ElectricChestPacketType.CLIENT_OPEN, 1, 0, false), entityplayer);
}
@ -758,7 +713,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
itemStack.setTagCompound(new NBTTagCompound());
}
double electricityStored = Math.max(Math.min(amount, getMaxJoules(itemStack)), 0);
double electricityStored = Math.max(Math.min(amount, getMaxEnergy(itemStack)), 0);
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
}
@ -789,15 +744,20 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
@Override
public float receiveEnergy(ItemStack theItem, float energy, boolean doReceive)
{
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_BC, energyNeeded);
if(doReceive)
if(canReceive(theItem))
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_BC, energyNeeded);
if(doReceive)
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
}
return (float)(toReceive*Mekanism.TO_BC);
}
return (float)(toReceive*Mekanism.TO_BC);
return 0;
}
@Override
@ -823,4 +783,40 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, IItem
{
return true;
}
@Override
public float recharge(ItemStack itemStack, float energy, boolean doRecharge)
{
return receiveEnergy(itemStack, energy, doRecharge);
}
@Override
public float discharge(ItemStack itemStack, float energy, boolean doDischarge)
{
return transferEnergy(itemStack, energy, doDischarge);
}
@Override
public float getElectricityStored(ItemStack theItem)
{
return (float)getEnergy(theItem);
}
@Override
public float getMaxElectricityStored(ItemStack theItem)
{
return (float)getMaxEnergy(theItem);
}
@Override
public void setElectricity(ItemStack itemStack, float joules)
{
setEnergy(itemStack, joules);
}
@Override
public float getTransfer(ItemStack itemStack)
{
return (float)getMaxTransfer(itemStack);
}
}

View file

@ -99,13 +99,17 @@ public class ItemConfigurator extends ItemEnergized
if(!(tileEntity instanceof TileEntityElectricChest) || (((TileEntityElectricChest)tileEntity).canAccess()))
{
for(int i = 0; i < tileEntity.getSizeInventory(); ++i)
for(int i = 0; i < tileEntity.getSizeInventory(); i++)
{
ItemStack slotStack = tileEntity.getStackInSlot(i);
itemAmount += slotStack != null ? slotStack.stackSize : 0;
if(slotStack != null)
{
if(getEnergy(stack) < ENERGY_PER_ITEM_DUMP)
{
break;
}
float xRandom = random.nextFloat() * 0.8F + 0.1F;
float yRandom = random.nextFloat() * 0.8F + 0.1F;
float zRandom = random.nextFloat() * 0.8F + 0.1F;
@ -132,12 +136,13 @@ public class ItemConfigurator extends ItemEnergized
item.motionY = random.nextGaussian() * k + 0.2F;
item.motionZ = random.nextGaussian() * k;
world.spawnEntityInWorld(item);
tileEntity.inventory[i] = null;
setEnergy(stack, getEnergy(stack) - ENERGY_PER_ITEM_DUMP);
}
}
}
tileEntity.inventory = new ItemStack[tileEntity.getSizeInventory()];
onProvide(new ElectricityPack((ENERGY_PER_ITEM_DUMP*itemAmount)/120, 120), stack);
return true;
}
else {
@ -233,12 +238,6 @@ public class ItemConfigurator extends ItemEnergized
return state;
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return new ElectricityPack();
}
@Override
public boolean canSend(ItemStack itemStack)

View file

@ -141,12 +141,6 @@ public class ItemElectricBow extends ItemEnergized
return state;
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return new ElectricityPack();
}
@Override
public boolean canSend(ItemStack itemStack)

View file

@ -23,9 +23,9 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, IItem
public double MAX_ELECTRICITY;
/** How fast this item can transfer energy. */
public double VOLTAGE;
public float VOLTAGE;
public ItemEnergized(int id, double maxElectricity, double voltage)
public ItemEnergized(int id, double maxElectricity, float voltage)
{
super(id);
MAX_ELECTRICITY = maxElectricity;
@ -39,7 +39,7 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, IItem
@Override
public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag)
{
list.add(EnumColor.AQUA + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort(getJoules(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.AQUA + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort((float)getEnergy(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.AQUA + "Voltage: " + EnumColor.GREY + getVoltage(itemstack) + "v");
}
@ -63,100 +63,58 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, IItem
discharged.setItemDamage(100);
list.add(discharged);
ItemStack charged = new ItemStack(this);
setJoules(((IItemElectric)charged.getItem()).getMaxJoules(charged), charged);
setEnergy(charged, ((IEnergizedItem)charged.getItem()).getMaxEnergy(charged));
list.add(charged);
}
@Override
public double getJoules(ItemStack itemStack)
{
return getEnergy(itemStack);
}
@Override
public void setJoules(double wattHours, ItemStack itemStack)
{
setEnergy(itemStack, wattHours);
}
@Override
public double getMaxJoules(ItemStack itemStack)
{
return getMaxEnergy(itemStack);
}
@Override
public double getVoltage(ItemStack itemStack)
public float getVoltage(ItemStack itemStack)
{
return VOLTAGE;
}
@Override
public ElectricityPack onReceive(ElectricityPack electricityPack, ItemStack itemStack)
{
double rejectedElectricity = Math.max((getJoules(itemStack) + electricityPack.getWatts()) - getMaxJoules(itemStack), 0);
double joulesToStore = electricityPack.getWatts() - rejectedElectricity;
this.setJoules(getJoules(itemStack) + joulesToStore, itemStack);
return ElectricityPack.getFromWatts(joulesToStore, getVoltage(itemStack));
}
@Override
public ElectricityPack onProvide(ElectricityPack electricityPack, ItemStack itemStack)
{
double electricityToUse = Math.min(getJoules(itemStack), electricityPack.getWatts());
setJoules(getJoules(itemStack) - electricityToUse, itemStack);
return ElectricityPack.getFromWatts(electricityToUse, getVoltage(itemStack));
}
@Override
public ElectricityPack getReceiveRequest(ItemStack itemStack)
{
return ElectricityPack.getFromWatts(Math.min(getMaxJoules(itemStack) - getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack));
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return ElectricityPack.getFromWatts(Math.min(getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack));
}
public double getTransferRate(ItemStack itemStack)
{
return getMaxTransfer(itemStack);
}
@Override
public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
{
double energyNeeded = getMaxEnergy(itemStack)-getEnergy(itemStack);
double energyToStore = Math.min(Math.min(amount*Mekanism.FROM_IC2, getMaxEnergy(itemStack)*0.01), energyNeeded);
if(!simulate)
if(canReceive(itemStack))
{
setEnergy(itemStack, getEnergy(itemStack) + energyToStore);
double energyNeeded = getMaxEnergy(itemStack)-getEnergy(itemStack);
double energyToStore = Math.min(Math.min(amount*Mekanism.FROM_IC2, getMaxEnergy(itemStack)*0.01), energyNeeded);
if(!simulate)
{
setEnergy(itemStack, getEnergy(itemStack) + energyToStore);
}
return (int)(energyToStore*Mekanism.TO_IC2);
}
return (int)(energyToStore*Mekanism.TO_IC2);
return 0;
}
@Override
public int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
{
double energyWanted = amount*Mekanism.FROM_IC2;
double energyToGive = Math.min(Math.min(energyWanted, getMaxEnergy(itemStack)*0.01), getJoules(itemStack));
if(!simulate)
if(canSend(itemStack))
{
setJoules(getJoules(itemStack) - energyToGive, itemStack);
double energyWanted = amount*Mekanism.FROM_IC2;
double energyToGive = Math.min(Math.min(energyWanted, getMaxEnergy(itemStack)*0.01), getEnergy(itemStack));
if(!simulate)
{
setEnergy(itemStack, getEnergy(itemStack) - energyToGive);
}
return (int)(energyToGive*Mekanism.TO_IC2);
}
return (int)(energyToGive*Mekanism.TO_IC2);
return 0;
}
@Override
public boolean canUse(ItemStack itemStack, int amount)
{
return getJoules(itemStack) >= amount*Mekanism.FROM_IC2;
return getEnergy(itemStack) >= amount*Mekanism.FROM_IC2;
}
@Override
@ -223,7 +181,7 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, IItem
itemStack.setTagCompound(new NBTTagCompound());
}
double electricityStored = Math.max(Math.min(amount, getMaxJoules(itemStack)), 0);
double electricityStored = Math.max(Math.min(amount, getMaxEnergy(itemStack)), 0);
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
itemStack.setItemDamage((int)Math.max(1, (Math.abs(((electricityStored/getMaxEnergy(itemStack))*100)-100))));
}
@ -255,29 +213,39 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, IItem
@Override
public float receiveEnergy(ItemStack theItem, float energy, boolean doReceive)
{
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_BC, energyNeeded);
if(doReceive)
if(canReceive(theItem))
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_BC, energyNeeded);
if(doReceive)
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
}
return (float)(toReceive*Mekanism.TO_BC);
}
return (float)(toReceive*Mekanism.TO_BC);
return 0;
}
@Override
public float transferEnergy(ItemStack theItem, float energy, boolean doTransfer)
{
double energyRemaining = getEnergy(theItem);
double toSend = Math.min(energy*Mekanism.FROM_BC, energyRemaining);
if(doTransfer)
if(canSend(theItem))
{
setEnergy(theItem, getEnergy(theItem) - toSend);
double energyRemaining = getEnergy(theItem);
double toSend = Math.min(energy*Mekanism.FROM_BC, energyRemaining);
if(doTransfer)
{
setEnergy(theItem, getEnergy(theItem) - toSend);
}
return (float)(toSend*Mekanism.TO_BC);
}
return (float)(toSend*Mekanism.TO_BC);
return 0;
}
@Override
@ -297,4 +265,40 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, IItem
{
return false;
}
@Override
public float recharge(ItemStack itemStack, float energy, boolean doRecharge)
{
return receiveEnergy(itemStack, energy, doRecharge);
}
@Override
public float discharge(ItemStack itemStack, float energy, boolean doDischarge)
{
return transferEnergy(itemStack, energy, doDischarge);
}
@Override
public float getElectricityStored(ItemStack theItem)
{
return (float)getEnergy(theItem);
}
@Override
public float getMaxElectricityStored(ItemStack theItem)
{
return (float)getMaxEnergy(theItem);
}
@Override
public void setElectricity(ItemStack itemStack, float joules)
{
setEnergy(itemStack, joules);
}
@Override
public float getTransfer(ItemStack itemStack)
{
return (float)getMaxTransfer(itemStack);
}
}

View file

@ -39,8 +39,8 @@ public class ItemEnergyMeter extends ItemEnergized
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " -------------"));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Cables: " + EnumColor.DARK_GREY + cable.getNetwork().cables.size()));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Acceptors: " + EnumColor.DARK_GREY + cable.getNetwork().possibleAcceptors.size()));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Needed energy: " + EnumColor.DARK_GREY + ElectricityDisplay.getDisplay(cable.getNetwork().getEnergyNeeded(new ArrayList()), ElectricUnit.JOULES)));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Power: " + EnumColor.DARK_GREY + ElectricityDisplay.getDisplay(cable.getNetwork().getPower(), ElectricUnit.WATT)));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Needed energy: " + EnumColor.DARK_GREY + ElectricityDisplay.getDisplay((float)cable.getNetwork().getEnergyNeeded(new ArrayList()), ElectricUnit.JOULES)));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Power: " + EnumColor.DARK_GREY + ElectricityDisplay.getDisplay((float)cable.getNetwork().getPower(), ElectricUnit.WATT)));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[=======]" + EnumColor.GREY + " -------------"));
}
}

View file

@ -103,12 +103,6 @@ public class ItemPortableTeleporter extends ItemEnergized
itemstack.stackTagCompound.setInteger("digit"+index, digit);
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return new ElectricityPack();
}
@Override
public boolean canSend(ItemStack itemStack)
{

View file

@ -25,12 +25,6 @@ public class ItemRobit extends ItemEnergized implements ISustainedInventory
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister register) {}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return new ElectricityPack();
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag)

View file

@ -10,7 +10,6 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import thermalexpansion.api.crafting.CraftingManagers;
import thermalexpansion.api.crafting.IPulverizerRecipe;
import universalelectricity.prefab.RecipeHelper;
import cpw.mods.fml.common.Loader;
/**
@ -97,14 +96,14 @@ public final class MekanismHooks
{
if(Mekanism.disableBCSteelCrafting)
{
RecipeHelper.removeRecipes(getBasicComponentsItem("itemSteelDust"));
RecipeHelper.removeRecipes(getBasicComponentsItem("itemSteelIngot"));
MekanismUtils.removeRecipes(getBasicComponentsItem("itemSteelDust"));
MekanismUtils.removeRecipes(getBasicComponentsItem("itemSteelIngot"));
}
if(Mekanism.disableBCBronzeCrafting)
{
RecipeHelper.removeRecipes(getBasicComponentsItem("itemBronzeDust"));
RecipeHelper.removeRecipes(getBasicComponentsItem("itemBronzeIngot"));
MekanismUtils.removeRecipes(getBasicComponentsItem("itemBronzeDust"));
MekanismUtils.removeRecipes(getBasicComponentsItem("itemBronzeIngot"));
}
System.out.println("[Mekanism] Hooked into BasicComponents successfully.");

View file

@ -1,6 +1,7 @@
package mekanism.common;
import ic2.api.Direction;
import ic2.api.item.IElectricItem;
import java.io.BufferedReader;
import java.io.IOException;
@ -9,6 +10,7 @@ import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import mekanism.api.EnumColor;
import mekanism.api.IConfigurable;
@ -23,8 +25,10 @@ import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.network.packet.Packet3Chat;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
@ -38,6 +42,7 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
import universalelectricity.core.item.IItemElectric;
import cpw.mods.fml.common.network.PacketDispatcher;
import cpw.mods.fml.server.FMLServerHandler;
@ -632,11 +637,11 @@ public final class MekanismUtils
if((id == Block.waterStill.blockID || id == Block.waterMoving.blockID) && meta == 0)
{
return new FluidStack(Block.waterStill.blockID, FluidContainerRegistry.BUCKET_VOLUME);
return new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME);
}
else if((id == Block.lavaStill.blockID || id == Block.lavaMoving.blockID) && meta == 0)
{
return new FluidStack(Block.lavaStill.blockID, FluidContainerRegistry.BUCKET_VOLUME);
return new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME);
}
else if(Block.blocksList[id] instanceof IFluidBlock)
{
@ -867,6 +872,66 @@ public final class MekanismUtils
return new ResourceLocation("mekanism", type.getPrefix() + name);
}
public static boolean canBeDischarged(ItemStack itemstack)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).discharge(itemstack, 1, false) != 0) ||
itemstack.itemID == Item.redstone.itemID;
}
public static boolean canBeCharged(ItemStack itemstack)
{
return itemstack.getItem() instanceof IElectricItem ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).recharge(itemstack, 1, false) != 0);
}
public static boolean canBeOutputted(ItemStack itemstack, boolean chargeSlot)
{
if(chargeSlot)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).recharge(itemstack, 1, false) == 0) ||
(itemstack.getItem() instanceof IElectricItem && (!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).recharge(itemstack, 1, false) == 0));
}
else {
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).discharge(itemstack, 1, false) == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).discharge(itemstack, 1, false) == 0));
}
}
public static boolean removeRecipes(ItemStack... itemStacks)
{
boolean didRemove = false;
for(Iterator itr = CraftingManager.getInstance().getRecipeList().iterator(); itr.hasNext();)
{
Object obj = itr.next();
if(obj != null)
{
if(obj instanceof IRecipe)
{
if(((IRecipe)obj).getRecipeOutput() != null)
{
for(ItemStack itemStack : itemStacks)
{
if(((IRecipe)obj).getRecipeOutput().isItemEqual(itemStack))
{
itr.remove();
didRemove = true;
break;
}
}
}
}
}
}
return didRemove;
}
public static enum ResourceType
{
GUI("gui"),

View file

@ -19,8 +19,7 @@ public class SlotEnergy
@Override
public boolean isItemValid(ItemStack itemstack)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).amperes != 0) ||
itemstack.getItem() instanceof IElectricItem;
return MekanismUtils.canBeCharged(itemstack);
}
}
@ -34,9 +33,7 @@ public class SlotEnergy
@Override
public boolean isItemValid(ItemStack itemstack)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
}
}

View file

@ -22,7 +22,7 @@ public final class Tier
ULTIMATE("Ultimate", 128000000, 480, 51200);
public double MAX_ELECTRICITY;
public double VOLTAGE;
public float VOLTAGE;
public double OUTPUT;
public String name;
@ -40,7 +40,7 @@ public final class Tier
return BASIC;
}
private EnergyCubeTier(String s, double maxEnergy, double voltage, int out)
private EnergyCubeTier(String s, double maxEnergy, float voltage, int out)
{
name = s;
MAX_ELECTRICITY = maxEnergy;

View file

@ -203,9 +203,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM
}
else if(slotID == 3)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
else if(slotID == 1)
{
@ -319,10 +317,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM
{
if(slotID == 3)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 2)
{

View file

@ -175,12 +175,6 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp
}
}
@Override
public int getMaxSafeInput()
{
return 2048;
}
@Override
public int demandsEnergy()
{
@ -323,6 +317,12 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp
return (int)Math.min(((MekanismUtils.getEnergy(energyMultiplier, MAX_ELECTRICITY)-electricityStored)*Mekanism.TO_BC), 100);
}
@Override
public int getMaxSafeInput()
{
return 2048;
}
@Override
public ArrayList<SideData> getSideData()
{

View file

@ -130,7 +130,7 @@ public class TileEntityChargepad extends TileEntityElectricBlock implements IAct
}
else if(itemstack.getItem() instanceof IItemElectric)
{
setEnergy(getEnergy() - ElectricItemHelper.chargeItem(itemstack, getEnergy(), getVoltage()));
setEnergy(getEnergy() - ElectricItemHelper.chargeItem(itemstack, (float)getEnergy()));
}
else if(Mekanism.hooks.IC2Loaded && itemstack.getItem() instanceof IElectricItem)
{

View file

@ -13,16 +13,15 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import universalelectricity.core.block.IConnector;
import universalelectricity.core.block.IElectricityStorage;
import universalelectricity.core.block.IVoltage;
import universalelectricity.core.electricity.ElectricityNetworkHelper;
import universalelectricity.core.block.IElectrical;
import universalelectricity.core.block.IElectricalStorage;
import universalelectricity.core.electricity.ElectricityPack;
import buildcraft.api.power.IPowerProvider;
import buildcraft.api.power.IPowerReceptor;
import com.google.common.io.ByteArrayDataInput;
public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IWrenchable, ITileNetwork, IPowerReceptor, IEnergyTile, IElectricityStorage, IVoltage, IConnector, IStrictEnergyStorage
public abstract class TileEntityElectricBlock extends TileEntityContainerBlock implements IWrenchable, ITileNetwork, IPowerReceptor, IEnergyTile, IElectrical, IElectricalStorage, IConnector, IStrictEnergyStorage
{
/** How much energy is stored in this block. */
public double electricityStored;
@ -60,12 +59,6 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
initialized = true;
}
if(!worldObj.isRemote)
{
ElectricityPack electricityPack = ElectricityNetworkHelper.consumeFromMultipleSides(this, getConsumingSides(), getRequest());
setEnergy(getEnergy()+electricityPack.getWatts());
}
}
protected EnumSet<ForgeDirection> getConsumingSides()
@ -73,15 +66,15 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
return EnumSet.allOf(ForgeDirection.class);
}
protected EnumSet<ForgeDirection> getOutputtingSides()
{
return EnumSet.noneOf(ForgeDirection.class);
}
@Override
public boolean canConnect(ForgeDirection direction)
{
return true;
}
public ElectricityPack getRequest()
{
return new ElectricityPack((getMaxEnergy() - getEnergy()) / getVoltage(), getVoltage());
return getConsumingSides().contains(direction) || getOutputtingSides().contains(direction);
}
@Override
@ -103,25 +96,7 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
}
@Override
public double getMaxJoules()
{
return getMaxEnergy();
}
@Override
public double getJoules()
{
return getEnergy();
}
@Override
public void setJoules(double joules)
{
setEnergy(joules);
}
@Override
public double getVoltage()
public float getVoltage()
{
return 120;
}
@ -144,8 +119,6 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
@Override
public void invalidate()
{
ElectricityNetworkHelper.invalidate(this);
if(initialized && !worldObj.isRemote)
{
if(Mekanism.hooks.IC2Loaded)
@ -191,9 +164,68 @@ public abstract class TileEntityElectricBlock extends TileEntityContainerBlock i
@Override
public int powerRequest(ForgeDirection side)
{
return (int)Math.min(((MAX_ELECTRICITY-electricityStored)*Mekanism.TO_BC), 100);
return (int)Math.min(((getMaxEnergy()-getEnergy())*Mekanism.TO_BC), 100);
}
@Override
public void doWork() {}
@Override
public float receiveElectricity(ForgeDirection from, ElectricityPack receive, boolean doReceive)
{
if(getConsumingSides().contains(from))
{
float toAdd = (float)Math.min(getMaxEnergy()-getEnergy(), receive.getWatts());
if(doReceive)
{
setEnergy(getEnergy() + toAdd);
}
return toAdd;
}
return 0;
}
@Override
public ElectricityPack provideElectricity(ForgeDirection from, ElectricityPack request, boolean doProvide)
{
return null;
}
@Override
public float getRequest(ForgeDirection direction)
{
if(getConsumingSides().contains(direction))
{
return (float)(getMaxEnergy()-getEnergy());
}
return 0;
}
@Override
public float getProvide(ForgeDirection direction)
{
return 0;
}
@Override
public void setEnergyStored(float energy)
{
setEnergy(energy);
}
@Override
public float getEnergyStored()
{
return (float)getEnergy();
}
@Override
public float getMaxEnergyStored()
{
return (float)getMaxEnergy();
}
}

View file

@ -126,9 +126,7 @@ public class TileEntityElectricChest extends TileEntityElectricBlock
{
if(slotID == 54)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
else {
return true;
@ -164,10 +162,7 @@ public class TileEntityElectricChest extends TileEntityElectricBlock
{
if(slotID == 54)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else {
return true;

View file

@ -142,10 +142,9 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine
}
else if(slotID == 1)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
return true;
}
@ -202,10 +201,7 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine
{
if(slotID == 1)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 2)
{

View file

@ -402,10 +402,9 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
}
else if(slotID == 2)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
return true;
}
@ -414,10 +413,7 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I
{
if(slotID == 2)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 1)
{

View file

@ -6,7 +6,6 @@ import ic2.api.energy.tile.IEnergyAcceptor;
import ic2.api.energy.tile.IEnergyConductor;
import ic2.api.energy.tile.IEnergySink;
import ic2.api.energy.tile.IEnergySource;
import ic2.api.item.IElectricItem;
import ic2.api.tile.IEnergyStorage;
import java.util.ArrayList;
@ -17,7 +16,6 @@ import mekanism.api.ICableOutputter;
import mekanism.api.IStrictEnergyAcceptor;
import mekanism.api.Object3D;
import mekanism.common.Tier.EnergyCubeTier;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@ -25,11 +23,10 @@ import net.minecraft.util.MathHelper;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.block.IElectricityStorage;
import universalelectricity.core.block.IVoltage;
import universalelectricity.core.electricity.ElectricityNetworkHelper;
import universalelectricity.core.electricity.IElectricityNetwork;
import universalelectricity.core.item.IItemElectric;
import universalelectricity.core.block.IElectricalStorage;
import universalelectricity.core.electricity.ElectricityHelper;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.grid.IElectricityNetwork;
import buildcraft.api.power.IPowerProvider;
import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerProvider;
@ -39,7 +36,7 @@ import com.google.common.io.ByteArrayDataInput;
import dan200.computer.api.IComputerAccess;
import dan200.computer.api.IPeripheral;
public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEnergySink, IEnergySource, IEnergyStorage, IPowerReceptor, IElectricityStorage, IVoltage, IPeripheral, ICableOutputter, IStrictEnergyAcceptor
public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEnergySink, IEnergySource, IEnergyStorage, IPowerReceptor, IPeripheral, ICableOutputter, IStrictEnergyAcceptor
{
/** This Energy Cube's tier. */
public EnergyCubeTier tier = EnergyCubeTier.BASIC;
@ -100,37 +97,24 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn
if(tileEntity instanceof IConductor)
{
ForgeDirection outputDirection = ForgeDirection.getOrientation(facing);
ArrayList<IElectricityNetwork> inputNetworks = new ArrayList<IElectricityNetwork>();
for(ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
float provide = getProvide(outputDirection);
if(provide > 0)
{
if(direction != outputDirection)
IElectricityNetwork outputNetwork = ElectricityHelper.getNetworkFromTileEntity(tileEntity, outputDirection);
if(outputNetwork != null)
{
IElectricityNetwork network = ElectricityNetworkHelper.getNetworkFromTileEntity(Object3D.get(this).getFromSide(direction).getTileEntity(worldObj), direction);
ElectricityPack request = outputNetwork.getRequest(this);
if(network != null)
if(request.getWatts() > 0)
{
inputNetworks.add(network);
ElectricityPack sendPack = ElectricityPack.min(ElectricityPack.getFromWatts(getEnergyStored(), getVoltage()), ElectricityPack.getFromWatts(provide, getVoltage()));
float rejectedPower = outputNetwork.produce(sendPack, this);
setEnergyStored(getEnergyStored() - (sendPack.getWatts() - rejectedPower));
}
}
}
IElectricityNetwork outputNetwork = ElectricityNetworkHelper.getNetworkFromTileEntity(tileEntity, outputDirection);
if(outputNetwork != null && !inputNetworks.contains(outputNetwork))
{
double outputWatts = Math.min(outputNetwork.getRequest().getWatts(), Math.min(getEnergy(), 10000));
if(getEnergy() > 0 && outputWatts > 0 && getEnergy()-outputWatts >= 0)
{
outputNetwork.startProducing(this, Math.min(outputWatts, getEnergy()) / getVoltage(), getVoltage());
setEnergy(electricityStored - outputWatts);
}
else {
outputNetwork.stopProducing(this);
}
}
}
}
}
@ -140,15 +124,13 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn
{
if(slotID == 0)
{
return itemstack.getItem() instanceof IElectricItem ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).amperes != 0);
return MekanismUtils.canBeCharged(itemstack);
}
else if(slotID == 1)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
return true;
}
@ -167,12 +149,24 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn
return EnumSet.copyOf(set);
}
@Override
protected EnumSet<ForgeDirection> getOutputtingSides()
{
return EnumSet.of(ForgeDirection.getOrientation(facing));
}
@Override
public boolean acceptsEnergyFrom(TileEntity emitter, Direction direction)
{
return direction.toForgeDirection() != ForgeDirection.getOrientation(facing);
}
@Override
public float getProvide(ForgeDirection direction)
{
return getOutputtingSides().contains(direction) ? (float)Math.min(getMaxEnergy()-getEnergy(), tier.OUTPUT) : 0;
}
@Override
public int getStored()
@ -271,23 +265,18 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn
{
if(slotID == 1)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 0)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && (!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, true);
}
return false;
}
@Override
public double getVoltage()
public float getVoltage()
{
return tier.VOLTAGE;
}

View file

@ -287,10 +287,7 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg
{
if(slotID == 1)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else if(tier == FactoryTier.BASIC && slotID >= 7 && slotID <= 9)
{
@ -351,10 +348,9 @@ public class TileEntityFactory extends TileEntityElectricBlock implements IEnerg
}
else if(slotID == 1)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
return true;
}

View file

@ -221,10 +221,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
{
if(slotID == 4)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 3)
{
@ -271,10 +268,9 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
}
else if(slotID == 4)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
return true;
}

View file

@ -105,9 +105,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IEn
{
if(slotID == 0)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
return true;
@ -363,9 +361,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IEn
@Override
public boolean canExtractItem(int slotID, ItemStack itemstack, int side)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && (!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
@Override

View file

@ -44,7 +44,7 @@ public class PacketPortableTeleport implements IMekanismPacket
{
Object3D coords = MekanismUtils.getClosestCoords(new Teleporter.Code(item.getDigit(itemstack, 0), item.getDigit(itemstack, 1), item.getDigit(itemstack, 2), item.getDigit(itemstack, 3)), player);
item.onProvide(new ElectricityPack(item.calculateEnergyCost(player, coords)/120, 120), itemstack);
item.setEnergy(itemstack, item.getEnergy(itemstack) - item.calculateEnergyCost(player, coords));
if(world.provider.dimensionId != coords.dimensionId)
{

View file

@ -37,13 +37,13 @@ public class GuiBioGenerator extends GuiContainer
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString("BioFuel: " + tileEntity.bioFuelSlot.fluidStored, 51, 35, 0x00CD00);
fontRenderer.drawString(tileEntity.getVoltage() + "v", 51, 44, 0x00CD00);
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -106,7 +106,7 @@ public class GuiElectrolyticSeparator extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -38,13 +38,13 @@ public class GuiHeatGenerator extends GuiContainer
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString("Fuel: " + (tileEntity.lavaTank.getFluid() != null ? tileEntity.lavaTank.getFluid().amount : 0), 51, 35, 0x00CD00);
fontRenderer.drawString(tileEntity.getVoltage() + "v", 51, 44, 0x00CD00);
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -38,13 +38,13 @@ public class GuiHydrogenGenerator extends GuiContainer
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString("H: " + tileEntity.hydrogenStored, 51, 35, 0x00CD00);
fontRenderer.drawString(tileEntity.getVoltage() + "v", 51, 44, 0x00CD00);
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -38,13 +38,13 @@ public class GuiSolarGenerator extends GuiContainer
fontRenderer.drawString(tileEntity.fullName, tileEntity.fullName != "Advanced Solar Generator" ? 45 : 30, 6, 0x404040);
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString("Sun: " + tileEntity.seesSun, 51, 35, 0x00CD00);
fontRenderer.drawString(tileEntity.getVoltage() + "v", 51, 44, 0x00CD00);
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -39,7 +39,7 @@ public class GuiWindTurbine extends GuiContainer
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), 51, 26, 0x00CD00);
fontRenderer.drawString("Power: " + MekanismGenerators.windGeneration*tileEntity.getMultiplier(), 51, 35, 0x00CD00);
fontRenderer.drawString(tileEntity.getVoltage() + "v", 51, 44, 0x00CD00);
@ -53,7 +53,7 @@ public class GuiWindTurbine extends GuiContainer
if(xAxis >= 165 && xAxis <= 169 && yAxis >= 17 && yAxis <= 69)
{
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort(tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
drawCreativeTabHoveringText(ElectricityDisplay.getDisplayShort((float)tileEntity.electricityStored, ElectricUnit.JOULES), xAxis, yAxis);
}
}

View file

@ -30,7 +30,6 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.prefab.implement.IToolConfigurator;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -364,33 +363,7 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds
if(entityplayer.getCurrentEquippedItem() != null)
{
if(entityplayer.getCurrentEquippedItem().getItem() instanceof IToolConfigurator)
{
((IToolConfigurator)entityplayer.getCurrentEquippedItem().getItem()).wrenchUsed(entityplayer, x, y, z);
int change = 0;
switch(tileEntity.facing)
{
case 3:
change = 5;
break;
case 5:
change = 2;
break;
case 2:
change = 4;
break;
case 4:
change = 3;
break;
}
tileEntity.setFacing((short)change);
world.notifyBlocksOfNeighborChange(x, y, z, blockID);
return true;
}
else if(entityplayer.getCurrentEquippedItem().getItem() instanceof IToolWrench && !entityplayer.getCurrentEquippedItem().getItemName().contains("omniwrench"))
if(entityplayer.getCurrentEquippedItem().getItem() instanceof IToolWrench && !entityplayer.getCurrentEquippedItem().getItemName().contains("omniwrench"))
{
if(entityplayer.isSneaking())
{

View file

@ -2,6 +2,7 @@ package mekanism.generators.common;
import ic2.api.item.IElectricItem;
import mekanism.common.Mekanism;
import mekanism.common.MekanismUtils;
import mekanism.common.SlotEnergy.SlotCharge;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
@ -63,11 +64,11 @@ public class ContainerBioGenerator extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || slotStack.getItem() instanceof IElectricItem)
if(MekanismUtils.canBeCharged(slotStack))
{
if(slotID != 1)
{
if (!mergeItemStack(slotStack, 1, 2, false))
if(!mergeItemStack(slotStack, 1, 2, false))
{
return null;
}

View file

@ -1,20 +1,18 @@
package mekanism.generators.common;
import ic2.api.item.IElectricItem;
import mekanism.api.EnumGas;
import mekanism.api.IStorageTank;
import mekanism.common.MekanismUtils;
import mekanism.common.SlotEnergy.SlotDischarge;
import mekanism.common.SlotStorageTank;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import universalelectricity.core.item.IItemElectric;
public class ContainerElectrolyticSeparator extends Container
{
@ -107,7 +105,7 @@ public class ContainerElectrolyticSeparator extends Container
}
}
}
else if((slotStack.getItem() instanceof IElectricItem && ((IElectricItem)slotStack.getItem()).canProvideEnergy(slotStack)) || (slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getProvideRequest(slotStack).amperes != 0) || slotStack.itemID == Item.redstone.itemID)
else if(MekanismUtils.canBeDischarged(slotStack))
{
if(!mergeItemStack(slotStack, 3, 4, false))
{

View file

@ -1,6 +1,7 @@
package mekanism.generators.common;
import ic2.api.item.IElectricItem;
import mekanism.common.MekanismUtils;
import mekanism.common.SlotEnergy.SlotCharge;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
@ -62,7 +63,7 @@ public class ContainerHeatGenerator extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || slotStack.getItem() instanceof IElectricItem)
if(MekanismUtils.canBeCharged(slotStack))
{
if(slotID != 1)
{

View file

@ -3,6 +3,7 @@ package mekanism.generators.common;
import ic2.api.item.IElectricItem;
import mekanism.api.EnumGas;
import mekanism.api.IStorageTank;
import mekanism.common.MekanismUtils;
import mekanism.common.SlotEnergy.SlotCharge;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
@ -64,11 +65,11 @@ public class ContainerHydrogenGenerator extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || slotStack.getItem() instanceof IElectricItem)
if(MekanismUtils.canBeCharged(slotStack))
{
if(slotID != 1)
{
if (!mergeItemStack(slotStack, 1, 2, false))
if(!mergeItemStack(slotStack, 1, 2, false))
{
return null;
}

View file

@ -1,13 +1,12 @@
package mekanism.generators.common;
import ic2.api.item.IElectricItem;
import mekanism.common.MekanismUtils;
import mekanism.common.SlotEnergy.SlotCharge;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import universalelectricity.core.item.IItemElectric;
public class ContainerSolarGenerator extends Container
{
@ -61,11 +60,11 @@ public class ContainerSolarGenerator extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || slotStack.getItem() instanceof IElectricItem)
if(MekanismUtils.canBeCharged(slotStack))
{
if(slotID != 0)
{
if (!mergeItemStack(slotStack, 0, 1, false))
if(!mergeItemStack(slotStack, 0, 1, false))
{
return null;
}

View file

@ -1,6 +1,7 @@
package mekanism.generators.common;
import ic2.api.item.IElectricItem;
import mekanism.common.MekanismUtils;
import mekanism.common.SlotEnergy.SlotCharge;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
@ -61,11 +62,11 @@ public class ContainerWindTurbine extends Container
ItemStack slotStack = currentSlot.getStack();
stack = slotStack.copy();
if((slotStack.getItem() instanceof IItemElectric && ((IItemElectric)slotStack.getItem()).getReceiveRequest(slotStack).amperes != 0) || slotStack.getItem() instanceof IElectricItem)
if(MekanismUtils.canBeCharged(slotStack))
{
if(slotID != 0)
{
if (!mergeItemStack(slotStack, 0, 1, false))
if(!mergeItemStack(slotStack, 0, 1, false))
{
return null;
}

View file

@ -111,7 +111,7 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
list.add("Hold " + EnumColor.AQUA + "shift" + EnumColor.GREY + " for details.");
}
else {
list.add(EnumColor.BRIGHT_GREEN + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort(getJoules(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.BRIGHT_GREEN + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort((float)getEnergy(itemstack), ElectricUnit.JOULES));
list.add(EnumColor.BRIGHT_GREEN + "Voltage: " + EnumColor.GREY + getVoltage(itemstack) + "v");
if(hasTank(itemstack))
@ -127,72 +127,10 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
}
@Override
public double getJoules(ItemStack itemStack)
{
return getEnergy(itemStack);
}
@Override
public void setJoules(double wattHours, ItemStack itemStack)
{
setEnergy(itemStack, wattHours);
}
@Override
public double getMaxJoules(ItemStack itemStack)
{
return getMaxEnergy(itemStack);
}
@Override
public double getVoltage(ItemStack itemStack)
public float getVoltage(ItemStack itemStack)
{
return itemStack.getItemDamage() == 3 ? 240 : 120;
}
@Override
public ElectricityPack onReceive(ElectricityPack electricityPack, ItemStack itemStack)
{
if(itemStack.getItemDamage() == 2)
{
double rejectedElectricity = Math.max((getJoules(itemStack) + electricityPack.getWatts()) - getMaxJoules(itemStack), 0);
double joulesToStore = electricityPack.getWatts() - rejectedElectricity;
this.setJoules(getJoules(itemStack) + joulesToStore, itemStack);
return ElectricityPack.getFromWatts(joulesToStore, getVoltage(itemStack));
}
return new ElectricityPack();
}
@Override
public ElectricityPack onProvide(ElectricityPack electricityPack, ItemStack itemStack)
{
if(itemStack.getItemDamage() != 2)
{
double electricityToUse = Math.min(getJoules(itemStack), electricityPack.getWatts());
setJoules(getJoules(itemStack) - electricityToUse, itemStack);
return ElectricityPack.getFromWatts(electricityToUse, getVoltage(itemStack));
}
return new ElectricityPack();
}
@Override
public ElectricityPack getReceiveRequest(ItemStack itemStack)
{
return itemStack.getItemDamage() == 2 ? ElectricityPack.getFromWatts(Math.min(getMaxJoules(itemStack) - getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack)) : new ElectricityPack();
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return itemStack.getItemDamage() != 2 ? ElectricityPack.getFromWatts(Math.min(getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack)) : new ElectricityPack();
}
public double getTransferRate(ItemStack itemStack)
{
return getMaxJoules(itemStack)*0.01;
}
@Override
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata)
@ -240,7 +178,7 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
if(place && super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata))
{
TileEntityElectricBlock tileEntity = (TileEntityElectricBlock)world.getBlockTileEntity(x, y, z);
tileEntity.electricityStored = getJoules(stack);
tileEntity.electricityStored = getEnergy(stack);
((ISustainedInventory)tileEntity).setInventory(getInventory(stack));
@ -261,7 +199,7 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
@Override
public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
{
if(itemStack.getItemDamage() == 2)
if(canReceive(itemStack))
{
double energyNeeded = getMaxEnergy(itemStack)-getEnergy(itemStack);
double energyToStore = Math.min(Math.min(amount*Mekanism.FROM_IC2, getMaxEnergy(itemStack)*0.01), energyNeeded);
@ -280,14 +218,14 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
@Override
public int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
{
if(itemStack.getItemDamage() != 2)
if(canSend(itemStack))
{
double energyWanted = amount*Mekanism.FROM_IC2;
double energyToGive = Math.min(Math.min(energyWanted, getMaxEnergy(itemStack)*0.01), getJoules(itemStack));
double energyToGive = Math.min(Math.min(energyWanted, getMaxEnergy(itemStack)*0.01), getEnergy(itemStack));
if(!simulate)
{
setJoules(getJoules(itemStack) - energyToGive, itemStack);
setEnergy(itemStack, getEnergy(itemStack) - energyToGive);
}
return (int)(energyToGive*Mekanism.TO_IC2);
@ -299,7 +237,7 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
@Override
public boolean canUse(ItemStack itemStack, int amount)
{
return getJoules(itemStack) >= amount*Mekanism.FROM_IC2;
return getEnergy(itemStack) >= amount*Mekanism.FROM_IC2;
}
@Override
@ -311,7 +249,7 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
@Override
public boolean canProvideEnergy(ItemStack itemStack)
{
return itemStack.getItemDamage() != 2;
return canSend(itemStack);
}
@Override
@ -445,7 +383,7 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
itemStack.setTagCompound(new NBTTagCompound());
}
double electricityStored = Math.max(Math.min(amount, getMaxJoules(itemStack)), 0);
double electricityStored = Math.max(Math.min(amount, getMaxEnergy(itemStack)), 0);
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
}
@ -476,21 +414,39 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
@Override
public float receiveEnergy(ItemStack theItem, float energy, boolean doReceive)
{
if(canReceive(theItem))
{
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_BC, energyNeeded);
if(doReceive)
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
}
return (float)(toReceive*Mekanism.TO_BC);
}
return 0;
}
@Override
public float transferEnergy(ItemStack theItem, float energy, boolean doTransfer)
{
double energyRemaining = getEnergy(theItem);
double toSend = Math.min(energy*Mekanism.FROM_BC, energyRemaining);
if(doTransfer)
if(canSend(theItem))
{
setEnergy(theItem, getEnergy(theItem) - toSend);
double energyRemaining = getEnergy(theItem);
double toSend = Math.min(energy*Mekanism.FROM_BC, energyRemaining);
if(doTransfer)
{
setEnergy(theItem, getEnergy(theItem) - toSend);
}
return (float)(toSend*Mekanism.TO_BC);
}
return (float)(toSend*Mekanism.TO_BC);
return 0;
}
@Override
@ -510,4 +466,40 @@ public class ItemBlockGenerator extends ItemBlock implements IEnergizedItem, IIt
{
return true;
}
@Override
public float recharge(ItemStack itemStack, float energy, boolean doRecharge)
{
return receiveEnergy(itemStack, energy, doRecharge);
}
@Override
public float discharge(ItemStack itemStack, float energy, boolean doDischarge)
{
return transferEnergy(itemStack, energy, doDischarge);
}
@Override
public float getElectricityStored(ItemStack theItem)
{
return (float)getEnergy(theItem);
}
@Override
public float getMaxElectricityStored(ItemStack theItem)
{
return (float)getMaxEnergy(theItem);
}
@Override
public void setElectricity(ItemStack itemStack, float joules)
{
setEnergy(itemStack, joules);
}
@Override
public float getTransfer(ItemStack itemStack)
{
return (float)getMaxTransfer(itemStack);
}
}

View file

@ -156,8 +156,7 @@ public class TileEntityBioGenerator extends TileEntityGenerator implements IFlui
}
else if(slotID == 1)
{
return itemstack.getItem() instanceof IElectricItem ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).amperes != 0);
return MekanismUtils.canBeCharged(itemstack);
}
return true;

View file

@ -241,10 +241,7 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
{
if(slotID == 3)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() > 0) ||
(itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack) &&
(!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).getWatts() > 0));
return MekanismUtils.canBeOutputted(itemstack, false);
}
else if(slotID == 0)
{
@ -279,10 +276,9 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp
}
else if(slotID == 3)
{
return (itemstack.getItem() instanceof IElectricItem && ((IElectricItem)itemstack.getItem()).canProvideEnergy(itemstack)) ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getProvideRequest(itemstack).amperes != 0) ||
itemstack.itemID == Item.redstone.itemID;
return MekanismUtils.canBeDischarged(itemstack);
}
return true;
}

View file

@ -28,8 +28,9 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.electricity.ElectricityNetworkHelper;
import universalelectricity.core.electricity.IElectricityNetwork;
import universalelectricity.core.electricity.ElectricityHelper;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.grid.IElectricityNetwork;
import buildcraft.api.power.IPowerProvider;
import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerProvider;
@ -114,23 +115,25 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem
}
}
if(!worldObj.isRemote && tileEntity instanceof IConductor)
if(tileEntity instanceof IConductor)
{
ForgeDirection outputDirection = ForgeDirection.getOrientation(facing);
float provide = getProvide(outputDirection);
IElectricityNetwork outputNetwork = ElectricityNetworkHelper.getNetworkFromTileEntity(tileEntity, outputDirection);
if(outputNetwork != null)
if(provide > 0)
{
double outputWatts = Math.min(outputNetwork.getRequest().getWatts(), Math.min(getEnergy(), 10000));
if(getEnergy() > 0 && outputWatts > 0 && getEnergy()-outputWatts >= 0)
IElectricityNetwork outputNetwork = ElectricityHelper.getNetworkFromTileEntity(tileEntity, outputDirection);
if(outputNetwork != null)
{
outputNetwork.startProducing(this, outputWatts / getVoltage(), getVoltage());
setEnergy(electricityStored - outputWatts);
}
else {
outputNetwork.stopProducing(this);
ElectricityPack request = outputNetwork.getRequest(this);
if(request.getWatts() > 0)
{
ElectricityPack sendPack = ElectricityPack.min(ElectricityPack.getFromWatts(getEnergyStored(), getVoltage()), ElectricityPack.getFromWatts(provide, getVoltage()));
float rejectedPower = outputNetwork.produce(sendPack, this);
setEnergyStored(getEnergyStored() - (sendPack.getWatts() - rejectedPower));
}
}
}
}
@ -144,9 +147,21 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem
}
@Override
public boolean canConnect(ForgeDirection direction)
protected EnumSet<ForgeDirection> getOutputtingSides()
{
return direction == ForgeDirection.getOrientation(facing);
return EnumSet.of(ForgeDirection.getOrientation(facing));
}
@Override
public float getRequest(ForgeDirection direction)
{
return 0;
}
@Override
public float getProvide(ForgeDirection direction)
{
return getOutputtingSides().contains(direction) ? (float)Math.min(getMaxEnergy()-getEnergy(), output) : 0;
}
@Override

View file

@ -115,8 +115,7 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu
}
else if(slotID == 1)
{
return itemstack.getItem() instanceof IElectricItem ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).amperes != 0);
return MekanismUtils.canBeCharged(itemstack);
}
return true;
@ -155,9 +154,7 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu
{
if(slotID == 1)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && (!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, true);
}
else if(slotID == 0)
{

View file

@ -86,9 +86,7 @@ public class TileEntityHydrogenGenerator extends TileEntityGenerator implements
{
if(slotID == 1)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && (!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, true);
}
else if(slotID == 0)
{
@ -107,8 +105,7 @@ public class TileEntityHydrogenGenerator extends TileEntityGenerator implements
}
else if(slotID == 1)
{
return itemstack.getItem() instanceof IElectricItem ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).amperes != 0);
return MekanismUtils.canBeCharged(itemstack);
}
return true;
@ -222,7 +219,7 @@ public class TileEntityHydrogenGenerator extends TileEntityGenerator implements
}
@Override
public double getVoltage()
public float getVoltage()
{
return 240;
}

View file

@ -6,6 +6,7 @@ import java.util.ArrayList;
import mekanism.api.Object3D;
import mekanism.common.ChargeUtils;
import mekanism.common.MekanismUtils;
import mekanism.generators.common.BlockGenerator.GeneratorType;
import micdoodle8.mods.galacticraft.API.ISolarLevel;
import net.minecraft.block.Block;
@ -105,9 +106,7 @@ public class TileEntitySolarGenerator extends TileEntityGenerator
{
if(slotID == 0)
{
return (itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0) ||
(itemstack.getItem() instanceof IElectricItem && (!(itemstack.getItem() instanceof IItemElectric) ||
((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).getWatts() == 0));
return MekanismUtils.canBeOutputted(itemstack, true);
}
return false;
@ -118,8 +117,7 @@ public class TileEntitySolarGenerator extends TileEntityGenerator
{
if(slotID == 0)
{
return itemstack.getItem() instanceof IElectricItem ||
(itemstack.getItem() instanceof IItemElectric && ((IItemElectric)itemstack.getItem()).getReceiveRequest(itemstack).amperes != 0);
return MekanismUtils.canBeCharged(itemstack);
}
return true;

View file

@ -4,6 +4,7 @@ import java.util.List;
import mekanism.common.Mekanism;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumArmorMaterial;
import net.minecraft.item.ItemArmor;
@ -11,9 +12,12 @@ import net.minecraft.item.ItemStack;
public class ItemMekanismArmor extends ItemArmor
{
protected EnumArmorMaterial material;
public ItemMekanismArmor(int id, EnumArmorMaterial enumarmormaterial, int renderIndex, int armorType)
{
super(id, enumarmormaterial, renderIndex, armorType);
material = enumarmormaterial;
setCreativeTab(Mekanism.tabMekanism);
}
@ -28,4 +32,10 @@ public class ItemMekanismArmor extends ItemArmor
{
itemIcon = register.registerIcon("mekanism:" + getUnlocalizedName().replace("item.", ""));
}
@Override
public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)
{
return "/assets/mekanism/armor/" + material.name().toLowerCase() + "_" + layer + ".png";
}
}

View file

@ -18,7 +18,7 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingSpawnEvent;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
@ -136,7 +136,7 @@ public class MekanismTools implements IModule
public static Item SteelLeggings;
public static Item SteelBoots;
@Init
@EventHandler
public void init(FMLInitializationEvent event)
{
//Add this module to the core list

View file

@ -5,6 +5,7 @@ import java.io.File;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraftforge.common.Configuration;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.Loader;
/**
@ -29,18 +30,6 @@ public class UniversalElectricity
*/
public static final Configuration CONFIGURATION = new Configuration(new File(Loader.instance().getConfigDir(), "UniversalElectricity.cfg"));
/**
* Multiply this to convert foreign energy into UE Joules.
*/
public static double IC2_RATIO = 40;
public static double BC3_RATIO = 100;
/**
* Multiply this to convert UE Joules into foreign energy.
*/
public static double TO_IC2_RATIO = 1 / IC2_RATIO;
public static double TO_BC_RATIO = 1 / BC3_RATIO;
/**
* Is Universal Electricity currently being voltage sensitive? If so, all machines should
* explode under high voltage and react to different amounts of voltage differently.
@ -52,6 +41,7 @@ public class UniversalElectricity
* the ElectricityNetwork. Examples would be a mod that adds any sort of wire. This value will
* be true as long as there is a way to conduct electricity.
*/
@Deprecated
public static boolean isNetworkActive = false;
/**
@ -59,19 +49,35 @@ public class UniversalElectricity
*/
public static final Material machine = new Material(MapColor.ironColor);
private static boolean INIT = false;
static
{
/**
* Loads the configuration and sets all the values.
*/
CONFIGURATION.load();
IC2_RATIO = CONFIGURATION.get("Compatiblity", "IndustrialCraft Conversion Ratio", IC2_RATIO).getDouble(IC2_RATIO);
BC3_RATIO = CONFIGURATION.get("Compatiblity", "BuildCraft Conversion Ratio", BC3_RATIO).getDouble(BC3_RATIO);
TO_IC2_RATIO = 1 / IC2_RATIO;
TO_BC_RATIO = 1 / BC3_RATIO;
initiate();
}
isVoltageSensitive = CONFIGURATION.get("Compatiblity", "Is Voltage Sensitive", isVoltageSensitive).getBoolean(isVoltageSensitive);
isNetworkActive = CONFIGURATION.get("Compatiblity", "Is Network Active", isNetworkActive).getBoolean(isNetworkActive);
CONFIGURATION.save();
public static void initiate()
{
if (!INIT)
{
/**
* Loads the configuration and sets all the values.
*/
CONFIGURATION.load();
isVoltageSensitive = CONFIGURATION.get("Compatiblity", "Is Voltage Sensitive", isVoltageSensitive).getBoolean(isVoltageSensitive);
isNetworkActive = CONFIGURATION.get("Compatiblity", "Is Network Active", isNetworkActive).getBoolean(isNetworkActive);
CONFIGURATION.save();
try
{
MinecraftForge.EVENT_BUS.register(Class.forName("universalelectricity.core.electricity.ElectricityHelper").newInstance());
}
catch (Exception e)
{
e.printStackTrace();
}
}
INIT = true;
}
}

View file

@ -1,24 +1,17 @@
package universalelectricity.core.block;
/**
* Must be applied to all tile entities that are conductors.
*
* @author Calclavia
*
*/
public interface IConductor extends INetworkProvider, IConnectionProvider
public interface IConductor extends INetworkProvider, INetworkConnection
{
/**
* Gets the resistance of the conductor. Used to calculate energy loss. A higher resistance
* means a higher energy loss.
*
* @return The amount of resistance in Ohms.
*/
public double getResistance();
public float getResistance();
/**
* @return The maximum amount of amps this conductor can handle before melting down.
*/
public double getCurrentCapcity();
public float getCurrentCapacity();
}

View file

@ -0,0 +1,53 @@
package universalelectricity.core.block;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.core.electricity.ElectricityPack;
/**
* Applied to all TileEntities that can interact with electricity.
*
* @author Calclavia, King_Lemming
*
*/
public interface IElectrical extends IConnector
{
/**
* Adds electricity to an block. Returns the quantity of electricity that was accepted. This
* should always return 0 if the block cannot be externally charged.
*
* @param from Orientation the electricity is sent in from.
* @param receive Maximum amount of electricity to be sent into the block.
* @param doReceive If false, the charge will only be simulated.
* @return Amount of energy that was accepted by the block.
*/
public float receiveElectricity(ForgeDirection from, ElectricityPack receive, boolean doReceive);
/**
* Adds electricity to an block. Returns the ElectricityPack, the electricity provided. This
* should always return null if the block cannot be externally discharged.
*
* @param from Orientation the electricity is requested from.
* @param energy Maximum amount of energy to be sent into the block.
* @param doReceive If false, the charge will only be simulated.
* @return Amount of energy that was given out by the block.
*/
public ElectricityPack provideElectricity(ForgeDirection from, ElectricityPack request, boolean doProvide);
/**
* @return How much energy does this TileEntity want?
*/
public float getRequest(ForgeDirection direction);
/**
* @return How much energy does this TileEntity want to provide?
*/
public float getProvide(ForgeDirection direction);
/**
* Gets the voltage of this TileEntity.
*
* @return The amount of volts. E.g 120v or 240v
*/
public float getVoltage();
}

View file

@ -0,0 +1,24 @@
package universalelectricity.core.block;
/**
* This interface is to be applied to all TileEntities which stores electricity within them.
*
* @author Calclavia
*/
public interface IElectricalStorage
{
/**
* Sets the amount of joules this unit has stored.
*/
public void setEnergyStored(float energy);
/**
* * @return Get the amount of energy currently stored in the block.
*/
public float getEnergyStored();
/**
* @return Get the max amount of energy that can be stored in the block.
*/
public float getMaxEnergyStored();
}

View file

@ -1,24 +0,0 @@
package universalelectricity.core.block;
/**
* This interface is to be applied to all TileEntities which stores electricity within them.
*
* @author Calclavia
*/
public interface IElectricityStorage
{
/**
* Returns the amount of joules this unit has stored.
*/
public double getJoules();
/**
* Sets the amount of joules this unit has stored.
*/
public void setJoules(double joules);
/**
* Gets the maximum amount of joules this unit can store.
*/
public double getMaxJoules();
}

View file

@ -8,7 +8,7 @@ import net.minecraft.tileentity.TileEntity;
* @author Calclavia
*
*/
public interface IConnectionProvider extends IConnector
public interface INetworkConnection extends IConnector
{
/**
@ -20,8 +20,7 @@ public interface IConnectionProvider extends IConnector
public TileEntity[] getAdjacentConnections();
/**
* Instantly refreshes all connected blocks around the conductor, recalculating the connected
* blocks.
* Refreshes the conductor
*/
public void updateAdjacentConnections();
public void refresh();
}

View file

@ -1,6 +1,6 @@
package universalelectricity.core.block;
import universalelectricity.core.electricity.IElectricityNetwork;
import universalelectricity.core.grid.IElectricityNetwork;
/**
* Applied to TileEntities that has an instance of an electricity network.

View file

@ -1,17 +0,0 @@
package universalelectricity.core.block;
/**
* Applies to all objects that has a voltage.
*
* @author Calclavia
*
*/
public interface IVoltage
{
/**
* Gets the voltage of this object.
*
* @return The amount of volts. E.g 120v or 240v
*/
public double getVoltage();
}

View file

@ -0,0 +1,61 @@
package universalelectricity.core.electricity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.Event;
import universalelectricity.core.block.IElectrical;
public class ElectricalEvent extends Event
{
/**
* Call this to have your TileEntity produce power into the network.
*
* @author Calclavia
*
*/
@Cancelable
public static class ElectricityProduceEvent extends ElectricalEvent
{
public World world;
public IElectrical tileEntity;
public ElectricityProduceEvent(IElectrical tileEntity)
{
this.tileEntity = tileEntity;
this.world = ((TileEntity) this.tileEntity).worldObj;
}
}
/**
* Internal Events
*
* @author Calclavia
*
*/
@Cancelable
public static class ElectricityProductionEvent extends ElectricalEvent
{
public ElectricityPack electricityPack;
public TileEntity[] ignoreTiles;
public ElectricityProductionEvent(ElectricityPack electricityPack, TileEntity... ignoreTiles)
{
this.electricityPack = electricityPack;
this.ignoreTiles = ignoreTiles;
}
}
public static class ElectricityRequestEvent extends ElectricalEvent
{
public ElectricityPack electricityPack;
public TileEntity[] ignoreTiles;
public ElectricityRequestEvent(ElectricityPack electricityPack, TileEntity... ignoreTiles)
{
this.electricityPack = electricityPack;
this.ignoreTiles = ignoreTiles;
}
}
}

View file

@ -8,6 +8,11 @@ package universalelectricity.core.electricity;
public class ElectricityDisplay
{
/**
* Universal Electricity's units are in KILOJOULES, KILOWATTS and KILOVOLTS. Try to make your
* energy ratio as close to real life as possible.
*
*/
public static enum ElectricUnit
{
AMPERE("Amp", "I"), AMP_HOUR("Amp Hour", "Ah"), VOLTAGE("Volt", "V"), WATT("Watt", "W"),
@ -32,7 +37,7 @@ public class ElectricityDisplay
public static enum MeasurementUnit
{
MICRO("Micro", "mi", 0.000001), MILLI("Milli", "m", 0.001), KILO("Kilo", "k", 1000),
MEGA("Mega", "M", 1000000);
MEGA("Mega", "M", 1000000), GIGA("Giga", "G", 1000000000);
public String name;
public String symbol;
@ -63,11 +68,21 @@ public class ElectricityDisplay
}
}
/**
* By default, mods should store energy in Kilo-Joules, hence a multiplier of 1/1000.
*/
public static String getDisplay(float value, ElectricUnit unit, int decimalPlaces, boolean isShort)
{
return getDisplay(value, unit, decimalPlaces, isShort, 1000);
}
/**
* Displays the unit as text. Works only for positive numbers.
*/
public static String getDisplay(double value, ElectricUnit unit, int decimalPlaces, boolean isShort)
public static String getDisplay(float value, ElectricUnit unit, int decimalPlaces, boolean isShort, float multiplier)
{
value *= multiplier;
String unitName = unit.name;
if (isShort)
@ -107,22 +122,22 @@ public class ElectricityDisplay
return roundDecimals(value, decimalPlaces) + " " + unitName;
}
public static String getDisplay(double value, ElectricUnit unit)
public static String getDisplay(float value, ElectricUnit unit)
{
return getDisplay(value, unit, 2, false);
}
public static String getDisplayShort(double value, ElectricUnit unit)
public static String getDisplayShort(float value, ElectricUnit unit)
{
return getDisplay(value, unit, 2, true);
}
public static String getDisplayShort(double value, ElectricUnit unit, int decimalPlaces)
public static String getDisplayShort(float value, ElectricUnit unit, int decimalPlaces)
{
return getDisplay(value, unit, decimalPlaces, true);
}
public static String getDisplaySimple(double value, ElectricUnit unit, int decimalPlaces)
public static String getDisplaySimple(float value, ElectricUnit unit, int decimalPlaces)
{
if (value > 1)
{

View file

@ -0,0 +1,206 @@
package universalelectricity.core.electricity;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.event.ForgeSubscribe;
import universalelectricity.core.block.IConnector;
import universalelectricity.core.block.INetworkProvider;
import universalelectricity.core.electricity.ElectricalEvent.ElectricityProduceEvent;
import universalelectricity.core.grid.IElectricityNetwork;
import universalelectricity.core.vector.Vector3;
import universalelectricity.core.vector.VectorHelper;
/**
* A helper class that provides additional useful functions to interact with the ElectricityNetwork
*
* @author Calclavia
*
*/
public class ElectricityHelper
{
@ForgeSubscribe
public void onProduce(ElectricityProduceEvent evt)
{
// Needs work with shuffling to be able to evenly distribute to all
// connected networks
// instead of just defaulting to one of them.
Vector3 position = new Vector3((TileEntity) evt.tileEntity);
HashMap<IElectricityNetwork, ForgeDirection> networks = new HashMap<IElectricityNetwork, ForgeDirection>();
for (ForgeDirection direction : getDirections((TileEntity) evt.tileEntity))
{
IElectricityNetwork network = getNetworkFromTileEntity(VectorHelper.getTileEntityFromSide(evt.world, position, direction), direction.getOpposite());
if (network != null)
{
networks.put(network, direction);
ElectricityPack provided = evt.tileEntity.provideElectricity(direction, network.getRequest((TileEntity) evt.tileEntity), true);
if (provided != null && provided.getWatts() > 0)
{
network.produce(provided, (TileEntity) evt.tileEntity);
}
}
}
/*
* ElectricityPack request = this.getNetwork().getRequest(this);
*
* if (request.getWatts() > 0) { List<ElectricityPack> providedPacks = new
* ArrayList<ElectricityPack>(); List<TileEntity> tileEntities = new
* ArrayList<TileEntity>();
*
* for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { Vector3 position = new
* Vector3(this).modifyPositionFromSide(direction); TileEntity tileEntity =
* position.getTileEntity(this.worldObj);
*
* if (tileEntity instanceof IElectrical) { tileEntities.add(tileEntity); IElectrical
* electrical = (IElectrical) tileEntity;
*
* if (electrical.canConnect(direction.getOpposite())) { if
* (electrical.getProvide(direction.getOpposite()) > 0) { providedPacks.add
* (electrical.provideElectricity(direction.getOpposite(), request, true)); } } } }
*
* ElectricityPack mergedPack = ElectricityPack.merge(providedPacks);
*
* if (mergedPack.getWatts() > 0) { this.getNetwork().produce(mergedPack,
* tileEntities.toArray(new TileEntity[0])); } }
*/
}
public static EnumSet<ForgeDirection> getDirections(TileEntity tileEntity)
{
EnumSet<ForgeDirection> possibleSides = EnumSet.noneOf(ForgeDirection.class);
if (tileEntity instanceof IConnector)
{
for (int i = 0; i < 6; i++)
{
ForgeDirection direction = ForgeDirection.getOrientation(i);
if (((IConnector) tileEntity).canConnect(direction))
{
possibleSides.add(direction);
}
}
}
return possibleSides;
}
@Deprecated
public static ElectricityPack produceFromMultipleSides(TileEntity tileEntity, ElectricityPack electricityPack)
{
return ElectricityHelper.produceFromMultipleSides(tileEntity, getDirections(tileEntity), electricityPack);
}
/**
* Produces electricity from all specified sides. Use this as a simple helper function.
*
* @param tileEntity - The TileEntity consuming the electricity.
* @param approachDirection - The sides in which you can connect to.
* @param producePack - The amount of electricity to be produced.
* @return What remained in the electricity pack.
*/
@Deprecated
public static ElectricityPack produceFromMultipleSides(TileEntity tileEntity, EnumSet<ForgeDirection> approachingDirection, ElectricityPack producingPack)
{
ElectricityPack remainingElectricity = producingPack.clone();
if (tileEntity != null && approachingDirection != null)
{
final Set<IElectricityNetwork> connectedNetworks = ElectricityHelper.getNetworksFromMultipleSides(tileEntity, approachingDirection);
if (connectedNetworks.size() > 0)
{
/**
* Requests an even amount of electricity from all sides.
*/
float wattsPerSide = (producingPack.getWatts() / connectedNetworks.size());
float voltage = producingPack.voltage;
for (IElectricityNetwork network : connectedNetworks)
{
if (wattsPerSide > 0 && producingPack.getWatts() > 0)
{
float amperes = Math.min(wattsPerSide / voltage, network.getRequest(tileEntity).getWatts() / voltage);
if (amperes > 0)
{
network.produce(new ElectricityPack(amperes, voltage));
remainingElectricity.amperes -= amperes;
}
}
}
}
}
return remainingElectricity;
}
/**
* @param tileEntity - The TileEntity's sides.
* @param approachingDirection - The directions that can be connected.
* @return A list of networks from all specified sides. There will be no repeated
* ElectricityNetworks and it will never return null.
*/
public static Set<IElectricityNetwork> getNetworksFromMultipleSides(TileEntity tileEntity, EnumSet<ForgeDirection> approachingDirection)
{
final Set<IElectricityNetwork> connectedNetworks = new HashSet<IElectricityNetwork>();
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
{
if (approachingDirection.contains(side))
{
Vector3 position = new Vector3(tileEntity);
position.modifyPositionFromSide(side);
TileEntity outputConductor = position.getTileEntity(tileEntity.worldObj);
IElectricityNetwork electricityNetwork = ElectricityHelper.getNetworkFromTileEntity(outputConductor, side);
if (electricityNetwork != null)
{
connectedNetworks.add(electricityNetwork);
}
}
}
return connectedNetworks;
}
/**
* Tries to find the electricity network based in a tile entity and checks to see if it is a
* conductor. All machines should use this function to search for a connecting conductor around
* it.
*
* @param conductor - The TileEntity conductor
* @param approachDirection - The direction you are approaching this wire from.
* @return The ElectricityNetwork or null if not found.
*/
public static IElectricityNetwork getNetworkFromTileEntity(TileEntity tileEntity, ForgeDirection approachDirection)
{
if (tileEntity != null)
{
if (tileEntity instanceof INetworkProvider)
{
if (tileEntity instanceof IConnector)
{
if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite()))
{
return ((INetworkProvider) tileEntity).getNetwork();
}
}
else
{
return ((INetworkProvider) tileEntity).getNetwork();
}
}
}
return null;
}
}

View file

@ -1,511 +0,0 @@
package universalelectricity.core.electricity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.block.IConnectionProvider;
import universalelectricity.core.block.INetworkProvider;
import universalelectricity.core.path.Pathfinder;
import universalelectricity.core.path.PathfinderChecker;
import universalelectricity.core.vector.Vector3;
import universalelectricity.core.vector.VectorHelper;
import cpw.mods.fml.common.FMLLog;
/**
* An Electrical Network specifies a wire connection. Each wire connection line will have its own
* electrical network. Do not include this class if you do not intend to have custom wires in your
* mod. This will increase future compatibility.
*
* @author Calclavia
*
*/
public class ElectricityNetwork implements IElectricityNetwork
{
private final HashMap<TileEntity, ElectricityPack> producers = new HashMap<TileEntity, ElectricityPack>();
private final HashMap<TileEntity, ElectricityPack> consumers = new HashMap<TileEntity, ElectricityPack>();
private final Set<IConductor> conductors = new HashSet<IConductor>();
public ElectricityNetwork()
{
}
public ElectricityNetwork(IConductor... conductors)
{
this.conductors.addAll(Arrays.asList(conductors));
}
@Override
public void startProducing(TileEntity tileEntity, ElectricityPack electricityPack)
{
if (tileEntity != null && electricityPack.getWatts() > 0)
{
this.producers.put(tileEntity, electricityPack);
}
}
@Override
public void startProducing(TileEntity tileEntity, double amperes, double voltage)
{
this.startProducing(tileEntity, new ElectricityPack(amperes, voltage));
}
@Override
public boolean isProducing(TileEntity tileEntity)
{
return this.producers.containsKey(tileEntity);
}
/**
* Sets this tile entity to stop producing energy in this network.
*/
@Override
public void stopProducing(TileEntity tileEntity)
{
this.producers.remove(tileEntity);
}
/**
* Sets this tile entity to start producing energy in this network.
*/
@Override
public void startRequesting(TileEntity tileEntity, ElectricityPack electricityPack)
{
if (tileEntity != null && electricityPack.getWatts() > 0)
{
this.consumers.put(tileEntity, electricityPack);
}
}
@Override
public void startRequesting(TileEntity tileEntity, double amperes, double voltage)
{
this.startRequesting(tileEntity, new ElectricityPack(amperes, voltage));
}
@Override
public boolean isRequesting(TileEntity tileEntity)
{
return this.consumers.containsKey(tileEntity);
}
/**
* Sets this tile entity to stop producing energy in this network.
*/
@Override
public void stopRequesting(TileEntity tileEntity)
{
this.consumers.remove(tileEntity);
}
/**
* @param ignoreTiles The TileEntities to ignore during this calculation. Null will make it not
* ignore any.
* @return The electricity produced in this electricity network
*/
@Override
public ElectricityPack getProduced(TileEntity... ignoreTiles)
{
ElectricityPack totalElectricity = new ElectricityPack(0, 0);
Iterator it = this.producers.entrySet().iterator();
loop:
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry) it.next();
if (pairs != null)
{
TileEntity tileEntity = (TileEntity) pairs.getKey();
if (tileEntity == null)
{
it.remove();
continue;
}
if (tileEntity.isInvalid())
{
it.remove();
continue;
}
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) != tileEntity)
{
it.remove();
continue;
}
if (ignoreTiles != null)
{
for (TileEntity ignoreTile : ignoreTiles)
{
if (tileEntity == ignoreTile)
{
continue loop;
}
}
}
ElectricityPack pack = (ElectricityPack) pairs.getValue();
if (pairs.getKey() != null && pairs.getValue() != null && pack != null)
{
double newWatts = totalElectricity.getWatts() + pack.getWatts();
double newVoltage = Math.max(totalElectricity.voltage, pack.voltage);
totalElectricity.amperes = newWatts / newVoltage;
totalElectricity.voltage = newVoltage;
}
}
}
return totalElectricity;
}
/**
* @return How much electricity this network needs.
*/
@Override
public ElectricityPack getRequest(TileEntity... ignoreTiles)
{
ElectricityPack totalElectricity = this.getRequestWithoutReduction();
totalElectricity.amperes = Math.max(totalElectricity.amperes - this.getProduced(ignoreTiles).amperes, 0);
return totalElectricity;
}
@Override
public ElectricityPack getRequestWithoutReduction()
{
ElectricityPack totalElectricity = new ElectricityPack(0, 0);
Iterator it = this.consumers.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry) it.next();
if (pairs != null)
{
TileEntity tileEntity = (TileEntity) pairs.getKey();
if (tileEntity == null)
{
it.remove();
continue;
}
if (tileEntity.isInvalid())
{
it.remove();
continue;
}
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) != tileEntity)
{
it.remove();
continue;
}
ElectricityPack pack = (ElectricityPack) pairs.getValue();
if (pack != null)
{
totalElectricity.amperes += pack.amperes;
totalElectricity.voltage = Math.max(totalElectricity.voltage, pack.voltage);
}
}
}
return totalElectricity;
}
/**
* @param tileEntity
* @return The electricity being input into this tile entity.
*/
@Override
public ElectricityPack consumeElectricity(TileEntity tileEntity)
{
ElectricityPack totalElectricity = new ElectricityPack(0, 0);
try
{
ElectricityPack tileRequest = this.consumers.get(tileEntity);
if (this.consumers.containsKey(tileEntity) && tileRequest != null)
{
// Calculate the electricity this TileEntity is receiving in percentage.
totalElectricity = this.getProduced();
if (totalElectricity.getWatts() > 0)
{
ElectricityPack totalRequest = this.getRequestWithoutReduction();
totalElectricity.amperes *= (tileRequest.amperes / totalRequest.amperes);
double ampsReceived = totalElectricity.amperes - (totalElectricity.amperes * totalElectricity.amperes * this.getTotalResistance()) / totalElectricity.voltage;
double voltsReceived = totalElectricity.voltage - (totalElectricity.amperes * this.getTotalResistance());
totalElectricity.amperes = ampsReceived;
totalElectricity.voltage = voltsReceived;
return totalElectricity;
}
}
}
catch (Exception e)
{
FMLLog.severe("Failed to consume electricity!");
e.printStackTrace();
}
return totalElectricity;
}
/**
* @return Returns all producers in this electricity network.
*/
@Override
public HashMap<TileEntity, ElectricityPack> getProducers()
{
return this.producers;
}
/**
* Gets all the electricity receivers.
*/
@Override
public List<TileEntity> getProviders()
{
List<TileEntity> providers = new ArrayList<TileEntity>();
providers.addAll(this.producers.keySet());
return providers;
}
/**
* @return Returns all consumers in this electricity network.
*/
@Override
public HashMap<TileEntity, ElectricityPack> getConsumers()
{
return this.consumers;
}
/**
* Gets all the electricity receivers.
*/
@Override
public List<TileEntity> getReceivers()
{
List<TileEntity> receivers = new ArrayList<TileEntity>();
receivers.addAll(this.consumers.keySet());
return receivers;
}
@Override
public void cleanUpConductors()
{
Iterator it = this.conductors.iterator();
while (it.hasNext())
{
IConductor conductor = (IConductor) it.next();
if (conductor == null)
{
it.remove();
}
else if (((TileEntity) conductor).isInvalid())
{
it.remove();
}
else
{
conductor.setNetwork(this);
}
}
}
/**
* This function is called to refresh all conductors in this network
*/
@Override
public void refreshConductors()
{
this.cleanUpConductors();
try
{
Iterator<IConductor> it = this.conductors.iterator();
while (it.hasNext())
{
IConductor conductor = it.next();
conductor.updateAdjacentConnections();
}
}
catch (Exception e)
{
FMLLog.severe("Universal Electricity: Failed to refresh conductor.");
e.printStackTrace();
}
}
@Override
public double getTotalResistance()
{
double resistance = 0;
for (IConductor conductor : this.conductors)
{
resistance += conductor.getResistance();
}
return resistance;
}
@Override
public double getLowestCurrentCapacity()
{
double lowestAmp = 0;
for (IConductor conductor : this.conductors)
{
if (lowestAmp == 0 || conductor.getCurrentCapcity() < lowestAmp)
{
lowestAmp = conductor.getCurrentCapcity();
}
}
return lowestAmp;
}
@Override
public Set<IConductor> getConductors()
{
return this.conductors;
}
@Override
public void mergeConnection(IElectricityNetwork network)
{
if (network != null && network != this)
{
ElectricityNetwork newNetwork = new ElectricityNetwork();
newNetwork.getConductors().addAll(this.getConductors());
newNetwork.getConductors().addAll(network.getConductors());
newNetwork.cleanUpConductors();
}
}
@Override
public void splitNetwork(IConnectionProvider splitPoint)
{
if (splitPoint instanceof TileEntity)
{
this.getConductors().remove(splitPoint);
for (ForgeDirection dir : ForgeDirection.values())
{
if (dir != ForgeDirection.UNKNOWN)
{
Vector3 splitVec = new Vector3((TileEntity) splitPoint);
TileEntity tileAroundSplit = VectorHelper.getTileEntityFromSide(((TileEntity) splitPoint).worldObj, splitVec, dir);
if (this.producers.containsKey(tileAroundSplit))
{
this.stopProducing(tileAroundSplit);
this.stopRequesting(tileAroundSplit);
}
}
}
/**
* Loop through the connected blocks and attempt to see if there are connections between
* the two points elsewhere.
*/
TileEntity[] connectedBlocks = splitPoint.getAdjacentConnections();
for (int i = 0; i < connectedBlocks.length; i++)
{
TileEntity connectedBlockA = connectedBlocks[i];
if (connectedBlockA instanceof IConnectionProvider)
{
for (int ii = 0; ii < connectedBlocks.length; ii++)
{
final TileEntity connectedBlockB = connectedBlocks[ii];
if (connectedBlockA != connectedBlockB && connectedBlockB instanceof IConnectionProvider)
{
Pathfinder finder = new PathfinderChecker(((TileEntity) splitPoint).worldObj, (IConnectionProvider) connectedBlockB, splitPoint);
finder.init(new Vector3(connectedBlockA));
if (finder.results.size() > 0)
{
/**
* The connections A and B are still intact elsewhere. Set all
* references of wire connection into one network.
*/
for (Vector3 node : finder.closedSet)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).worldObj);
if (nodeTile instanceof INetworkProvider)
{
if (nodeTile != splitPoint)
{
((INetworkProvider) nodeTile).setNetwork(this);
}
}
}
}
else
{
/**
* The connections A and B are not connected anymore. Give both of
* them a new network.
*/
IElectricityNetwork newNetwork = new ElectricityNetwork();
for (Vector3 node : finder.closedSet)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).worldObj);
if (nodeTile instanceof INetworkProvider)
{
if (nodeTile != splitPoint)
{
newNetwork.getConductors().add((IConductor) nodeTile);
}
}
}
newNetwork.cleanUpConductors();
}
}
}
}
}
}
}
@Override
public String toString()
{
return "ElectricityNetwork[" + this.hashCode() + "|Wires:" + this.conductors.size() + "]";
}
}

View file

@ -1,230 +0,0 @@
package universalelectricity.core.electricity;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.core.block.IConnector;
import universalelectricity.core.block.INetworkProvider;
import universalelectricity.core.vector.Vector3;
import universalelectricity.core.vector.VectorHelper;
/**
* A helper class that provides additional useful functions to interact with the ElectricityNetwork
*
* @author Calclavia
*
*/
public class ElectricityNetworkHelper
{
/**
* Invalidates a TileEntity from the electrical network, thereby removing it from all
* electricity network that are adjacent to it.
*/
public static void invalidate(TileEntity tileEntity)
{
for (int i = 0; i < 6; i++)
{
ForgeDirection direction = ForgeDirection.getOrientation(i);
TileEntity checkTile = VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction);
if (checkTile instanceof INetworkProvider)
{
IElectricityNetwork network = ((INetworkProvider) checkTile).getNetwork();
if (network != null)
{
network.stopRequesting(tileEntity);
network.stopProducing(tileEntity);
}
}
}
}
public static EnumSet<ForgeDirection> getDirections(TileEntity tileEntity)
{
EnumSet<ForgeDirection> possibleSides = EnumSet.noneOf(ForgeDirection.class);
if (tileEntity instanceof IConnector)
{
for (int i = 0; i < 6; i++)
{
ForgeDirection direction = ForgeDirection.getOrientation(i);
if (((IConnector) tileEntity).canConnect(direction))
{
possibleSides.add(direction);
}
}
}
return possibleSides;
}
public static ElectricityPack produceFromMultipleSides(TileEntity tileEntity, ElectricityPack electricityPack)
{
return ElectricityNetworkHelper.produceFromMultipleSides(tileEntity, getDirections(tileEntity), electricityPack);
}
/**
* Produces electricity from all specified sides. Use this as a simple helper function.
*
* @param tileEntity- The TileEntity consuming the electricity.
* @param approachDirection - The sides in which you can connect to.
* @param producePack - The amount of electricity to be produced.
* @return What remained in the electricity pack.
*/
public static ElectricityPack produceFromMultipleSides(TileEntity tileEntity, EnumSet<ForgeDirection> approachingDirection, ElectricityPack producingPack)
{
ElectricityPack remainingElectricity = producingPack.clone();
if (tileEntity != null && approachingDirection != null)
{
final List<IElectricityNetwork> connectedNetworks = ElectricityNetworkHelper.getNetworksFromMultipleSides(tileEntity, approachingDirection);
if (connectedNetworks.size() > 0)
{
/**
* Requests an even amount of electricity from all sides.
*/
double wattsPerSide = (producingPack.getWatts() / connectedNetworks.size());
double voltage = producingPack.voltage;
for (IElectricityNetwork network : connectedNetworks)
{
if (wattsPerSide > 0 && producingPack.getWatts() > 0)
{
double amperes = Math.min(wattsPerSide / voltage, network.getRequest(tileEntity).amperes);
if (amperes > 0)
{
network.startProducing(tileEntity, amperes, voltage);
remainingElectricity.amperes -= amperes;
}
}
else
{
network.stopProducing(tileEntity);
}
}
}
}
return remainingElectricity;
}
public static ElectricityPack consumeFromMultipleSides(TileEntity tileEntity, ElectricityPack electricityPack)
{
return ElectricityNetworkHelper.consumeFromMultipleSides(tileEntity, getDirections(tileEntity), electricityPack);
}
/**
* Requests and attempts to consume electricity from all specified sides. Use this as a simple
* helper function.
*
* @param tileEntity- The TileEntity consuming the electricity.
* @param approachDirection - The sides in which you can connect.
* @param requestPack - The amount of electricity to be requested.
* @return The consumed ElectricityPack.
*/
public static ElectricityPack consumeFromMultipleSides(TileEntity tileEntity, EnumSet<ForgeDirection> approachingDirection, ElectricityPack requestPack)
{
ElectricityPack consumedPack = new ElectricityPack();
if (tileEntity != null && approachingDirection != null)
{
final List<IElectricityNetwork> connectedNetworks = ElectricityNetworkHelper.getNetworksFromMultipleSides(tileEntity, approachingDirection);
if (connectedNetworks.size() > 0)
{
/**
* Requests an even amount of electricity from all sides.
*/
double wattsPerSide = (requestPack.getWatts() / connectedNetworks.size());
double voltage = requestPack.voltage;
for (IElectricityNetwork network : connectedNetworks)
{
if (wattsPerSide > 0 && requestPack.getWatts() > 0)
{
network.startRequesting(tileEntity, wattsPerSide / voltage, voltage);
ElectricityPack receivedPack = network.consumeElectricity(tileEntity);
consumedPack.amperes += receivedPack.amperes;
consumedPack.voltage = Math.max(consumedPack.voltage, receivedPack.voltage);
}
else
{
network.stopRequesting(tileEntity);
}
}
}
}
return consumedPack;
}
/**
* @param tileEntity - The TileEntity's sides.
* @param approachingDirection - The directions that can be connected.
* @return A list of networks from all specified sides. There will be no repeated
* ElectricityNetworks and it will never return null.
*/
public static List<IElectricityNetwork> getNetworksFromMultipleSides(TileEntity tileEntity, EnumSet<ForgeDirection> approachingDirection)
{
final List<IElectricityNetwork> connectedNetworks = new ArrayList<IElectricityNetwork>();
for (int i = 0; i < 6; i++)
{
ForgeDirection direction = ForgeDirection.getOrientation(i);
if (approachingDirection.contains(direction))
{
Vector3 position = new Vector3(tileEntity);
position.modifyPositionFromSide(direction);
TileEntity outputConductor = position.getTileEntity(tileEntity.worldObj);
IElectricityNetwork electricityNetwork = ElectricityNetworkHelper.getNetworkFromTileEntity(outputConductor, direction);
if (electricityNetwork != null && !connectedNetworks.contains(connectedNetworks))
{
connectedNetworks.add(electricityNetwork);
}
}
}
return connectedNetworks;
}
/**
* Tries to find the electricity network based in a tile entity and checks to see if it is a
* conductor. All machines should use this function to search for a connecting conductor around
* it.
*
* @param conductor - The TileEntity conductor
* @param approachDirection - The direction you are approaching this wire from.
* @return The ElectricityNetwork or null if not found.
*/
public static IElectricityNetwork getNetworkFromTileEntity(TileEntity tileEntity, ForgeDirection approachDirection)
{
if (tileEntity != null)
{
if (tileEntity instanceof INetworkProvider)
{
if (tileEntity instanceof IConnector)
{
if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite()))
{
return ((INetworkProvider) tileEntity).getNetwork();
}
}
else
{
return ((INetworkProvider) tileEntity).getNetwork();
}
}
}
return null;
}
}

View file

@ -1,5 +1,7 @@
package universalelectricity.core.electricity;
import java.util.List;
/**
* A simple way to store electrical data.
*
@ -8,10 +10,10 @@ package universalelectricity.core.electricity;
*/
public class ElectricityPack implements Cloneable
{
public double amperes;
public double voltage;
public float amperes;
public float voltage;
public ElectricityPack(double amperes, double voltage)
public ElectricityPack(float amperes, float voltage)
{
this.amperes = amperes;
this.voltage = voltage;
@ -22,92 +24,155 @@ public class ElectricityPack implements Cloneable
this(0, 0);
}
public static ElectricityPack getFromWatts(double watts, double voltage)
public static ElectricityPack getFromWatts(float watts, float voltage)
{
return new ElectricityPack(watts / voltage, voltage);
}
public double getWatts()
/**
* Merges multiple ElectricityPacks together to form one with an average voltage.
*/
public static ElectricityPack merge(ElectricityPack... packs)
{
float totalEnergy = 0;
float totalVoltage = 0;
for (ElectricityPack pack : packs)
{
totalEnergy += pack.getWatts();
totalVoltage += pack.voltage;
}
if (totalEnergy <= 0 || totalVoltage <= 0)
{
return new ElectricityPack();
}
return ElectricityPack.getFromWatts(totalEnergy, totalVoltage / packs.length);
}
public static ElectricityPack merge(List<ElectricityPack> providedPacks)
{
return merge(providedPacks.toArray(new ElectricityPack[0]));
}
/**
* @return Returns the ElectricityPack with the largest amount of energy.
*/
public static ElectricityPack max(ElectricityPack... packs)
{
ElectricityPack optimalPack = null;
for (ElectricityPack pack : packs)
{
if (optimalPack == null || (optimalPack != null && pack.getWatts() > optimalPack.getWatts()))
{
optimalPack = pack;
}
}
return optimalPack;
}
/**
* @return Returns the ElectricityPack with the smallest amount of energy.
*/
public static ElectricityPack min(ElectricityPack... packs)
{
ElectricityPack optimalPack = null;
for (ElectricityPack pack : packs)
{
if (optimalPack == null || (optimalPack != null && pack.getWatts() < optimalPack.getWatts()))
{
optimalPack = pack;
}
}
return optimalPack;
}
public float getWatts()
{
return getWatts(amperes, voltage);
}
public double getConductance()
public float getConductance()
{
return getConductance(amperes, voltage);
}
public double getResistance()
public float getResistance()
{
return getResistance(amperes, voltage);
}
public static double getJoules(double watts, double seconds)
public static float getJoules(float watts, float seconds)
{
return watts * seconds;
}
public static double getJoules(double amps, double voltage, double seconds)
public static float getJoules(float amps, float voltage, float seconds)
{
return amps * voltage * seconds;
}
public static double getWattsFromJoules(double joules, double seconds)
public static float getWattsFromJoules(float joules, float seconds)
{
return joules / seconds;
}
public static double getAmps(double watts, double voltage)
public static float getAmps(float watts, float voltage)
{
return watts / voltage;
}
public static double getAmps(double ampHours)
public static float getAmps(float ampHours)
{
return ampHours * 3600;
}
public static double getAmpsFromWattHours(double wattHours, double voltage)
public static float getAmpsFromWattHours(float wattHours, float voltage)
{
return getWatts(wattHours) / voltage;
}
public static double getWattHoursFromAmpHours(double ampHours, double voltage)
public static float getWattHoursFromAmpHours(float ampHours, float voltage)
{
return ampHours * voltage;
}
public static double getAmpHours(double amps)
public static float getAmpHours(float amps)
{
return amps / 3600;
}
public static double getWatts(double amps, double voltage)
public static float getWatts(float amps, float voltage)
{
return amps * voltage;
}
public static double getWatts(double wattHours)
public static float getWatts(float wattHours)
{
return wattHours * 3600;
}
public static double getWattHours(double watts)
public static float getWattHours(float watts)
{
return watts / 3600;
}
public static double getWattHours(double amps, double voltage)
public static float getWattHours(float amps, float voltage)
{
return getWattHours(getWatts(amps, voltage));
}
public static double getResistance(double amps, double voltage)
public static float getResistance(float amps, float voltage)
{
return voltage / amps;
}
public static double getConductance(double amps, double voltage)
public static float getConductance(float amps, float voltage)
{
return amps / voltage;
}

View file

@ -1,17 +0,0 @@
package universalelectricity.core.electricity;
import java.util.List;
import universalelectricity.core.block.IConductor;
public interface IConductorRegistry
{
void register(IConductor conductor);
void cleanConductors();
void resetAllConnections();
List<IConductor> getConductors();
}

View file

@ -1,138 +0,0 @@
package universalelectricity.core.electricity;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import net.minecraft.tileentity.TileEntity;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.block.IConnectionProvider;
/**
* The Electrical Network in interface form.
*
* @author Calclavia
*
*/
public interface IElectricityNetwork
{
/**
* Sets this TileEntity to start producing energy in this network.
*/
public void startProducing(TileEntity tileEntity, ElectricityPack electricityPack);
public void startProducing(TileEntity tileEntity, double amperes, double voltage);
/**
* Is this TileEntity producing electricity?
*/
public boolean isProducing(TileEntity tileEntity);
/**
* Stops the TileEntity from producing electricity.
*/
public void stopProducing(TileEntity tileEntity);
/**
* Sets a TileEntity to start requesting electricity from the network.
*/
public void startRequesting(TileEntity tileEntity, ElectricityPack electricityPack);
public void startRequesting(TileEntity tileEntity, double amperes, double voltage);
/**
* Is this TileEntity requesting electricity?
*/
public boolean isRequesting(TileEntity tileEntity);
/**
* Stops the TileEntity from requesting electricity from the network.
*/
public void stopRequesting(TileEntity tileEntity);
/**
* Gets the total amount of electricity produced in the electricity network.
*
* @param ignoreTiles The TileEntities to ignore during this calculation (optional).
*/
public ElectricityPack getProduced(TileEntity... ignoreTiles);
/**
* Gets the total amount of electricity requested in the electricity network. Takes account of
* electricity being produced in the network.
*
* @param ignoreTiles The TileEntities to ignore during this calculation (optional).
*/
public ElectricityPack getRequest(TileEntity... ignoreTiles);
/**
* Gets the total amount of electricity requested WITHOUT accounting in the electricity already
* being produced.
*/
public ElectricityPack getRequestWithoutReduction();
/**
* Attemps to consume electricity for this TileEntity based on what was requested.
*
* @return The actual amount of electricity consumed.
*/
public ElectricityPack consumeElectricity(TileEntity tileEntity);
/**
* @return Gets a list of TileEntities currently producing electricity in the network.
*
*/
public HashMap<TileEntity, ElectricityPack> getProducers();
public List<TileEntity> getProviders();
/**
* @return Gets a list of TileEntities currently receiving electricity from the network.
*
*/
public HashMap<TileEntity, ElectricityPack> getConsumers();
public List<TileEntity> getReceivers();
/**
* @return A list of all conductors in this electrical network.
*/
public Set<IConductor> getConductors();
/**
* @return The total amount of resistance of this electrical network. In Ohms.
*/
public double getTotalResistance();
/**
* @return The lowest amount of current (amperage) that this electrical network can tolerate.
*/
public double getLowestCurrentCapacity();
/**
* Cleans up and updates the list of conductors in the electricity network, removing dead ones.
*/
public void cleanUpConductors();
/**
* Refreshes and recalculates wire connections in this electrical network.
*
*/
public void refreshConductors();
/**
* Merges another electrical network into this one, destroying the other network's existence.
*
* @param network
*/
public void mergeConnection(IElectricityNetwork network);
/**
* Splits the electricity network at a given TileEntity position. Called usually when a wire is
* broken to split the electrical network.
*
* @param splitPoint - The TileEntity that is being split.
*/
public void splitNetwork(IConnectionProvider splitPoint);
}

View file

@ -0,0 +1,64 @@
package universalelectricity.core.electricity;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.grid.IElectricityNetwork;
import cpw.mods.fml.common.FMLLog;
@SuppressWarnings("unchecked")
public class NetworkLoader
{
/**
* The default IElectricityNetwork used for primary electrical networks.
*/
public static Class<? extends IElectricityNetwork> NETWORK_CLASS;
public static final Set<Class<? extends IElectricityNetwork>> NETWORK_CLASS_REGISTRY = new HashSet<Class<? extends IElectricityNetwork>>();
static
{
setNetworkClass("universalelectricity.core.grid.ElectricityNetwork");
}
public static void setNetworkClass(Class<? extends IElectricityNetwork> networkClass)
{
NETWORK_CLASS_REGISTRY.add(networkClass);
NETWORK_CLASS = networkClass;
}
public static void setNetworkClass(String className)
{
try
{
setNetworkClass((Class<? extends IElectricityNetwork>) Class.forName(className));
}
catch (Exception e)
{
FMLLog.severe("Universal Electricity: Failed to set network class with name " + className);
e.printStackTrace();
}
}
public static IElectricityNetwork getNewNetwork(IConductor... conductors)
{
try
{
IElectricityNetwork network = NETWORK_CLASS.newInstance();
network.getConductors().addAll(Arrays.asList(conductors));
return network;
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
return null;
}
}

View file

@ -0,0 +1,353 @@
package universalelectricity.core.grid;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.block.IConnector;
import universalelectricity.core.block.IElectrical;
import universalelectricity.core.block.INetworkConnection;
import universalelectricity.core.block.INetworkProvider;
import universalelectricity.core.electricity.ElectricalEvent.ElectricityProductionEvent;
import universalelectricity.core.electricity.ElectricalEvent.ElectricityRequestEvent;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.path.Pathfinder;
import universalelectricity.core.path.PathfinderChecker;
import universalelectricity.core.vector.Vector3;
import universalelectricity.core.vector.VectorHelper;
import cpw.mods.fml.common.FMLLog;
/**
* An Electrical Network specifies a wire connection. Each wire connection line will have its own
* electrical network.
*
* !! Do not include this class if you do not intend to have custom wires in your mod. This will
* increase future compatibility. !!
*
* @author Calclavia
*
*/
public class ElectricityNetwork implements IElectricityNetwork
{
public Map<TileEntity, ArrayList<ForgeDirection>> electricalTiles = new HashMap<TileEntity, ArrayList<ForgeDirection>>();
private final Set<IConductor> conductors = new HashSet<IConductor>();
@Override
public float produce(ElectricityPack electricity, TileEntity... ignoreTiles)
{
ElectricityProductionEvent evt = new ElectricityProductionEvent(electricity, ignoreTiles);
MinecraftForge.EVENT_BUS.post(evt);
float energy = electricity.getWatts();
float totalEnergy = energy;
float voltage = electricity.voltage;
if (!evt.isCanceled())
{
Set<TileEntity> avaliableEnergyTiles = this.getAcceptors();
if (!avaliableEnergyTiles.isEmpty())
{
final float totalEnergyRequest = this.getRequest(ignoreTiles).getWatts();
if (totalEnergyRequest > 0)
{
for (TileEntity tileEntity : avaliableEnergyTiles)
{
if (tileEntity instanceof IElectrical && !Arrays.asList(ignoreTiles).contains(tileEntity))
{
IElectrical electricalTile = (IElectrical) tileEntity;
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
{
if (electricalTile.canConnect(direction) && this.getConductors().contains(VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction)))
{
float energyToSend = totalEnergy * (electricalTile.getRequest(direction) / totalEnergyRequest);
if (energyToSend > 0)
{
ElectricityPack electricityToSend = ElectricityPack.getFromWatts(energyToSend, voltage);
// Calculate energy loss caused by resistance.
float ampsReceived = electricityToSend.amperes - (electricityToSend.amperes * electricityToSend.amperes * this.getTotalResistance()) / electricityToSend.voltage;
float voltsReceived = electricityToSend.voltage - (electricityToSend.amperes * this.getTotalResistance());
electricityToSend = new ElectricityPack(ampsReceived, voltsReceived);
energy -= ((IElectrical) tileEntity).receiveElectricity(direction, electricityToSend, true);
}
}
}
}
}
}
}
}
return energy;
}
/**
* @return How much electricity this network needs.
*/
@Override
public ElectricityPack getRequest(TileEntity... ignoreTiles)
{
List<ElectricityPack> requests = new ArrayList<ElectricityPack>();
Iterator<TileEntity> it = this.getAcceptors().iterator();
while (it.hasNext())
{
TileEntity tileEntity = it.next();
if (Arrays.asList(ignoreTiles).contains(tileEntity))
{
continue;
}
if (tileEntity instanceof IElectrical)
{
if (!tileEntity.isInvalid())
{
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) == tileEntity)
{
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
{
if (((IElectrical) tileEntity).canConnect(direction) && this.getConductors().contains(VectorHelper.getConnectorFromSide(tileEntity.worldObj, new Vector3(tileEntity), direction)))
{
requests.add(ElectricityPack.getFromWatts(((IElectrical) tileEntity).getRequest(direction), ((IElectrical) tileEntity).getVoltage()));
continue;
}
}
}
}
}
}
ElectricityPack mergedPack = ElectricityPack.merge(requests);
ElectricityRequestEvent evt = new ElectricityRequestEvent(mergedPack, ignoreTiles);
MinecraftForge.EVENT_BUS.post(evt);
return mergedPack;
}
/**
* @return Returns all producers in this electricity network.
*/
@Override
public Set<TileEntity> getAcceptors()
{
return this.electricalTiles.keySet();
}
/**
* @param tile The tile to get connections for
* @return The list of directions that can be connected to for the provided tile
*/
@Override
public ArrayList<ForgeDirection> getPossibleDirections(TileEntity tile)
{
return this.electricalTiles.containsKey(tile) ? this.electricalTiles.get(tile) : null;
}
/**
* This function is called to refresh all conductors in this network
*/
@Override
public void refresh()
{
this.electricalTiles.clear();
try
{
Iterator<IConductor> it = this.conductors.iterator();
while (it.hasNext())
{
IConductor conductor = it.next();
if (conductor == null)
{
it.remove();
}
else if (((TileEntity) conductor).isInvalid())
{
it.remove();
}
else
{
conductor.setNetwork(this);
}
for (int i = 0; i < conductor.getAdjacentConnections().length; i++)
{
TileEntity acceptor = conductor.getAdjacentConnections()[i];
if (!(acceptor instanceof IConductor) && acceptor instanceof IConnector)
{
ArrayList<ForgeDirection> possibleDirections = null;
if (this.electricalTiles.containsKey(acceptor))
{
possibleDirections = this.electricalTiles.get(acceptor);
}
else
{
possibleDirections = new ArrayList<ForgeDirection>();
}
possibleDirections.add(ForgeDirection.getOrientation(i));
this.electricalTiles.put(acceptor, possibleDirections);
}
}
}
}
catch (Exception e)
{
FMLLog.severe("Universal Electricity: Failed to refresh conductor.");
e.printStackTrace();
}
}
@Override
public float getTotalResistance()
{
float resistance = 0;
for (IConductor conductor : this.conductors)
{
resistance += conductor.getResistance();
}
return resistance;
}
@Override
public float getLowestCurrentCapacity()
{
float lowestAmperage = 0;
for (IConductor conductor : this.conductors)
{
if (lowestAmperage == 0 || conductor.getCurrentCapacity() < lowestAmperage)
{
lowestAmperage = conductor.getCurrentCapacity();
}
}
return lowestAmperage;
}
@Override
public Set<IConductor> getConductors()
{
return this.conductors;
}
@Override
public void merge(IElectricityNetwork network)
{
if (network != null && network != this)
{
ElectricityNetwork newNetwork = new ElectricityNetwork();
newNetwork.getConductors().addAll(this.getConductors());
newNetwork.getConductors().addAll(network.getConductors());
newNetwork.refresh();
}
}
@Override
public void split(IConductor splitPoint)
{
if (splitPoint instanceof TileEntity)
{
this.getConductors().remove(splitPoint);
/**
* Loop through the connected blocks and attempt to see if there are connections between
* the two points elsewhere.
*/
TileEntity[] connectedBlocks = splitPoint.getAdjacentConnections();
for (int i = 0; i < connectedBlocks.length; i++)
{
TileEntity connectedBlockA = connectedBlocks[i];
if (connectedBlockA instanceof INetworkConnection)
{
for (int ii = 0; ii < connectedBlocks.length; ii++)
{
final TileEntity connectedBlockB = connectedBlocks[ii];
if (connectedBlockA != connectedBlockB && connectedBlockB instanceof INetworkConnection)
{
Pathfinder finder = new PathfinderChecker(((TileEntity) splitPoint).worldObj, (INetworkConnection) connectedBlockB, splitPoint);
finder.init(new Vector3(connectedBlockA));
if (finder.results.size() > 0)
{
/**
* The connections A and B are still intact elsewhere. Set all
* references of wire connection into one network.
*/
for (Vector3 node : finder.closedSet)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).worldObj);
if (nodeTile instanceof INetworkProvider)
{
if (nodeTile != splitPoint)
{
((INetworkProvider) nodeTile).setNetwork(this);
}
}
}
}
else
{
/**
* The connections A and B are not connected anymore. Give both of
* them a new network.
*/
IElectricityNetwork newNetwork = new ElectricityNetwork();
for (Vector3 node : finder.closedSet)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).worldObj);
if (nodeTile instanceof INetworkProvider)
{
if (nodeTile != splitPoint)
{
newNetwork.getConductors().add((IConductor) nodeTile);
}
}
}
newNetwork.refresh();
}
}
}
}
}
}
}
@Override
public String toString()
{
return "ElectricityNetwork[" + this.hashCode() + "|Wires:" + this.conductors.size() + "|Acceptors:" + this.electricalTiles.size() + "]";
}
}

View file

@ -0,0 +1,38 @@
package universalelectricity.core.grid;
import net.minecraft.tileentity.TileEntity;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.electricity.ElectricityPack;
/**
* The Electrical Network in interface form.
*
* @author Calclavia
*
*/
public interface IElectricityNetwork extends IGridNetwork<IElectricityNetwork, IConductor, TileEntity>
{
/**
* Produces electricity in this electrical network.
*
* @return Rejected energy in Joules.
*/
public float produce(ElectricityPack electricityPack, TileEntity... ignoreTiles);
/**
* Gets the total amount of electricity requested/needed in the electricity network.
*
* @param ignoreTiles The TileEntities to ignore during this calculation (optional).
*/
public ElectricityPack getRequest(TileEntity... ignoreTiles);
/**
* @return The total amount of resistance of this electrical network. In Ohms.
*/
public float getTotalResistance();
/**
* @return The lowest amount of current (amperage) that this electrical network can tolerate.
*/
public float getLowestCurrentCapacity();
}

View file

@ -0,0 +1,66 @@
package universalelectricity.core.grid;
import java.util.ArrayList;
import java.util.Set;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
/**
* Implement this in your network class/interface if you plan to have your own network defined by
* specific conductors and acceptors.
*
* @author aidancbrady
*
* @param <N> - the class/interface Type value in which you implement this
* @param <C> - the class/interface Type which makes up the network's conductor Set
* @param <A> - the class/interface Type which makes up the network's acceptor Set
*/
public interface IGridNetwork<N, C, A>
{
/**
* Refreshes and cleans up conductor references of this network, as well as updating the
* acceptor set.
*/
public void refresh();
/**
* Gets the Set of conductors that make up this network.
*
* @return conductor set
*/
public Set<C> getConductors();
/**
* Gets the Set of AVAILABLE acceptors in this network. Make sure this doesn't include any stray
* acceptors which cannot accept resources.
*
* @return available acceptor set
*/
public Set<A> getAcceptors();
/**
* Gets the list of possible connection directions for the provided TileEntity. Tile must be in
* this network.
*
* @param tile The tile to get connections for
* @return The list of directions that can be connected to for the provided tile
*/
public ArrayList<ForgeDirection> getPossibleDirections(TileEntity tile);
/**
* Creates a new network that makes up the current network and the network defined in the
* parameters. Be sure to refresh the new network inside this method.
*
* @param network - network to merge
*/
public void merge(N network);
/**
* Splits a network by the conductor referenced in the parameters. It will then create and
* refresh the new independent networks possibly created by this operation.
*
* @param connection
*/
public void split(C connection);
}

View file

@ -2,7 +2,6 @@ package universalelectricity.core.item;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import universalelectricity.core.electricity.ElectricityPack;
/**
* Some helper functions for electric items.
@ -16,23 +15,15 @@ public class ElectricItemHelper
* Recharges an electric item.
*
* @param joules - The joules being provided to the electric item
* @param voltage - The voltage in which is used to charge the electric item
* @return The total amount of joules provided by the provider.
*/
public static double chargeItem(ItemStack itemStack, double joules, double voltage)
public static float chargeItem(ItemStack itemStack, float joules)
{
if (itemStack != null)
{
if (itemStack.getItem() instanceof IItemElectric)
{
IItemElectric electricItem = (IItemElectric) itemStack.getItem();
double providingWatts = Math.min(joules, electricItem.getReceiveRequest(itemStack).getWatts());
if (providingWatts > 0)
{
ElectricityPack providedElectricity = electricItem.onReceive(ElectricityPack.getFromWatts(providingWatts, voltage), itemStack);
return providedElectricity.getWatts();
}
return ((IItemElectric) itemStack.getItem()).recharge(itemStack, Math.min(((IItemElectric) itemStack.getItem()).getTransfer(itemStack), joules), true);
}
}
@ -43,23 +34,15 @@ public class ElectricItemHelper
* Decharges an electric item.
*
* @param joules - The joules being withdrawn from the electric item
* @param voltage - The voltage in which is used to decharge the electric item
* @return The total amount of joules the provider received.
*/
public static double dechargeItem(ItemStack itemStack, double joules, double voltage)
public static float dischargeItem(ItemStack itemStack, float joules)
{
if (itemStack != null)
{
if (itemStack.getItem() instanceof IItemElectric)
{
IItemElectric electricItem = (IItemElectric) itemStack.getItem();
double requestingWatts = Math.min(joules, electricItem.getProvideRequest(itemStack).getWatts());
if (requestingWatts > 0)
{
ElectricityPack receivedElectricity = electricItem.onProvide(ElectricityPack.getFromWatts(requestingWatts, voltage), itemStack);
return receivedElectricity.getWatts();
}
return ((IItemElectric) itemStack.getItem()).discharge(itemStack, Math.min(((IItemElectric) itemStack.getItem()).getMaxElectricityStored(itemStack), joules), true);
}
}
@ -73,13 +56,13 @@ public class ElectricItemHelper
*
* @return An electrical ItemStack with a specific charge.
*/
public static ItemStack getWithCharge(ItemStack itemStack, double joules)
public static ItemStack getWithCharge(ItemStack itemStack, float joules)
{
if (itemStack != null)
{
if (itemStack.getItem() instanceof IItemElectric)
{
((IItemElectric) itemStack.getItem()).setJoules(joules, itemStack);
((IItemElectric) itemStack.getItem()).setElectricity(itemStack, joules);
return itemStack;
}
}
@ -87,12 +70,12 @@ public class ElectricItemHelper
return itemStack;
}
public static ItemStack getWithCharge(Item item, double joules)
public static ItemStack getWithCharge(Item item, float joules)
{
return getWithCharge(new ItemStack(item), joules);
}
public static ItemStack getCloneWithCharge(ItemStack itemStack, double joules)
public static ItemStack getCloneWithCharge(ItemStack itemStack, float joules)
{
return getWithCharge(itemStack.copy(), joules);
}

View file

@ -1,40 +1,56 @@
package universalelectricity.core.item;
import net.minecraft.item.ItemStack;
import universalelectricity.core.electricity.ElectricityPack;
/**
* An interface applied to all electrical items. Should be applied to the Item class.
*
* @author Calclavia
*
*/
public interface IItemElectric extends IItemElectricityStorage, IItemVoltage
public interface IItemElectric
{
/**
* Called when this item receives electricity; being charged.
* Adds energy to an item. Returns the quantity of energy that was accepted. This should always
* return 0 if the item cannot be externally charged.
*
* @return The amount of electricity that was added to the electric item.
* @param itemStack ItemStack to be charged.
* @param energy Maximum amount of energy to be sent into the item.
* @param doRecharge If false, the charge will only be simulated.
* @return Amount of energy that was accepted by the item.
*/
public ElectricityPack onReceive(ElectricityPack electricityPack, ItemStack itemStack);
public float recharge(ItemStack itemStack, float energy, boolean doRecharge);
/**
* Called when something requests electricity from this item; being decharged.
* Removes energy from an item. Returns the quantity of energy that was removed. This should
* always return 0 if the item cannot be externally discharged.
*
* @return - The amount of electricity that was removed from the electric item.
* @param itemStack ItemStack to be discharged.
* @param energy Maximum amount of energy to be removed from the item.
* @param doDischarge If false, the discharge will only be simulated.
* @return Amount of energy that was removed from the item.
*/
public ElectricityPack onProvide(ElectricityPack electricityPack, ItemStack itemStack);
public float discharge(ItemStack itemStack, float energy, boolean doDischarge);
/**
* @return How much electricity does this item want to receive/take? This will affect the speed
* in which items get charged per tick.
* Get the amount of energy currently stored in the item.
*/
public ElectricityPack getReceiveRequest(ItemStack itemStack);
public float getElectricityStored(ItemStack theItem);
/**
*
* @return How much electricity does this item want to provide/give out? This will affect the
* speed in which items get decharged per tick.
* Get the max amount of energy that can be stored in the item.
*/
public ElectricityPack getProvideRequest(ItemStack itemStack);
public float getMaxElectricityStored(ItemStack theItem);
/**
* Sets the amount of energy in the ItemStack.
*
* @param itemStack - the ItemStack.
* @param joules - Amount of electrical energy.
*/
public void setElectricity(ItemStack itemStack, float joules);
/**
* @return the energy request this ItemStack demands.
*/
public float getTransfer(ItemStack itemStack);
/**
* @return The voltage in which this item runs on.
*/
public float getVoltage(ItemStack itemStack);
}

View file

@ -1,21 +0,0 @@
package universalelectricity.core.item;
import net.minecraft.item.ItemStack;
public interface IItemElectricityStorage
{
/**
* Returns the amount of joules this unit has stored.
*/
public double getJoules(ItemStack itemStack);
/**
* Sets the amount of joules this unit has stored.
*/
public void setJoules(double joules, ItemStack itemStack);
/**
* Gets the maximum amount of joules this unit can store.
*/
public double getMaxJoules(ItemStack itemStack);
}

View file

@ -1,18 +0,0 @@
package universalelectricity.core.item;
import net.minecraft.item.ItemStack;
/**
* Applies to items that has a voltage.
*
* @author Calclavia
*
*/
public interface IItemVoltage
{
/**
* @return The voltage in which this item runs on.
*/
public double getVoltage(ItemStack itemStack);
}

View file

@ -10,7 +10,6 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import universalelectricity.core.electricity.ElectricityDisplay;
import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit;
import universalelectricity.core.electricity.ElectricityPack;
/**
* Extend from this class if your item requires electricity or to be charged. Optionally, you can
@ -33,13 +32,13 @@ public abstract class ItemElectric extends Item implements IItemElectric
public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4)
{
String color = "";
double joules = this.getJoules(itemStack);
float joules = this.getElectricityStored(itemStack);
if (joules <= this.getMaxJoules(itemStack) / 3)
if (joules <= this.getMaxElectricityStored(itemStack) / 3)
{
color = "\u00a74";
}
else if (joules > this.getMaxJoules(itemStack) * 2 / 3)
else if (joules > this.getMaxElectricityStored(itemStack) * 2 / 3)
{
color = "\u00a72";
}
@ -48,7 +47,7 @@ public abstract class ItemElectric extends Item implements IItemElectric
color = "\u00a76";
}
list.add(color + ElectricityDisplay.getDisplay(joules, ElectricUnit.JOULES) + "/" + ElectricityDisplay.getDisplay(this.getMaxJoules(itemStack), ElectricUnit.JOULES));
list.add(color + ElectricityDisplay.getDisplay(joules, ElectricUnit.JOULES) + "/" + ElectricityDisplay.getDisplay(this.getMaxElectricityStored(itemStack), ElectricUnit.JOULES));
}
/**
@ -58,51 +57,44 @@ public abstract class ItemElectric extends Item implements IItemElectric
@Override
public void onCreated(ItemStack itemStack, World par2World, EntityPlayer par3EntityPlayer)
{
this.setJoules(0, itemStack);
this.setElectricity(itemStack, 0);
}
@Override
public ElectricityPack onReceive(ElectricityPack electricityPack, ItemStack itemStack)
public float recharge(ItemStack itemStack, float energy, boolean doReceive)
{
double rejectedElectricity = Math.max((this.getJoules(itemStack) + electricityPack.getWatts()) - this.getMaxJoules(itemStack), 0);
double joulesToStore = electricityPack.getWatts() - rejectedElectricity;
this.setJoules(this.getJoules(itemStack) + joulesToStore, itemStack);
return ElectricityPack.getFromWatts(joulesToStore, this.getVoltage(itemStack));
float rejectedElectricity = Math.max((this.getElectricityStored(itemStack) + energy) - this.getMaxElectricityStored(itemStack), 0);
float energyToReceive = energy - rejectedElectricity;
if (doReceive)
{
this.setElectricity(itemStack, this.getElectricityStored(itemStack) + energyToReceive);
}
return energyToReceive;
}
@Override
public ElectricityPack onProvide(ElectricityPack electricityPack, ItemStack itemStack)
public float discharge(ItemStack itemStack, float energy, boolean doTransfer)
{
double electricityToUse = Math.min(this.getJoules(itemStack), electricityPack.getWatts());
this.setJoules(this.getJoules(itemStack) - electricityToUse, itemStack);
return ElectricityPack.getFromWatts(electricityToUse, this.getVoltage(itemStack));
float energyToTransfer = Math.min(this.getElectricityStored(itemStack), energy);
if (doTransfer)
{
this.setElectricity(itemStack, this.getElectricityStored(itemStack) - energyToTransfer);
}
return energyToTransfer;
}
@Override
public ElectricityPack getReceiveRequest(ItemStack itemStack)
public float getVoltage(ItemStack itemStack)
{
return ElectricityPack.getFromWatts(Math.min(this.getMaxJoules(itemStack) - this.getJoules(itemStack), this.getTransferRate(itemStack)), this.getVoltage(itemStack));
return 120;
}
@Override
public ElectricityPack getProvideRequest(ItemStack itemStack)
{
return ElectricityPack.getFromWatts(Math.min(this.getJoules(itemStack), this.getTransferRate(itemStack)), this.getVoltage(itemStack));
}
public double getTransferRate(ItemStack itemStack)
{
return this.getMaxJoules(itemStack) * 0.01;
}
/**
* This function sets the electriicty. Do not directly call this function. Try to use
* onReceiveElectricity or onUseElectricity instead.
*
* @param joules - The amount of electricity in joules
*/
@Override
public void setJoules(double joules, ItemStack itemStack)
public void setElectricity(ItemStack itemStack, float joules)
{
// Saves the frequency in the ItemStack
if (itemStack.getTagCompound() == null)
@ -110,13 +102,19 @@ public abstract class ItemElectric extends Item implements IItemElectric
itemStack.setTagCompound(new NBTTagCompound());
}
double electricityStored = Math.max(Math.min(joules, this.getMaxJoules(itemStack)), 0);
itemStack.getTagCompound().setDouble("electricity", electricityStored);
float electricityStored = Math.max(Math.min(joules, this.getMaxElectricityStored(itemStack)), 0);
itemStack.getTagCompound().setFloat("electricity", electricityStored);
/**
* Sets the damage as a percentage to render the bar properly.
*/
itemStack.setItemDamage((int) (100 - (electricityStored / getMaxJoules(itemStack)) * 100));
itemStack.setItemDamage((int) (100 - (electricityStored / getMaxElectricityStored(itemStack)) * 100));
}
@Override
public float getTransfer(ItemStack itemStack)
{
return this.getMaxElectricityStored(itemStack) - this.getElectricityStored(itemStack);
}
/**
@ -125,19 +123,19 @@ public abstract class ItemElectric extends Item implements IItemElectric
* @return - The amount of electricity stored in watts
*/
@Override
public double getJoules(ItemStack itemStack)
public float getElectricityStored(ItemStack itemStack)
{
if (itemStack.getTagCompound() == null)
{
return 0;
}
double electricityStored = itemStack.getTagCompound().getDouble("electricity");
float electricityStored = itemStack.getTagCompound().getFloat("electricity");
/**
* Sets the damage as a percentage to render the bar properly.
*/
itemStack.setItemDamage((int) (100 - (electricityStored / getMaxJoules(itemStack)) * 100));
itemStack.setItemDamage((int) (100 - (electricityStored / getMaxElectricityStored(itemStack)) * 100));
return electricityStored;
}
@ -148,6 +146,6 @@ public abstract class ItemElectric extends Item implements IItemElectric
par3List.add(ElectricItemHelper.getUncharged(new ItemStack(this)));
// Add an electric item to the creative list that is fully charged
ItemStack chargedItem = new ItemStack(this);
par3List.add(ElectricItemHelper.getWithCharge(chargedItem, this.getMaxJoules(chargedItem)));
par3List.add(ElectricItemHelper.getWithCharge(chargedItem, this.getMaxElectricityStored(chargedItem)));
}
}

View file

@ -8,7 +8,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.block.IConnectionProvider;
import universalelectricity.core.block.INetworkConnection;
import universalelectricity.core.vector.Vector3;
/**
@ -19,7 +19,7 @@ import universalelectricity.core.vector.Vector3;
*/
public class PathfinderChecker extends Pathfinder
{
public PathfinderChecker(final World world, final IConnectionProvider targetConnector, final IConnectionProvider... ignoreConnector)
public PathfinderChecker(final World world, final INetworkConnection targetConnector, final INetworkConnection... ignoreConnector)
{
super(new IPathCallBack()
{

View file

@ -1,7 +1,5 @@
package universalelectricity.core.vector;
import net.minecraft.util.MathHelper;
/**
* Vector2 Class is used for defining objects in a 2D space.
*
@ -52,7 +50,7 @@ public class Vector2 implements Cloneable
{
double xDifference = point1.x - point2.x;
double yDiference = point1.y - point2.y;
return MathHelper.sqrt_double(xDifference * xDifference + yDiference * yDiference);
return Math.sqrt(xDifference * xDifference + yDiference * yDiference);
}
public static double slope(Vector2 point1, Vector2 point2)
@ -66,7 +64,7 @@ public class Vector2 implements Cloneable
{
double xDifference = this.x - target.x;
double yDifference = this.y - target.y;
return MathHelper.sqrt_double(xDifference * xDifference + yDifference * yDifference);
return Math.sqrt(xDifference * xDifference + yDifference * yDifference);
}
public Vector2 add(Vector2 par1)

View file

@ -7,7 +7,6 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
@ -22,6 +21,7 @@ import net.minecraftforge.common.ForgeDirection;
public class Vector3 implements Cloneable
{
public double x;
public double y;
public double z;
@ -190,7 +190,7 @@ public class Vector3 implements Cloneable
double var2 = par1.x - par2.x;
double var4 = par1.y - par2.y;
double var6 = par1.z - par2.z;
return MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6);
return Math.sqrt(var2 * var2 + var4 * var4 + var6 * var6);
}
public double distanceTo(Vector3 vector3)
@ -198,7 +198,7 @@ public class Vector3 implements Cloneable
double var2 = vector3.x - this.x;
double var4 = vector3.y - this.y;
double var6 = vector3.z - this.z;
return MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6);
return Math.sqrt(var2 * var2 + var4 * var4 + var6 * var6);
}
public Vector3 add(Vector3 par1)
@ -290,6 +290,30 @@ public class Vector3 implements Cloneable
return new Vector3(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z));
}
public Vector3 toRound()
{
this.x = Math.round(this.x);
this.y = Math.round(this.y);
this.z = Math.round(this.z);
return this;
}
public Vector3 toCeil()
{
this.x = Math.ceil(this.x);
this.y = Math.ceil(this.y);
this.z = Math.ceil(this.z);
return this;
}
public Vector3 toFloor()
{
this.x = Math.floor(this.x);
this.y = Math.floor(this.y);
this.z = Math.floor(this.z);
return this;
}
/**
* Gets all entities inside of this position in block space.
*/
@ -363,6 +387,36 @@ public class Vector3 implements Cloneable
return par1NBTTagCompound;
}
public static Vector3 UP()
{
return new Vector3(0, 1, 0);
}
public static Vector3 DOWN()
{
return new Vector3(0, -1, 0);
}
public static Vector3 NORTH()
{
return new Vector3(0, 0, -1);
}
public static Vector3 SOUTH()
{
return new Vector3(0, 0, 1);
}
public static Vector3 WEST()
{
return new Vector3(-1, 0, 0);
}
public static Vector3 EAST()
{
return new Vector3(1, 0, 0);
}
@Override
public int hashCode()
{

View file

@ -7,7 +7,7 @@ import universalelectricity.core.block.IConnector;
public class VectorHelper
{
public static final int[][] RELATIVE_MATRIX = { { 3, 2, 1, 0, 5, 4 }, { 4, 5, 0, 1, 2, 3 }, { 0, 1, 3, 2, 5, 4 }, { 0, 1, 2, 3, 4, 5 }, { 0, 1, 5, 4, 3, 2 }, { 0, 1, 4, 5, 2, 3 } };
public static final int[][] RELATIVE_MATRIX = { { 3, 2, 1, 0, 5, 4 }, { 4, 5, 0, 1, 2, 3 }, { 0, 1, 3, 2, 4, 5 }, { 0, 1, 2, 3, 5, 4 }, { 0, 1, 5, 4, 3, 2 }, { 0, 1, 4, 5, 2, 3 } };
/**
* Finds the direction relative to a base direction.

Some files were not shown because too many files have changed in this diff Show more