Updated to new UE, not done with complete implementation
This commit is contained in:
parent
13400fdc3d
commit
5d26f8e229
143 changed files with 1813 additions and 4424 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 + " -------------"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.");
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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())
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
53
common/universalelectricity/core/block/IElectrical.java
Normal file
53
common/universalelectricity/core/block/IElectrical.java
Normal 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();
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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() + "]";
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
353
common/universalelectricity/core/grid/ElectricityNetwork.java
Normal file
353
common/universalelectricity/core/grid/ElectricityNetwork.java
Normal 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() + "]";
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
66
common/universalelectricity/core/grid/IGridNetwork.java
Normal file
66
common/universalelectricity/core/grid/IGridNetwork.java
Normal 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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue