diff options
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r-- | src/main/java/gregtech/common/GT_Pollution.java | 4 | ||||
-rw-r--r-- | src/main/java/gregtech/common/GT_Proxy.java | 54 |
2 files changed, 30 insertions, 28 deletions
diff --git a/src/main/java/gregtech/common/GT_Pollution.java b/src/main/java/gregtech/common/GT_Pollution.java index 5ba3ea5cf9..b234cb319f 100644 --- a/src/main/java/gregtech/common/GT_Pollution.java +++ b/src/main/java/gregtech/common/GT_Pollution.java @@ -100,6 +100,7 @@ public class GT_Pollution { int[] tArray = GT_Proxy.chunkData.get(tPos); tArray[1] = tPollution; GT_Proxy.chunkData.remove(tPos); + //tArray[2]|=0x01; GT_Proxy.chunkData.put(tPos, tArray); //Create Pollution effects // Smog filter TODO @@ -201,7 +202,7 @@ public class GT_Pollution { try{ ChunkPosition tPos = new ChunkPosition(aPos.chunkPosX>>4, 1, aPos.chunkPosZ>>4); // System.out.println("add pollution x: "+ tPos.chunkPosX +" z: " + tPos.chunkPosZ +" poll: "+aPollution); - int[] tData = new int[2]; + int[] tData = new int[3]; if(GT_Proxy.chunkData.containsKey(tPos)){ tData = GT_Proxy.chunkData.get(tPos); if(tData.length>1){ @@ -209,6 +210,7 @@ public class GT_Pollution { } }else{ tData[1]=GT_Utility.safeInt((long)tData[1]+aPollution);//tData[1] += aPollution; + //tData[2]|=0x01; GT_Proxy.chunkData.put(tPos, tData); } }catch(Exception e){} diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index f073bb897e..2fa7176db8 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -1397,7 +1397,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { @SubscribeEvent public void onWorldTickEvent(TickEvent.WorldTickEvent aEvent) { if(aEvent.world.provider.dimensionId == 0) - mTicksUntilNextCraftSound--; + mTicksUntilNextCraftSound--; if (aEvent.side.isServer()) { if (this.mUniverse == null) { this.mUniverse = aEvent.world; @@ -1872,14 +1872,18 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { public static final HashMap<ChunkPosition, int[]> chunkData = new HashMap<ChunkPosition, int[]>(5000); + private static final byte oilVer=(byte)0x01; + @SubscribeEvent public void handleChunkSaveEvent(ChunkDataEvent.Save event) - { + {//by the laws of logic cannot save an never-loaded chunk data... and if there is no data to save GREAT :D ChunkPosition tPos = new ChunkPosition(event.getChunk().xPosition,1,event.getChunk().zPosition); if(chunkData.containsKey(tPos)){ int[] tInts = chunkData.get(tPos); if(tInts.length>0){event.getData().setInteger("GTOIL", tInts[0]);} - if(tInts.length>1){event.getData().setInteger("GTPOLLUTION", tInts[1]);}} + if(tInts.length>1){event.getData().setInteger("GTPOLLUTION", tInts[1]);} + } + event.getData().setByte("GTOILVER",oilVer); } @SubscribeEvent @@ -1887,39 +1891,35 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { { int tOil = 0; int tPollution = 0; - + //place ChunkPosition tPos = new ChunkPosition(event.getChunk().xPosition,1,event.getChunk().zPosition); - int[] tData = new int[2]; - if(chunkData.containsKey(tPos)){ - tData = chunkData.get(tPos); + boolean notLoaded=true;//was it loaded? + + int[] tData = new int[]{0,0,0};//initialize with defaults + if(chunkData.containsKey(tPos)){//i have the data loaded... + tData = chunkData.get(tPos);//if the array had 3 ints... + if(tData[2]>0x01)notLoaded=false; chunkData.remove(tPos); - } + }//if doesn't contain stuff the array will still be 2 long - if(event.getData().hasKey("GTOIL")){ - if(tData.length>2){ - tOil = tData[0]; - }else{ - tOil += event.getData().getInteger("GTOIL"); - } + if(event.getData().hasKey("GTPOLLUTION") && notLoaded){ + tPollution=GT_Utility.safeInt((long)tData[1]+(long)event.getData().getInteger("GTPOLLUTION")); }else{ - if(tData[0]!=0){ - tOil = tData[0]; - } + tPollution=tData[1]; } - if(event.getData().hasKey("GTPOLLUTION")){ - if(tData.length>2){ - tPollution = tData[1]; - }else{ - tPollution += event.getData().getInteger("GTPOLLUTION"); - } + if(!event.getData().hasKey("GTOILVER") || event.getData().getByte("GTOILVER")!=oilVer) { + chunkData.put(tPos, new int[]{ 0,tPollution,0x02});//anything without type is ok, 0 doesn't have fluid type + return; + } + + if(event.getData().hasKey("GTOIL") && notLoaded){ + tOil=event.getData().getInteger("GTOIL"); }else{ - if(tData[1]!=0){ - tPollution = tData[1]; - } + tOil=tData[0]; } - chunkData.put(tPos, new int[]{ tOil,tPollution,-1}); + chunkData.put(tPos, new int[]{ tOil,tPollution,0x02}); } public static class OreDictEventContainer { |