aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/GT_Pollution.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/GT_Pollution.java')
-rw-r--r--src/main/java/gregtech/common/GT_Pollution.java73
1 files changed, 65 insertions, 8 deletions
diff --git a/src/main/java/gregtech/common/GT_Pollution.java b/src/main/java/gregtech/common/GT_Pollution.java
index feeeafe4b0..743a1c5ceb 100644
--- a/src/main/java/gregtech/common/GT_Pollution.java
+++ b/src/main/java/gregtech/common/GT_Pollution.java
@@ -1,28 +1,85 @@
-package gregtech.common;
+ package gregtech.common;
+import java.util.ArrayList;
+import java.util.List;
+
+import gregtech.api.util.GT_Utility;
+import net.minecraft.client.Minecraft;
import net.minecraft.world.ChunkPosition;
+import net.minecraft.world.WorldManager;
public class GT_Pollution {
-// List<ChunkPosition> list = new ArrayList<ChunkPosition>(chunkData.keySet());
+ static List<ChunkPosition> tList = null;
+ static int loops = 1;
public static void onWorldTick(int aTick){
-
+ if(aTick == 0 || (tList==null && GT_Proxy.chunkData!=null)){
+ tList = new ArrayList<ChunkPosition>(GT_Proxy.chunkData.keySet());
+ loops = (tList.size()/1200) + 1;
+ }
+ if(tList!=null && tList.size() > 0){
+ int i = 0;
+ for(; i < loops ; i++){
+ ChunkPosition tPos = tList.get(0);
+ tList.remove(0);
+ if(tPos!=null && GT_Proxy.chunkData.containsKey(tPos)){
+ int tPollution = GT_Proxy.chunkData.get(tPos)[1];
+// System.out.println("process: "+tPos.chunkPosX+" "+tPos.chunkPosZ+" "+tPollution);
+ //Reduce pollution in chunk
+ tPollution = (int)(0.99f*tPollution);
+ tPollution -= 2000;
+ if(tPollution<=0){tPollution = 0;}else{
+ //Spread Pollution
+ if(tPollution>50000){
+ List<ChunkPosition> tNeighbor = new ArrayList();
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX+1, 1, tPos.chunkPosZ+1));
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX+1, 1, tPos.chunkPosZ-1));
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX-1, 1, tPos.chunkPosZ+1));
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX-1, 1, tPos.chunkPosZ-1));
+ for(ChunkPosition tNPos : tNeighbor){
+ if(GT_Proxy.chunkData.containsKey(tNPos)){
+ int tNPol = GT_Proxy.chunkData.get(tNPos)[1];
+ if(tNPol<tPollution){
+ int tDiff = tPollution - tNPol;
+ tDiff = tDiff/10;
+ tNPol += tDiff;
+ tPollution -= tDiff;
+ GT_Proxy.chunkData.get(tNPos)[1] = tNPol;
+ }
+ }else{
+ GT_Utility.getUndergroundOil(Minecraft.getMinecraft().theWorld,tPos.chunkPosX*16,tPos.chunkPosZ*16);
+ }
+ }}
+ int[] tArray = GT_Proxy.chunkData.get(tPos);
+ tArray[1] = tPollution;
+ GT_Proxy.chunkData.remove(tPos);
+ GT_Proxy.chunkData.put(tPos, tArray);
+ //Create Pollution effects
+
+ }
+ }
+ }
+ }
}
public static void addPollution(ChunkPosition aPos, int aPollution){
+ try{
+ ChunkPosition tPos = new ChunkPosition(aPos.chunkPosX/16, 1, aPos.chunkPosZ/16);
+// System.out.println("add pollution x: "+ tPos.chunkPosX +" z: " + tPos.chunkPosZ +" poll: "+aPollution);
int[] tData = new int[2];
- if(GT_Proxy.chunkData.containsKey(aPos)){
- tData = GT_Proxy.chunkData.get(aPos);
+ if(GT_Proxy.chunkData.containsKey(tPos)){
+ tData = GT_Proxy.chunkData.get(tPos);
if(tData.length>1){
tData[1] += aPollution;
}
- GT_Proxy.chunkData.replace(aPos, tData);
}else{
tData[1] += aPollution;
- GT_Proxy.chunkData.put(aPos, tData);
+ GT_Proxy.chunkData.put(tPos, tData);
+ }
+ }catch(Exception e){
+
}
-
}
}