Added lesu storage block counting

This commit is contained in:
modmuss50 2015-06-14 13:35:36 +01:00
parent 81f75abf22
commit 51c91aaccb
7 changed files with 198 additions and 28 deletions

View file

@ -0,0 +1,51 @@
package techreborn.tiles.lesu;
import java.util.ArrayList;
public class LesuNetwork {
public ArrayList<TileLesuStorage> storages = new ArrayList<TileLesuStorage>();
public void addElement(TileLesuStorage lesuStorage){
if(!storages.contains(lesuStorage)){
storages.add(lesuStorage);
}
}
public void removeElement(TileLesuStorage lesuStorage){
storages.remove(lesuStorage);
rebuild();
}
private void rebuild(){
for(TileLesuStorage lesuStorage : storages){
lesuStorage.findAndJoinNetwork(lesuStorage.getWorldObj(), lesuStorage.xCoord, lesuStorage.yCoord, lesuStorage.zCoord);
}
}
public void merge(LesuNetwork network){
if(network != this){
ArrayList<TileLesuStorage> tileLesuStorages = new ArrayList<TileLesuStorage>();
tileLesuStorages.addAll(network.storages);
network.clear(false);
for(TileLesuStorage lesuStorage : tileLesuStorages){
lesuStorage.setNetwork(this);
}
}
}
private void clear(boolean clearTiles) {
if (clearTiles) {
for(TileLesuStorage tileLesuStorage : storages){
tileLesuStorage.resetNetwork();
}
}
storages.clear();
}
public void printInfo(){
System.out.println(storages.size());
}
}

View file

@ -0,0 +1,37 @@
package techreborn.tiles.lesu;
import net.minecraftforge.common.util.ForgeDirection;
import techreborn.tiles.TileAesu;
import java.util.ArrayList;
public class TileLesu extends TileAesu {
public int baseEU = 1000000000;
public int storgeBlockSize = 100000;
private ArrayList<LesuNetwork> countedNetworks = new ArrayList<LesuNetwork>();
public int connectedBlocks = 0;
@Override
public void updateEntity() {
if(worldObj.isRemote){
return;
}
countedNetworks.clear();
connectedBlocks = 0;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS){
if(worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ) instanceof TileLesuStorage){
if(((TileLesuStorage) worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ)).network != null){
LesuNetwork network = ((TileLesuStorage) worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ)).network;
if(!countedNetworks.contains(network)){
connectedBlocks += network.storages.size();
countedNetworks.add(network);
}
}
}
}
System.out.println(connectedBlocks);
}
}

View file

@ -0,0 +1,57 @@
package techreborn.tiles.lesu;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import techreborn.tiles.TileMachineBase;
public class TileLesuStorage extends TileMachineBase {
public LesuNetwork network;
@Override
public void updateEntity() {
super.updateEntity();
if(network == null){
findAndJoinNetwork(worldObj, xCoord, yCoord, zCoord);
} else {
//network.printInfo();
}
}
public final void findAndJoinNetwork(World world, int x, int y, int z) {
network = new LesuNetwork();
network.addElement(this);
for(ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS){
if(world.getTileEntity(x + direction.offsetX, y + direction.offsetY, z + direction.offsetZ) instanceof TileLesuStorage){
TileLesuStorage lesu = (TileLesuStorage) world.getTileEntity(x + direction.offsetX, y + direction.offsetY, z + direction.offsetZ);
if(lesu.network != null){
lesu.network.merge(network);
}
}
}
}
public final void setNetwork(LesuNetwork n) {
if (n == null) {
} else {
network = n;
network.addElement(this);
}
}
public final void resetNetwork() {
network = null;
}
public final void removeFromNetwork() {
if (network == null) {
} else
network.removeElement(this);
}
public final void rebuildNetwork() {
this.removeFromNetwork();
this.resetNetwork();
this.findAndJoinNetwork(worldObj, xCoord, yCoord, zCoord);
}
}