This commit is contained in:
Aidan C. Brady 2015-04-12 17:16:21 -04:00
commit da661af41c
12 changed files with 103 additions and 150 deletions

View file

@ -55,7 +55,7 @@ sourceCompatibility = '1.7'
targetCompatibility = '1.7' targetCompatibility = '1.7'
minecraft { minecraft {
version = config.minecraft_version + "-" + config.forge_version version = config.minecraft_version + "-" + config.forge_version// + "-" + config.minecraft_version
} }
processResources processResources

View file

@ -1,7 +1,7 @@
minecraft_version=1.7.10 minecraft_version=1.7.10
forge_version=10.13.2.1291 forge_version=10.13.2.1291
FMP_version=1.1.1.320 FMP_version=1.1.2.331
CCLIB_version=1.1.1.110 CCLIB_version=1.1.3.127
NEI_version=1.0.4.83 NEI_version=1.0.4.95
CCC_version=1.0.4.35 CCC_version=1.0.4.35
mod_version=8.1.1 mod_version=8.1.1

View file

@ -35,8 +35,6 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
protected Range4D packetRange = null; protected Range4D packetRange = null;
protected int ticksSinceCreate = 0;
protected int capacity = 0; protected int capacity = 0;
protected double meanCapacity = 0; protected double meanCapacity = 0;
@ -64,26 +62,9 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
worldObj = transmitter.world(); worldObj = transmitter.world();
} }
Coord4D coord = transmitter.coord();
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
{ {
A acceptor = transmitter.getAcceptor(side); updateTransmitterOnSide(transmitter, side);
if(acceptor != null)
{
Coord4D acceptorCoord = coord.getFromSide(side);
possibleAcceptors.put(acceptorCoord, acceptor);
EnumSet<ForgeDirection> directions = acceptorDirections.get(acceptorCoord);
if(directions != null)
{
directions.add(side.getOpposite());
}
else {
acceptorDirections.put(acceptorCoord, EnumSet.of(side.getOpposite()));
}
}
} }
transmitter.setTransmitterNetwork((N)this); transmitter.setTransmitterNetwork((N)this);
@ -103,9 +84,22 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
for(Entry<IGridTransmitter<A, N>, EnumSet<ForgeDirection>> entry : changedAcceptors.entrySet()) for(Entry<IGridTransmitter<A, N>, EnumSet<ForgeDirection>> entry : changedAcceptors.entrySet())
{ {
IGridTransmitter<A, N> transmitter = entry.getKey(); IGridTransmitter<A, N> transmitter = entry.getKey();
if(transmitter.isValid())
{
EnumSet<ForgeDirection> directionsChanged = entry.getValue(); EnumSet<ForgeDirection> directionsChanged = entry.getValue();
for(ForgeDirection side : directionsChanged) for(ForgeDirection side : directionsChanged)
{
updateTransmitterOnSide(transmitter, side);
}
}
}
changedAcceptors.clear();
}
}
public void updateTransmitterOnSide(IGridTransmitter<A, N> transmitter, ForgeDirection side)
{ {
A acceptor = transmitter.getAcceptor(side); A acceptor = transmitter.getAcceptor(side);
Coord4D acceptorCoord = transmitter.coord().getFromSide(side); Coord4D acceptorCoord = transmitter.coord().getFromSide(side);
@ -134,14 +128,16 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> implemen
acceptorDirections.remove(acceptorCoord); acceptorDirections.remove(acceptorCoord);
} }
} }
} else
{
possibleAcceptors.remove(acceptorCoord);
acceptorDirections.remove(acceptorCoord);
} }
} }
changedAcceptors.clear();
}
} }
public abstract void absorbBuffer(IGridTransmitter<A, N> transmitter); public abstract void absorbBuffer(IGridTransmitter<A, N> transmitter);
public abstract void clampBuffer(); public abstract void clampBuffer();

View file

@ -260,7 +260,8 @@ public class TransmitterNetworkRegistry
public void addNetworkToIterated(Coord4D from) public void addNetworkToIterated(Coord4D from)
{ {
networksFound.add(startPoint.getExternalNetwork(from)); N net = startPoint.getExternalNetwork(from);
if(net != null) networksFound.add(net);
} }
} }
} }

View file

