diff --git a/Universal-Electricity b/Universal-Electricity index b53c78b4..d2034508 160000 --- a/Universal-Electricity +++ b/Universal-Electricity @@ -1 +1 @@ -Subproject commit b53c78b488458354dc7f0cdb9421f19865458e24 +Subproject commit d2034508e7de77a7b64905a0236a6356ad2a2478 diff --git a/build.xml b/build.xml index f4d76035..fbf7bc79 100644 --- a/build.xml +++ b/build.xml @@ -67,8 +67,8 @@ - - + + diff --git a/src/resonantinduction/MultipartRI.java b/src/resonantinduction/MultipartRI.java index 34250eab..74d44932 100644 --- a/src/resonantinduction/MultipartRI.java +++ b/src/resonantinduction/MultipartRI.java @@ -16,7 +16,8 @@ public class MultipartRI implements IPartFactory { MultiPartRegistry.registerParts(this, new String[] { "resonant_induction_flat_wire", "resonant_induction_multimeter", "resonant_induction_transformer" }); MultipartGenerator.registerTrait("universalelectricity.api.energy.IConductor", "resonantinduction.wire.part.TraitConductor"); - //MultipartGenerator.registerTrait("ic2.api.energy.tile.IEnergySink", "resonantinduction.wire.part.TraitEnergySink"); + MultipartGenerator.registerTrait("cofh.api.energy.IEnergyHandler", "resonantinduction.wire.part.TraitEnergyHandler"); + MultipartGenerator.registerTrait("ic2.api.energy.tile.IEnergySink", "resonantinduction.wire.part.TraitEnergySink"); } @Override diff --git a/src/resonantinduction/ResonantInduction.java b/src/resonantinduction/ResonantInduction.java index bbf964d5..cd8edba8 100644 --- a/src/resonantinduction/ResonantInduction.java +++ b/src/resonantinduction/ResonantInduction.java @@ -214,7 +214,7 @@ public class ResonantInduction /** * Set reference itemstacks */ - TabRI.ITEMSTACK = new ItemStack(itemPartWire); + TabRI.ITEMSTACK = new ItemStack(blockBattery); for (EnumWireMaterial material : EnumWireMaterial.values()) { diff --git a/src/resonantinduction/wire/EnumWireMaterial.java b/src/resonantinduction/wire/EnumWireMaterial.java index 5513dd13..943ed9ed 100644 --- a/src/resonantinduction/wire/EnumWireMaterial.java +++ b/src/resonantinduction/wire/EnumWireMaterial.java @@ -17,15 +17,15 @@ import codechicken.lib.colour.ColourRGBA; public enum EnumWireMaterial { /** Copper: General. */ - COPPER("Copper", 1.68f, 5, 10, 184, 115, 51), + COPPER("Copper", 1.68f, 5, 30, 184, 115, 51), /** Tin: Low shock, cheap */ - TIN("Tin", 11f, 1, 5, 132, 132, 130), + TIN("Tin", 11f, 1, 15, 132, 132, 130), /** Iron: High Capacity */ - IRON("Iron", 10f, 3, 80, 97, 102, 105), + IRON("Iron", 10f, 3, 100, 97, 102, 105), /** Aluminum: High Shock */ - ALUMINUM("Aluminum", 2.82f, 10, 70, 215, 205, 181), + ALUMINUM("Aluminum", 2.82f, 10, 80, 215, 205, 181), /** Aluminum: Low Resistance */ - SILVER("Silver", 1.59f, 5, 20, 192, 192, 192), + SILVER("Silver", 1.59f, 5, 40, 192, 192, 192), /** Superconductor: Over-powered */ SUPERCONDUCTOR("Superconductor", 0, 10, 200, 255, 255, 1); @@ -40,7 +40,7 @@ public enum EnumWireMaterial { this.name = name; /** Multiply the realistic resistance by a factor for game balance. */ - this.resistance = resistance * 2; + this.resistance = resistance; this.damage = electrocutionDamage; this.maxAmps = maxAmps; this.color = new ColourRGBA(r, g, b, 255); diff --git a/src/resonantinduction/wire/part/PartConductor.java b/src/resonantinduction/wire/part/PartConductor.java index 3c1639ef..9a6936b0 100644 --- a/src/resonantinduction/wire/part/PartConductor.java +++ b/src/resonantinduction/wire/part/PartConductor.java @@ -124,7 +124,7 @@ public abstract class PartConductor extends PartAdvanced implements IConductor @Override public void onWorldJoin() { - if (tile() instanceof IEnergyTile) + if (tile() instanceof IEnergyTile && !world().isRemote) { MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent((IEnergyTile) tile())); } @@ -133,7 +133,7 @@ public abstract class PartConductor extends PartAdvanced implements IConductor @Override public void onWorldSeparate() { - if (tile() instanceof IEnergyTile) + if (tile() instanceof IEnergyTile && !world().isRemote) { MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent((IEnergyTile) tile())); } diff --git a/src/resonantinduction/wire/part/TraitConductor.java b/src/resonantinduction/wire/part/TraitConductor.java index dca3d512..7527508b 100644 --- a/src/resonantinduction/wire/part/TraitConductor.java +++ b/src/resonantinduction/wire/part/TraitConductor.java @@ -12,7 +12,7 @@ import codechicken.multipart.TileMultipart; public class TraitConductor extends TileMultipart implements IConductor { - public Set interfaces = new HashSet(); + public Set ueInterfaces = new HashSet(); @Override public void copyFrom(TileMultipart that) @@ -21,7 +21,7 @@ public class TraitConductor extends TileMultipart implements IConductor if (that instanceof TraitConductor) { - this.interfaces = ((TraitConductor) that).interfaces; + this.ueInterfaces = ((TraitConductor) that).ueInterfaces; } } @@ -32,7 +32,7 @@ public class TraitConductor extends TileMultipart implements IConductor if (part instanceof IConductor) { - this.interfaces.add((IConductor) part); + this.ueInterfaces.add((IConductor) part); } } @@ -43,7 +43,7 @@ public class TraitConductor extends TileMultipart implements IConductor if (part instanceof IConductor) { - this.interfaces.remove(part); + this.ueInterfaces.remove(part); } } @@ -51,13 +51,13 @@ public class TraitConductor extends TileMultipart implements IConductor public void clearParts() { super.clearParts(); - this.interfaces.clear(); + this.ueInterfaces.clear(); } @Override public Object[] getConnections() { - for (IConductor conductor : this.interfaces) + for (IConductor conductor : this.ueInterfaces) { return conductor.getConnections(); } @@ -68,7 +68,7 @@ public class TraitConductor extends TileMultipart implements IConductor @Override public IEnergyNetwork getNetwork() { - for (IConductor conductor : this.interfaces) + for (IConductor conductor : this.ueInterfaces) { return conductor.getNetwork(); } @@ -79,7 +79,7 @@ public class TraitConductor extends TileMultipart implements IConductor @Override public void setNetwork(IEnergyNetwork network) { - for (IConductor conductor : this.interfaces) + for (IConductor conductor : this.ueInterfaces) { conductor.setNetwork(network); } @@ -88,7 +88,7 @@ public class TraitConductor extends TileMultipart implements IConductor @Override public boolean canConnect(ForgeDirection direction) { - for (IConductor conductor : this.interfaces) + for (IConductor conductor : this.ueInterfaces) { if (conductor.canConnect(direction.getOpposite())) { @@ -113,7 +113,7 @@ public class TraitConductor extends TileMultipart implements IConductor { TMultiPart part = this.partMap(dir.ordinal()); - if (this.interfaces.contains(part)) + if (this.ueInterfaces.contains(part)) { return ((IConductor) part).onReceiveEnergy(from, receive, doReceive); } @@ -135,14 +135,14 @@ public class TraitConductor extends TileMultipart implements IConductor { long energyLoss = 0; - if (this.interfaces.size() > 0) + if (this.ueInterfaces.size() > 0) { - for (IConductor conductor : this.interfaces) + for (IConductor conductor : this.ueInterfaces) { energyLoss += conductor.getResistance(); } - energyLoss /= this.interfaces.size(); + energyLoss /= this.ueInterfaces.size(); } return energyLoss; @@ -153,14 +153,14 @@ public class TraitConductor extends TileMultipart implements IConductor { long capacitance = 0; - if (this.interfaces.size() > 0) + if (this.ueInterfaces.size() > 0) { - for (IConductor conductor : this.interfaces) + for (IConductor conductor : this.ueInterfaces) { capacitance += conductor.getTransferCapacity(); } - capacitance /= this.interfaces.size(); + capacitance /= this.ueInterfaces.size(); } return capacitance; diff --git a/src/resonantinduction/wire/part/TraitEnergyHandler.java b/src/resonantinduction/wire/part/TraitEnergyHandler.java new file mode 100644 index 00000000..de5f62df --- /dev/null +++ b/src/resonantinduction/wire/part/TraitEnergyHandler.java @@ -0,0 +1,120 @@ +package resonantinduction.wire.part; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraftforge.common.ForgeDirection; +import codechicken.multipart.TMultiPart; +import codechicken.multipart.TileMultipart; +import cofh.api.energy.IEnergyHandler; + +public class TraitEnergyHandler extends TileMultipart implements IEnergyHandler +{ + public Set teInterfaces = new HashSet(); + + @Override + public void copyFrom(TileMultipart that) + { + super.copyFrom(that); + + if (that instanceof TraitEnergyHandler) + { + this.teInterfaces = ((TraitEnergyHandler) that).teInterfaces; + } + } + + @Override + public void bindPart(TMultiPart part) + { + super.bindPart(part); + + if (part instanceof IEnergyHandler) + { + this.teInterfaces.add((IEnergyHandler) part); + } + } + + @Override + public void partRemoved(TMultiPart part, int p) + { + super.partRemoved(part, p); + + if (part instanceof IEnergyHandler) + { + this.teInterfaces.remove(part); + } + } + + @Override + public void clearParts() + { + super.clearParts(); + this.teInterfaces.clear(); + } + + @Override + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) + { + /** + * Try out different sides to try to inject energy into. + */ + if (this.partMap(from.ordinal()) == null) + { + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if (dir != from.getOpposite()) + { + TMultiPart part = this.partMap(dir.ordinal()); + + if (this.teInterfaces.contains(part)) + { + return ((IEnergyHandler) part).receiveEnergy(from, maxReceive, simulate); + } + } + } + } + + return 0; + } + + @Override + public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) + { + return 0; + } + + @Override + public boolean canInterface(ForgeDirection from) + { + if (this.partMap(from.ordinal()) == null) + { + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if (dir != from.getOpposite()) + { + TMultiPart part = this.partMap(dir.ordinal()); + + if (this.teInterfaces.contains(part)) + { + return ((IEnergyHandler) part).canInterface(from); + } + } + } + } + + return false; + } + + @Override + public int getEnergyStored(ForgeDirection from) + { + return 0; + } + + @Override + public int getMaxEnergyStored(ForgeDirection from) + { + return 0; + } + +} diff --git a/src/resonantinduction/wire/part/TraitEnergySink.java b/src/resonantinduction/wire/part/TraitEnergySink.java index 1a0b27c9..e77d0725 100644 --- a/src/resonantinduction/wire/part/TraitEnergySink.java +++ b/src/resonantinduction/wire/part/TraitEnergySink.java @@ -5,8 +5,6 @@ import ic2.api.energy.tile.IEnergySink; import java.util.HashSet; import java.util.Set; -import universalelectricity.api.CompatibilityType; -import universalelectricity.api.energy.IConductor; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import codechicken.multipart.TMultiPart; @@ -14,16 +12,16 @@ import codechicken.multipart.TileMultipart; public class TraitEnergySink extends TileMultipart implements IEnergySink { - public Set interfaces = new HashSet(); + public Set icInterfaces = new HashSet(); @Override public void copyFrom(TileMultipart that) { super.copyFrom(that); - if (that instanceof TraitConductor) + if (that instanceof TraitEnergySink) { - this.interfaces = ((TraitConductor) that).interfaces; + this.icInterfaces = ((TraitEnergySink) that).icInterfaces; } } @@ -32,9 +30,9 @@ public class TraitEnergySink extends TileMultipart implements IEnergySink { super.bindPart(part); - if (part instanceof IConductor) + if (part instanceof IEnergySink) { - this.interfaces.add((IConductor) part); + this.icInterfaces.add((IEnergySink) part); } } @@ -43,9 +41,9 @@ public class TraitEnergySink extends TileMultipart implements IEnergySink { super.partRemoved(part, p); - if (part instanceof IConductor) + if (part instanceof IEnergySink) { - this.interfaces.remove(part); + this.icInterfaces.remove(part); } } @@ -53,7 +51,7 @@ public class TraitEnergySink extends TileMultipart implements IEnergySink public void clearParts() { super.clearParts(); - this.interfaces.clear(); + this.icInterfaces.clear(); } @Override @@ -67,9 +65,9 @@ public class TraitEnergySink extends TileMultipart implements IEnergySink { TMultiPart part = this.partMap(dir.ordinal()); - if (this.interfaces.contains(part)) + if (this.icInterfaces.contains(part)) { - return ((IConductor) part).canConnect(from); + return ((IEnergySink) part).acceptsEnergyFrom(emitter, from); } } } @@ -87,9 +85,9 @@ public class TraitEnergySink extends TileMultipart implements IEnergySink { TMultiPart part = this.partMap(dir.ordinal()); - if (this.interfaces.contains(part)) + if (this.icInterfaces.contains(part)) { - return ((IConductor) part).onReceiveEnergy(ForgeDirection.UNKNOWN, Integer.MAX_VALUE, false) * CompatibilityType.INDUSTRIALCRAFT.ratio; + return ((IEnergySink) part).demandedEnergyUnits(); } } @@ -99,8 +97,6 @@ public class TraitEnergySink extends TileMultipart implements IEnergySink @Override public double injectEnergyUnits(ForgeDirection from, double amount) { - double consumed = 0; - if (this.partMap(from.ordinal()) == null) { for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) @@ -109,15 +105,15 @@ public class TraitEnergySink extends TileMultipart implements IEnergySink { TMultiPart part = this.partMap(dir.ordinal()); - if (this.interfaces.contains(part)) + if (this.icInterfaces.contains(part)) { - consumed = ((IConductor) part).onReceiveEnergy(from, (long) (amount * CompatibilityType.INDUSTRIALCRAFT.reciprocal_ratio), true) * CompatibilityType.INDUSTRIALCRAFT.ratio; + return ((IEnergySink) part).injectEnergyUnits(from, amount); } } } } - return amount - consumed; + return amount; } @Override