Some fixes??

This commit is contained in:
modmuss50 2016-03-21 20:37:08 +00:00
parent 0c85662e14
commit 1c297634d7
2 changed files with 32 additions and 34 deletions

View file

@ -161,13 +161,13 @@ public abstract class CableMultipart extends Multipart implements INormallyOcclu
public void onNeighborBlockChange(Block block) { public void onNeighborBlockChange(Block block) {
super.onNeighborBlockChange(block); super.onNeighborBlockChange(block);
nearByChange(); nearByChange();
if(network != null){
network.buildEndpoint(network);
}
findAndJoinNetwork(getWorld(), getPos());
} }
public void nearByChange() { public void nearByChange() {
if(network == null){
findAndJoinNetwork(getWorld(), getPos());
}
checkConnectedSides(); checkConnectedSides();
for (EnumFacing direction : EnumFacing.VALUES) { for (EnumFacing direction : EnumFacing.VALUES) {
BlockPos blockPos = getPos().offset(direction); BlockPos blockPos = getPos().offset(direction);
@ -177,6 +177,7 @@ public abstract class CableMultipart extends Multipart implements INormallyOcclu
part.checkConnectedSides(); part.checkConnectedSides();
} }
} }
TRPowerNet.buildEndpoint(network);
} }
public static CableMultipart getPartFromWorld(World world, BlockPos pos, EnumFacing side) { public static CableMultipart getPartFromWorld(World world, BlockPos pos, EnumFacing side) {

View file

@ -48,14 +48,10 @@ public class TRPowerNet {
} }
cables.removeAll(oldCables); cables.removeAll(oldCables);
} }
if(tick % 20 == 0){
checkAndRemoveOldEndpoints();
}
if (!cables.isEmpty()) { if (!cables.isEmpty()) {
ArrayList<EnergyHandler> collectibles = new ArrayList(); ArrayList<EnergyHandler> collectibles = new ArrayList();
ArrayList<EnergyHandler> insertibles = new ArrayList(); ArrayList<EnergyHandler> insertibles = new ArrayList();
for (int i = 0; i < endpoints.size(); i++) { for (EnergyHandler ei : endpoints) {
EnergyHandler ei = endpoints.get(i);
if (ei.isCollectible()) { if (ei.isCollectible()) {
collectibles.add(ei); collectibles.add(ei);
} }
@ -64,8 +60,10 @@ public class TRPowerNet {
} }
} }
for (EnergyHandler handler : collectibles) { if(energy < cableType.transferRate * cables.size()){
energy += handler.collectEnergy(cableType.transferRate); for (EnergyHandler handler : collectibles) {
energy += handler.collectEnergy(cableType.transferRate);
}
} }
for (EnergyHandler handler : insertibles) { for (EnergyHandler handler : insertibles) {
@ -86,6 +84,7 @@ public class TRPowerNet {
public void removeElement(CableMultipart te) { public void removeElement(CableMultipart te) {
cables.remove(te); cables.remove(te);
this.rebuild(); this.rebuild();
this.checkAndRemoveOldEndpoints();
} }
public static void buildEndpoint(TRPowerNet net){ public static void buildEndpoint(TRPowerNet net){
@ -120,7 +119,20 @@ public class TRPowerNet {
TileEntity tile = (TileEntity) energyHandler.tile; TileEntity tile = (TileEntity) energyHandler.tile;
if(tile.getWorld().getTileEntity(tile.getPos()) == null){ if(tile.getWorld().getTileEntity(tile.getPos()) == null){
deadHandlers.add(energyHandler); deadHandlers.add(energyHandler);
} else {
boolean hasNet = false;
for(EnumFacing facing : EnumFacing.VALUES){
BlockPos pos = tile.getPos().offset(facing);
CableMultipart multipart = CableMultipart.getPartFromWorld(tile.getWorld(), pos, facing);
if(multipart != null && multipart.getNetwork() == this){
hasNet = true;
}
}
if(!hasNet){
deadHandlers.add(energyHandler);
}
} }
} }
endpoints.removeAll(deadHandlers); endpoints.removeAll(deadHandlers);
} }
@ -164,27 +176,22 @@ public class TRPowerNet {
CableMultipart wire = n.cables.get(i); CableMultipart wire = n.cables.get(i);
li.add(wire); li.add(wire);
} }
for (int i = 0; i < n.endpoints.size(); i++) { for (EnergyHandler ei : endpoints) {
EnergyHandler ei = n.endpoints.get(i); endpoints.add(ei);
EnergyHandler has = this.getHandleFrom(ei.tile);
if (has == null) {
endpoints.add(ei);
}
} }
n.clear(false); n.clear(false);
for (int i = 0; i < li.size(); i++) { for (int i = 0; i < li.size(); i++) {
CableMultipart wire = li.get(i); CableMultipart wire = li.get(i);
wire.setNetwork(this); wire.setNetwork(this);
} }
rebuild(); checkAndRemoveOldEndpoints();
MinecraftForge.EVENT_BUS.unregister(n); MinecraftForge.EVENT_BUS.unregister(n);
} }
} }
private EnergyHandler getHandleFrom(IEnergyInterfaceTile tile) { private EnergyHandler getHandleFrom(IEnergyInterfaceTile tile) {
for (int i = 0; i < endpoints.size(); i++) { for (EnergyHandler ei : endpoints) {
EnergyHandler ei = endpoints.get(i); if (ei.tile == tile)
if (ei.contains(tile))
return ei; return ei;
} }
return null; return null;
@ -204,11 +211,6 @@ public class TRPowerNet {
MinecraftForge.EVENT_BUS.unregister(this); MinecraftForge.EVENT_BUS.unregister(this);
} }
@Override
public String toString() {
return cables.size() + ": " + endpoints.toString();
}
public int addEnergy(int maxAdd, boolean simulate) { public int addEnergy(int maxAdd, boolean simulate) {
if (energy >= this.getIOLimit()) if (energy >= this.getIOLimit())
return 0; return 0;
@ -243,7 +245,7 @@ public class TRPowerNet {
public int collectEnergy(int max) { public int collectEnergy(int max) {
int total = 0; int total = 0;
if (tile.canProvideEnergy(side)) { if (tile.canProvideEnergy(side.getOpposite())) {
int collect = (int) Math.min(max, tile.getMaxOutput()); int collect = (int) Math.min(max, tile.getMaxOutput());
total = (int) tile.useEnergy(collect, false); total = (int) tile.useEnergy(collect, false);
} }
@ -252,7 +254,7 @@ public class TRPowerNet {
public int addEnergy(int max) { public int addEnergy(int max) {
int total = 0; int total = 0;
if (tile.canAcceptEnergy(side.getOpposite()) && max > 0) { if (tile.canAcceptEnergy(side) && max > 0) {
if (type.tier.ordinal() > tile.getTier().ordinal()) { if (type.tier.ordinal() > tile.getTier().ordinal()) {
if (tile instanceof TileEntity) { if (tile instanceof TileEntity) {
((TileEntity) tile).getWorld().createExplosion(new EntityTNTPrimed(((TileEntity) tile).getWorld()), ((TileEntity) tile).getPos().getX(), ((TileEntity) tile).getPos().getY(), ((TileEntity) tile).getPos().getZ(), 2.5F, true); ((TileEntity) tile).getWorld().createExplosion(new EntityTNTPrimed(((TileEntity) tile).getWorld()), ((TileEntity) tile).getPos().getX(), ((TileEntity) tile).getPos().getY(), ((TileEntity) tile).getPos().getZ(), 2.5F, true);
@ -266,7 +268,7 @@ public class TRPowerNet {
} }
public int getTotalCollectible() { public int getTotalCollectible() {
if (tile.canProvideEnergy(side)) { if (tile.canProvideEnergy(side.getOpposite())) {
return (int) Math.min(tile.getMaxOutput(), tile.getEnergy()); return (int) Math.min(tile.getMaxOutput(), tile.getEnergy());
} }
return 0; return 0;
@ -280,10 +282,5 @@ public class TRPowerNet {
return total; return total;
} }
@Override
public String toString() {
return tile + " @ " + side;
}
} }
} }