package mekanism.common.content.boiler; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import mekanism.api.Coord4D; import mekanism.common.multiblock.MultiblockCache; import mekanism.common.multiblock.MultiblockManager; import mekanism.common.tile.TileEntityBoiler; import mekanism.common.tile.TileEntityMultiblock; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; /** * Created by ben on 09/01/15. */ public class BoilerManager extends MultiblockManager<SynchronizedBoilerData> { public BoilerManager(String s) { super(s); } public void tickSelf(World world) { ArrayList<Integer> idsToKill = new ArrayList<Integer>(); HashMap<Integer, HashSet<Coord4D>> tilesToKill = new HashMap<Integer, HashSet<Coord4D>>(); for(Map.Entry<Integer, MultiblockCache<SynchronizedBoilerData>> entry : inventories.entrySet()) { int inventoryID = entry.getKey(); HashSet<TileEntityBoiler> boilers = new HashSet<TileEntityBoiler>(); for(Coord4D obj : entry.getValue().locations) { if(obj.dimensionId == world.provider.dimensionId && obj.exists(world)) { TileEntity tileEntity = obj.getTileEntity(world); if(!(tileEntity instanceof TileEntityMultiblock) || ((TileEntityMultiblock)tileEntity).getManager() != this || (getStructureId(((TileEntityMultiblock<?>)tileEntity)) != -1 && getStructureId(((TileEntityMultiblock)tileEntity)) != inventoryID)) { if(!tilesToKill.containsKey(inventoryID)) { tilesToKill.put(inventoryID, new HashSet<Coord4D>()); } tilesToKill.get(inventoryID).add(obj); } else if(tileEntity instanceof TileEntityBoiler) { ((TileEntityBoiler)tileEntity).simulateHeat(); boilers.add((TileEntityBoiler) tileEntity); } } } if(!boilers.isEmpty()) { SynchronizedBoilerData data = boilers.iterator().next().getSynchronizedData(); if(data != null) { boilers.iterator().next().getSynchronizedData().applyTemperatureChange(); } for (TileEntityBoiler boiler : boilers) { boiler.applyTemperatureChange(); } } if(entry.getValue().locations.isEmpty()) { idsToKill.add(inventoryID); } } for(Map.Entry<Integer, HashSet<Coord4D>> entry : tilesToKill.entrySet()) { for(Coord4D obj : entry.getValue()) { inventories.get(entry.getKey()).locations.remove(obj); } } for(int inventoryID : idsToKill) { inventories.remove(inventoryID); } } }