@ -76,6 +76,10 @@ public class EnergyNetwork extends DynamicNetwork<EnergyAcceptorWrapper, EnergyN
{ {
buffer.amount = getCapacity(); buffer.amount = getCapacity();
} }
if(buffer.amount < 0)
{
buffer.amount = 0;
}
} }
@Override @Override
@ -110,12 +114,12 @@ public class EnergyNetwork extends DynamicNetwork<EnergyAcceptorWrapper, EnergyN
} }
double sent = 0; double sent = 0;
boolean tryAgain = false; boolean tryAgain;
int i = 0; int i = 0;
do { do {
double prev = sent; double prev = sent;
sent += doEmit(energyToSend-sent, tryAgain); sent += doEmit(energyToSend-sent);
tryAgain = energyToSend-sent > 0 && sent-prev > 0 && i < 100; tryAgain = energyToSend-sent > 0 && sent-prev > 0 && i < 100;
@ -139,7 +143,7 @@ public class EnergyNetwork extends DynamicNetwork<EnergyAcceptorWrapper, EnergyN
/** /**
* @return sent * @return sent
*/ */
public double doEmit(double energyToSend, boolean tryAgain) public double doEmit(double energyToSend)
{ {
double sent = 0; double sent = 0;

View file

@ -1,6 +1,5 @@
package mekanism.common.content.transporter; package mekanism.common.content.transporter;
import java.util.ArrayList;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -19,20 +18,19 @@ public class PathfinderCache
reset(); reset();
} }
public static ArrayList<Coord4D> getCache(Coord4D start, Coord4D end, EnumSet<ForgeDirection> sides) public static List<Coord4D> getCache(Coord4D start, Coord4D end, EnumSet<ForgeDirection> sides)
{ {
ArrayList<Coord4D> ret = null; List<Coord4D> ret = null;
for(Map.Entry<PathData, List<Coord4D>> entry : cachedPaths.entrySet()) for(ForgeDirection side : sides)
{ {
PathData data = entry.getKey(); PathData data = new PathData(start, end, side);
if(data.startTransporter.equals(start) && data.end.equals(end) && sides.contains(data.endSide)) List<Coord4D> test = cachedPaths.get(data);
if(ret == null || (test != null && test.size() < ret.size()))
{ {
if(ret == null || entry.getValue().size() < ret.size()) ret = test;
{
ret = (ArrayList)entry.getValue();
}
} }
} }

View file

@ -151,14 +151,14 @@ public final class TransporterPathfinder
public static class Destination implements Comparable<Destination> public static class Destination implements Comparable<Destination>
{ {
public List<Coord4D> path = new ArrayList<Coord4D>(); public List<Coord4D> path;
public Path pathType; public Path pathType;
public ItemStack rejected; public ItemStack rejected;
public double score; public double score;
public Destination(ArrayList<Coord4D> list, boolean inv, ItemStack rejects, double gScore) public Destination(List<Coord4D> list, boolean inv, ItemStack rejects, double gScore)
{ {
path = (List<Coord4D>)list.clone(); path = new ArrayList<>(list);
if(inv) if(inv)
{ {
@ -253,7 +253,7 @@ public final class TransporterPathfinder
public static Destination getPath(DestChecker checker, EnumSet<ForgeDirection> sides, ILogisticalTransporter start, Coord4D dest, TransporterStack stack, ItemStack rejects, int min) public static Destination getPath(DestChecker checker, EnumSet<ForgeDirection> sides, ILogisticalTransporter start, Coord4D dest, TransporterStack stack, ItemStack rejects, int min)
{ {
ArrayList<Coord4D> test = PathfinderCache.getCache(start.coord(), dest, sides); List<Coord4D> test = PathfinderCache.getCache(start.coord(), dest, sides);
if(test != null) if(test != null)
{ {
@ -489,7 +489,7 @@ public final class TransporterPathfinder
{ {
ArrayList<Coord4D> path = new ArrayList<Coord4D>(); ArrayList<Coord4D> path = new ArrayList<Coord4D>();
path.add(finalNode); path.add(finalNode);
path.addAll((ArrayList<Coord4D>)results.clone()); path.addAll(results);
return path; return path;
} }

View file

@ -37,7 +37,7 @@ public class MultipartTransmitter<A, N extends DynamicNetwork<A,N>> extends Tran
@Override @Override
public Coord4D coord() public Coord4D coord()
{ {
return new Coord4D(getPart().x(), getPart().y(), getPart().z()); return new Coord4D(getPart().x(), getPart().y(), getPart().z(), getPart().world().provider.dimensionId);
} }
@Override @Override

View file

@ -295,4 +295,16 @@ public class PartPressurizedTube extends PartTransmitter<IGasHandler, GasNetwork
return buffer.receive(gasStack, doEmit); return buffer.receive(gasStack, doEmit);
} }
} }
@Override
public IGasHandler getCachedAcceptor(ForgeDirection side)
{
if(cachedAcceptors[side.ordinal()] instanceof IGasHandler)
{
return super.getCachedAcceptor(side);
}
return null;
}
} }

View file

@ -158,6 +158,7 @@ public class PartUniversalCable extends PartTransmitter<EnergyAcceptorWrapper, E
super.load(nbtTags); super.load(nbtTags);
buffer.amount = nbtTags.getDouble("cacheEnergy"); buffer.amount = nbtTags.getDouble("cacheEnergy");
if(buffer.amount < 0) buffer.amount = 0;
tier = Tier.CableTier.values()[nbtTags.getInteger("tier")]; tier = Tier.CableTier.values()[nbtTags.getInteger("tier")];
} }
@ -381,6 +382,13 @@ public class PartUniversalCable extends PartTransmitter<EnergyAcceptorWrapper, E
@Override @Override
public EnergyAcceptorWrapper getCachedAcceptor(ForgeDirection side) public EnergyAcceptorWrapper getCachedAcceptor(ForgeDirection side)
{ {
return EnergyAcceptorWrapper.get(cachedAcceptors[side.ordinal()]); ConnectionType type = connectionTypes[side.ordinal()];
if(type == ConnectionType.PULL || type == ConnectionType.NONE)
{
return null;
}
return connectionMapContainsSide(currentAcceptorConnections, side) ? EnergyAcceptorWrapper.get(cachedAcceptors[side.ordinal()]) : null;
} }
} }

View file

@ -25,30 +25,6 @@ import cofh.api.energy.IEnergyReceiver;
public final class CableUtils public final class CableUtils
{ {
private static Set<ForgeDirection> allSides = EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN));
/**
* Gets all the connected energy acceptors, whether IC2-based or BuildCraft-based, surrounding a specific tile entity.
* @param tileEntity - center tile entity
* @return TileEntity[] of connected acceptors
*/
public static TileEntity[] getConnectedEnergyAcceptors(TileEntity tileEntity)
{
TileEntity[] acceptors = new TileEntity[] {null, null, null, null, null, null};
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{
TileEntity acceptor = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj());
if(isEnergyAcceptor(acceptor))
{
acceptors[orientation.ordinal()] = acceptor;
}
}
return acceptors;
}
public static boolean isEnergyAcceptor(TileEntity tileEntity) public static boolean isEnergyAcceptor(TileEntity tileEntity)
{ {
return (tileEntity instanceof IStrictEnergyAcceptor || return (tileEntity instanceof IStrictEnergyAcceptor ||
@ -56,28 +32,6 @@ public final class CableUtils
(MekanismUtils.useRF() && tileEntity instanceof IEnergyReceiver)); (MekanismUtils.useRF() && tileEntity instanceof IEnergyReceiver));
} }
/**
* Gets all the connected cables around a specific tile entity.
* @param tileEntity - center tile entity
* @return TileEntity[] of connected cables
*/
public static TileEntity[] getConnectedCables(TileEntity tileEntity)
{
TileEntity[] cables = new TileEntity[] {null, null, null, null, null, null};
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{
TileEntity cable = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj());
if(isCable(cable))
{
cables[orientation.ordinal()] = cable;
}
}
return cables;
}
public static boolean isCable(TileEntity tileEntity) public static boolean isCable(TileEntity tileEntity)
{ {
if(tileEntity instanceof ITransmitterTile) if(tileEntity instanceof ITransmitterTile)
@ -87,16 +41,6 @@ public final class CableUtils
return false; return false;
} }
/**
* Gets all the adjacent connections to a TileEntity.
* @param tileEntity - center TileEntity
* @return boolean[] of adjacent connections
*/
public static boolean[] getConnections(TileEntity tileEntity)
{
return getConnections(tileEntity, allSides);
}
/** /**
* Gets the adjacent connections to a TileEntity, from a subset of its sides. * Gets the adjacent connections to a TileEntity, from a subset of its sides.
* @param tileEntity - center TileEntity * @param tileEntity - center TileEntity
@ -127,6 +71,11 @@ public final class CableUtils
*/ */
public static boolean isValidAcceptorOnSide(TileEntity cableEntity, TileEntity tile, ForgeDirection side) public static boolean isValidAcceptorOnSide(TileEntity cableEntity, TileEntity tile, ForgeDirection side)
{ {
if(isCable(tile))
{
return false;
}
if(isEnergyAcceptor(tile) && isConnectable(cableEntity, tile, side)) if(isEnergyAcceptor(tile) && isConnectable(cableEntity, tile, side))
{ {
return true; return true;
@ -164,24 +113,6 @@ public final class CableUtils
(MekanismUtils.useRF() && tileEntity instanceof IEnergyProvider && ((IEnergyConnection)tileEntity).canConnectEnergy(side.getOpposite())); (MekanismUtils.useRF() && tileEntity instanceof IEnergyProvider && ((IEnergyConnection)tileEntity).canConnectEnergy(side.getOpposite()));
} }
/**
* Whether or not a cable can connect to a specific acceptor.
* @param side - side to check
* @param tile - cable TileEntity
* @return whether or not the cable can connect to the specific side
*/
public static boolean canConnectToAcceptor(ForgeDirection side, TileEntity tile)
{
if(tile == null)
{
return false;
}
TileEntity tileEntity = Coord4D.get(tile).getFromSide(side).getTileEntity(tile.getWorldObj());
return isConnectable(tile, tileEntity, side);
}
public static boolean isConnectable(TileEntity orig, TileEntity tileEntity, ForgeDirection side) public static boolean isConnectable(TileEntity orig, TileEntity tileEntity, ForgeDirection side)
{ {
if(tileEntity instanceof ITransmitterTile) if(tileEntity instanceof ITransmitterTile)

View file

@ -246,7 +246,7 @@ item.dirtySilverDust.name=Dreckiger Silberstaub
item.dirtyLeadDust.name=Dreckiger Bleistaub item.dirtyLeadDust.name=Dreckiger Bleistaub
//Ingots //Ingots
item.obsidianIngot.name=Obsidianbarren item.obsidianIngot.name=Raffinierter Obsidianbarren
item.osmiumIngot.name=Osmiumbarren item.osmiumIngot.name=Osmiumbarren
item.bronzeIngot.name=Bronzebarren item.bronzeIngot.name=Bronzebarren
item.glowstoneIngot.name=Glowstonebarren item.glowstoneIngot.name=Glowstonebarren
@ -477,6 +477,8 @@ gui.toggleCooling=Kühlmessungen umschalten
gui.coolingMeasurements=Aktive Kühlung gui.coolingMeasurements=Aktive Kühlung
gui.redstoneOutputMode=Redstone-Modus gui.redstoneOutputMode=Redstone-Modus
gui.entityDetection=Entity-Erkennung gui.entityDetection=Entity-Erkennung
gui.moveUp=Nach oben
gui.moveDown=Nach unten
gui.reactor.injectionRate=Injektionsrate gui.reactor.injectionRate=Injektionsrate
@ -731,6 +733,7 @@ tooltip.ReactorController=Der alles kontrollierende Block für !nden gesamten Fu
tooltip.ReactorFrame=Verstärkte Hülle, welche im !nFusionsreaktor-Multiblock verwendet werden kann. tooltip.ReactorFrame=Verstärkte Hülle, welche im !nFusionsreaktor-Multiblock verwendet werden kann.
tooltip.ReactorNeutronCapturePlate=Ein Block, der zum Blockieren der Strahlung !naus einem Fusionsreaktors verwendet werden kann !nund bei der Produktion von Tritium hilft. tooltip.ReactorNeutronCapturePlate=Ein Block, der zum Blockieren der Strahlung !naus einem Fusionsreaktors verwendet werden kann !nund bei der Produktion von Tritium hilft.
tooltip.ReactorPort=Ein Block aus verstärktem Material, welcher sowohl den Gas- als auch den Energietransfer des Fusionsreaktors regeln kann. tooltip.ReactorPort=Ein Block aus verstärktem Material, welcher sowohl den Gas- als auch den Energietransfer des Fusionsreaktors regeln kann.
tooltip.ReactorLogicAdapter=Ein Block, welcher verwendet werden kann, !num einen Reaktor mit Redstone zu überwachen.
tooltip.OsmiumOre=Ein hartes Mineral, dass in fast jeder !nHöhenlage der Welt gefunden werden kann. !nEs ist für seine zahlreichen Verwendungszwecke !nin der Konstruktion von Maschinen bekannt. tooltip.OsmiumOre=Ein hartes Mineral, dass in fast jeder !nHöhenlage der Welt gefunden werden kann. !nEs ist für seine zahlreichen Verwendungszwecke !nin der Konstruktion von Maschinen bekannt.
tooltip.CopperOre=Ein häufig vorkommendes, leitfähiges Material, dass !nfür die Produktion von Kabeln verwendet werden kann. !nSeine Fähigkeit, großer Hitze zu widerstehen, !nmacht es auch essentiell für fortgeschrittene Maschinen. tooltip.CopperOre=Ein häufig vorkommendes, leitfähiges Material, dass !nfür die Produktion von Kabeln verwendet werden kann. !nSeine Fähigkeit, großer Hitze zu widerstehen, !nmacht es auch essentiell für fortgeschrittene Maschinen.