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.java216
1 files changed, 106 insertions, 110 deletions
diff --git a/src/main/java/gregtech/common/GT_Pollution.java b/src/main/java/gregtech/common/GT_Pollution.java
index f6a44e562a..39dc0c3b8f 100644
--- a/src/main/java/gregtech/common/GT_Pollution.java
+++ b/src/main/java/gregtech/common/GT_Pollution.java
@@ -1,4 +1,4 @@
- package gregtech.common;
+package gregtech.common;
import gregtech.GT_Mod;
import gregtech.api.objects.XSTR;
@@ -19,7 +19,7 @@ import java.util.List;
//import net.minecraft.entity.EntityLiving;
-public class GT_Pollution {
+public class GT_Pollution {//TODO REWORK
/**
* Pollution dispersion until effects start:
* Calculation: ((Limit * 0.01) + 2000) * (4 <- spreading rate)
@@ -52,114 +52,108 @@ public class GT_Pollution {
* LV (0%), MV (30%), HV (52%), EV (66%), IV (76%), LuV (84%), ZPM (89%), UV (92%), MAX (95%)
*/
- static List<ChunkPosition> tList = null;
+ static TreeMap<Integer,List<ChunkPosition>> tList = null;
static int loops = 1;
static XSTR tRan = new XSTR();
public static void onWorldTick(World aWorld, int aTick){
- if(!GT_Mod.gregtechproxy.mPollution)return;
+ if(!GT_Mod.gregtechproxy.mPollution) return;
+ int aWorldID=aWorld.provider.dimensionId;
if(aTick == 0 || (tList==null && GT_Proxy.chunkData!=null)){
- tList = new ArrayList<ChunkPosition>(GT_Proxy.chunkData.keySet());
+ tList = new TreeMap<>();
+ tList.put(aWorld,new ArrayList<ChunkPosition>(GT_Proxy.chunkData.keySet()));
loops = (tList.size()/1200) + 1;
-// System.out.println("new Pollution loop"+aTick);
+ //System.out.println("new Pollution loop"+aTick);
}
- if(tList!=null && tList.size() > 0){
- int i = 0;
- for(; i < loops ; i++){
- if(tList.size()>0){
- 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.9945f*tPollution);
- //tPollution -= 2000;
- if(tPollution<=0){tPollution = 0;}else{
- //Spread Pollution
- if(tPollution>400000){
- List<ChunkPosition> tNeighbor = new ArrayList();
- tNeighbor.add(new ChunkPosition(tPos.chunkPosX+1, 1, tPos.chunkPosZ));
- tNeighbor.add(new ChunkPosition(tPos.chunkPosX-1, 1, tPos.chunkPosZ));
- tNeighbor.add(new ChunkPosition(tPos.chunkPosX, 1, tPos.chunkPosZ+1));
- tNeighbor.add(new ChunkPosition(tPos.chunkPosX, 1, tPos.chunkPosZ-1));
- for(ChunkPosition tNPos : tNeighbor){
- if(!GT_Proxy.chunkData.containsKey(tNPos)){
- GT_Utility.undergroundOil(aWorld,tNPos.chunkPosX,tNPos.chunkPosZ,false,0);
- }
- int tNPol = GT_Proxy.chunkData.get(tNPos)[1];
- if(tNPol*6 < tPollution*5){
- int tDiff = tPollution - tNPol;
- tDiff = tDiff/20;
- tNPol = GT_Utility.safeInt((long)tNPol+tDiff);//tNPol += tDiff;
- tPollution -= tDiff;
- GT_Proxy.chunkData.get(tNPos)[1] = tNPol;
- }
- }
+ if(tList!=null && tList.size() > 0) for(int i = 0; i < loops ; i++) if(tList.size()>0){
+ 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.9945f*tPollution);
+ //tPollution -= 2000;
+ if(tPollution<=0) tPollution = 0;
+ //Spread Pollution
+ else if(tPollution>400000){
+ List<ChunkPosition> tNeighbor = new ArrayList();
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX+1, tPos.chunkPosY, tPos.chunkPosZ));
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX-1, tPos.chunkPosY, tPos.chunkPosZ));
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ+1));
+ tNeighbor.add(new ChunkPosition(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ-1));
+ for(ChunkPosition tNPos : tNeighbor){
+ if(!GT_Proxy.chunkData.containsKey(tNPos))
+ GT_Utility.undergroundOil(aWorld,tNPos.chunkPosX,tNPos.chunkPosZ,false,0);
+
+ //if(GT_Proxy.chunkData.containsKey(tNPos)){
+ int tNPol = GT_Proxy.chunkData.get(tNPos)[1];
+ if(tNPol*6 < tPollution*5){
+ int tDiff = tPollution - tNPol;
+ tDiff = tDiff/20;
+ tNPol = GT_Utility.safeInt((long)tNPol+tDiff);//tNPol += tDiff;
+ tPollution -= tDiff;
+ GT_Proxy.chunkData.get(tNPos)[1] = tNPol;
+ }
+ //}
+ }
+ }
+ int[] tArray = GT_Proxy.chunkData.get(tPos);
+ tArray[1] = tPollution;
+ GT_Proxy.chunkData.remove(tPos);
+ GT_Proxy.chunkData.put(tPos, tArray);
+ //Create Pollution effects
+ //Smog filter TODO
+ if(tPollution > GT_Mod.gregtechproxy.mPollutionSmogLimit) {
+ AxisAlignedBB chunk = AxisAlignedBB.getBoundingBox(tPos.chunkPosX << 4, 0, tPos.chunkPosZ << 4, (tPos.chunkPosX << 4) + 16, 256, (tPos.chunkPosZ << 4) + 16);
+ List<EntityLivingBase> tEntitys = aWorld.getEntitiesWithinAABB(EntityLivingBase.class, chunk);
+ for (EntityLivingBase tEnt : tEntitys) {
+ if (!GT_Utility.isWearingFullGasHazmat(tEnt)) {
+ switch (tRan.nextInt(3)) {
+ default:
+ tEnt.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, Math.min(tPollution / 1000, 1000), tPollution / 400000));
+ case 1:
+ tEnt.addPotionEffect(new PotionEffect(Potion.weakness.id, Math.min(tPollution / 1000, 1000), tPollution / 400000));
+ case 2:
+ tEnt.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, Math.min(tPollution / 1000, 1000), tPollution / 400000));
}
- 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
- if(tPollution > GT_Mod.gregtechproxy.mPollutionSmogLimit) {
- AxisAlignedBB chunk = AxisAlignedBB.getBoundingBox(tPos.chunkPosX << 4, 0, tPos.chunkPosZ << 4, (tPos.chunkPosX << 4) + 16, 256, (tPos.chunkPosZ << 4) + 16);
- List<EntityLivingBase> tEntitys = aWorld.getEntitiesWithinAABB(EntityLivingBase.class, chunk);
- for (EntityLivingBase tEnt : tEntitys) {
- if (!GT_Utility.isWearingFullGasHazmat(tEnt)) {
- switch (tRan.nextInt(3)) {
- default:
- tEnt.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, Math.min(tPollution / 1000, 1000), tPollution / 400000));
- case 1:
- tEnt.addPotionEffect(new PotionEffect(Potion.weakness.id, Math.min(tPollution / 1000, 1000), tPollution / 400000));
- case 2:
- tEnt.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, Math.min(tPollution / 1000, 1000), tPollution / 400000));
- }
- }
- }
- // Poison effects
- if (tPollution > GT_Mod.gregtechproxy.mPollutionPoisonLimit) {
- //AxisAlignedBB chunk = AxisAlignedBB.getBoundingBox(tPos.chunkPosX*16, 0, tPos.chunkPosZ*16, tPos.chunkPosX*16+16, 256, tPos.chunkPosZ*16+16);
- //List<EntityLiving> tEntitys = aWorld.getEntitiesWithinAABB(EntityLiving.class, chunk);
- for (EntityLivingBase tEnt : tEntitys) {
- if (!GT_Utility.isWearingFullGasHazmat(tEnt)) {
- switch (tRan.nextInt(4)) {
- default:
- tEnt.addPotionEffect(new PotionEffect(Potion.hunger.id, tPollution / 500000));
- case 1:
- tEnt.addPotionEffect(new PotionEffect(Potion.confusion.id, Math.min(tPollution / 2000, 1000), 1));
- case 2:
- tEnt.addPotionEffect(new PotionEffect(Potion.poison.id, Math.min(tPollution / 4000, 1000), tPollution / 500000));
- case 3:
- tEnt.addPotionEffect(new PotionEffect(Potion.blindness.id, Math.min(tPollution / 2000, 1000), 1));
- }
- }
- }
- // killing plants
- if (tPollution > GT_Mod.gregtechproxy.mPollutionVegetationLimit) {
- int f = 20;
- for (; f < (tPollution / 25000); f++) {
- int x = (tPos.chunkPosX << 4) + tRan.nextInt(16);
- int y = 60 + (-f + tRan.nextInt(f * 2 + 1));
- int z = (tPos.chunkPosZ << 4) + tRan.nextInt(16);
- damageBlock(aWorld, x, y, z, tPollution > GT_Mod.gregtechproxy.mPollutionSourRainLimit);
- }
- }
+ }
+ }
+ // Poison effects
+ if (tPollution > GT_Mod.gregtechproxy.mPollutionPoisonLimit) {
+ //AxisAlignedBB chunk = AxisAlignedBB.getBoundingBox(tPos.chunkPosX*16, 0, tPos.chunkPosZ*16, tPos.chunkPosX*16+16, 256, tPos.chunkPosZ*16+16);
+ //List<EntityLiving> tEntitys = aWorld.getEntitiesWithinAABB(EntityLiving.class, chunk);
+ for (EntityLivingBase tEnt : tEntitys) {
+ if (!GT_Utility.isWearingFullGasHazmat(tEnt)) {
+ switch (tRan.nextInt(4)) {
+ default:
+ tEnt.addPotionEffect(new PotionEffect(Potion.hunger.id, tPollution / 500000));
+ case 1:
+ tEnt.addPotionEffect(new PotionEffect(Potion.confusion.id, Math.min(tPollution / 2000, 1000), 1));
+ case 2:
+ tEnt.addPotionEffect(new PotionEffect(Potion.poison.id, Math.min(tPollution / 4000, 1000), tPollution / 500000));
+ case 3:
+ tEnt.addPotionEffect(new PotionEffect(Potion.blindness.id, Math.min(tPollution / 2000, 1000), 1));
}
}
}
+ // killing plants
+ if (tPollution > GT_Mod.gregtechproxy.mPollutionVegetationLimit) {
+ int f = 20;
+ for (; f < (tPollution / 25000); f++) {
+ int x = (tPos.chunkPosX << 4) + tRan.nextInt(16);
+ int y = 60 + (-f + tRan.nextInt(f * 2 + 1));
+ int z = (tPos.chunkPosZ << 4) + tRan.nextInt(16);
+ damageBlock(aWorld, x, y, z, tPollution > GT_Mod.gregtechproxy.mPollutionSourRainLimit);
+ }
+ }
}
}
}
}
}
- public static void damageBlock(World aWorld, int x, int y, int z, boolean sourRain){
- //Teporary overriden
- //World world = DimensionManager.getWorld(aWorld.provider.dimensionId);
- World world = DimensionManager.getWorld(0);
+ public static void damageBlock(World world, int x, int y, int z, boolean sourRain){
if (world.isRemote) return;
Block tBlock = world.getBlock(x, y, z);
int tMeta = world.getBlockMetadata(x, y, z);
@@ -208,28 +202,30 @@ public class GT_Pollution {
else if(tBlock == Blocks.gravel){world.setBlock(x, y, z, Blocks.sand); }
}
}
-
- public static void addPollution(ChunkPosition aPos, int aPollution){
+
+ //Add aWorld to Save Pollution
+ public static void addPollution(World aWorld, ChunkPosition aPos, int aPollution){
if(!GT_Mod.gregtechproxy.mPollution)return;
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[]{0,0,0};
- if(GT_Proxy.chunkData.containsKey(tPos)){
- tData = GT_Proxy.chunkData.get(tPos);
- if(tData.length>1){
- tData[1]=GT_Utility.safeInt((long)tData[1]+aPollution);//tData[1] += aPollution;
- }
- }else{
- tData[1]=GT_Utility.safeInt((long)tData[1]+aPollution);//tData[1] += aPollution;
- //tData[2]|=0x01;
- GT_Proxy.chunkData.put(tPos, tData);
+ ChunkPosition tPos = new ChunkPosition(GT_Utility.getScaleCoordinates(aPos.chunkPosX,16), aWorld.provider.dimensionId, GT_Utility.getScaleCoordinates(aPos.chunkPosZ,16)); // OLD in coordinate -1 -1 chunk 0 0
+// System.out.println("add pollution dim: "+aWorld.provider.dimensionId+" x: "+ tPos.chunkPosX +" z: " + tPos.chunkPosZ +" poll: "+aPollution);
+ int[] tData = new int[3];
+ if(GT_Proxy.chunkData.containsKey(tPos)){
+ tData = GT_Proxy.chunkData.get(tPos);
+ if(tData.length>1){
+ tData[1] += aPollution;
}
- }catch(Exception e){}
+ }else{
+ tData[1] += aPollution;
+ GT_Proxy.chunkData.put(tPos, tData);
+ }
+ }catch(Exception e){
+
+ }
}
- public static int getPollutionAtCoords(int aX, int aZ){
- ChunkPosition tPos = new ChunkPosition(aX>>4, 1, aZ>>4);
+ public static int getPollutionAtCoords(World aWorld, int aX, int aZ){//TODO FIX
+ ChunkPosition tPos = new ChunkPosition(aX>>4, aWorld.provider.dimensionId, aZ>>4);
if(GT_Proxy.chunkData.containsKey(tPos)){
int[] tPollution = GT_Proxy.chunkData.get(tPos);
if(tPollution.length>1 && tPollution[1]>0){