aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r--src/main/java/gregtech/common/GT_Pollution.java157
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java22
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java2
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java5
4 files changed, 168 insertions, 18 deletions
diff --git a/src/main/java/gregtech/common/GT_Pollution.java b/src/main/java/gregtech/common/GT_Pollution.java
index feeeafe4b0..19784cae89 100644
--- a/src/main/java/gregtech/common/GT_Pollution.java
+++ b/src/main/java/gregtech/common/GT_Pollution.java
@@ -1,28 +1,171 @@
-package gregtech.common;
+ package gregtech.common;
+import java.util.ArrayList;
+import java.util.List;
+
+import gregtech.GT_Mod;
+import gregtech.api.objects.XSTR;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.EntityLiving;
+import net.minecraft.init.Blocks;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.ChunkPosition;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldManager;
+import net.minecraftforge.common.DimensionManager;
public class GT_Pollution {
-// List<ChunkPosition> list = new ArrayList<ChunkPosition>(chunkData.keySet());
+ static List<ChunkPosition> tList = null;
+ static int loops = 1;
+ static XSTR tRan = new XSTR();
public static void onWorldTick(int aTick){
+ if(!GT_Mod.gregtechproxy.mPollution)return;
+ if(aTick == 0 || (tList==null && GT_Proxy.chunkData!=null)){
+ tList = new ArrayList<ChunkPosition>(GT_Proxy.chunkData.keySet());
+ loops = (tList.size()/1200) + 1;
+// System.out.println("new Pollution loop"+aTick);
+ }
+ 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));
+ 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)){
+ int tNPol = GT_Proxy.chunkData.get(tNPos)[1];
+ if(tNPol<tPollution && tNPol*120 < tPollution*100){
+ 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
+// Smog filter TODO
+ if(tPollution > GT_Mod.gregtechproxy.mPollutionSmogLimit){
+
+// 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 = Minecraft.getMinecraft().theWorld.getEntitiesWithinAABB(EntityLiving.class, chunk);
+ for(EntityLiving tEnt : tEntitys){
+ if(tRan.nextInt(tPollution/25000) > 20){
+ tEnt.addPotionEffect(new PotionEffect(Potion.poison.id, tPollution/25000, 1));
+ }
+ }
+// killing plants
+ if(tPollution > GT_Mod.gregtechproxy.mPollutionVegetationLimit){
+ int f = 20;
+ for(;f<(tPollution/25000);f++){
+ int x =tPos.chunkPosX*16+(tRan.nextInt(16));;
+ int y =60 +(-f+tRan.nextInt(f*2+1));
+ int z =tPos.chunkPosZ*16+(tRan.nextInt(16));
+ damageBlock(x, y, z, tPollution > GT_Mod.gregtechproxy.mPollutionSourRainLimit);
+ }}}}
+ }
+ }
+ }
+ }
+ }
+
+ public static void damageBlock(int x, int y, int z, boolean sourRain){
+ World world = DimensionManager.getWorld(0);
+ if (world.isRemote) return;
+ Block tBlock = world.getBlock(x, y, z);
+ int tMeta = world.getBlockMetadata(x, y, z);
+ if (tBlock == Blocks.air || tBlock == Blocks.stone || tBlock == Blocks.sand|| tBlock == Blocks.deadbush)return;
+ if (tBlock == Blocks.leaves || tBlock == Blocks.leaves2 || tBlock.getMaterial() == Material.leaves)
+ world.setBlockToAir(x, y, z);
+ if (tBlock == Blocks.reeds) {
+ tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0);
+ world.setBlockToAir(x, y, z);
+ }
+ if (tBlock == Blocks.tallgrass)
+ world.setBlock(x, y, z, Blocks.deadbush);
+ if (tBlock == Blocks.vine) {
+ tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0);
+ world.setBlockToAir(x, y, z);
+ }
+ if (tBlock == Blocks.waterlily || tBlock == Blocks.wheat || tBlock == Blocks.cactus ||
+ tBlock.getMaterial() == Material.cactus || tBlock == Blocks.melon_block || tBlock == Blocks.melon_stem) {
+ tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0);
+ world.setBlockToAir(x, y, z);
+ }
+ if (tBlock == Blocks.red_flower || tBlock == Blocks.yellow_flower || tBlock == Blocks.carrots ||
+ tBlock == Blocks.potatoes || tBlock == Blocks.pumpkin || tBlock == Blocks.pumpkin_stem) {
+ tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0);
+ world.setBlockToAir(x, y, z);
+ }
+ if (tBlock == Blocks.sapling || tBlock.getMaterial() == Material.plants)
+ world.setBlock(x, y, z, Blocks.deadbush);
+ if (tBlock == Blocks.cocoa) {
+ tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0);
+ world.setBlockToAir(x, y, z);
+ }
+ if (tBlock == Blocks.mossy_cobblestone)
+ world.setBlock(x, y, z, Blocks.cobblestone);
+ if (tBlock == Blocks.grass || tBlock.getMaterial() == Material.grass )
+ world.setBlock(x, y, z, Blocks.dirt);
+ if(tBlock == Blocks.farmland || tBlock == Blocks.dirt){
+ world.setBlock(x, y, z, Blocks.sand);
+ }
+
+ if(sourRain && world.isRaining() && (tBlock == Blocks.stone || tBlock == Blocks.gravel || tBlock == Blocks.cobblestone) &&
+ world.getBlock(x, y+1, z) == Blocks.air && world.canBlockSeeTheSky(x, y, z)){
+ if(tBlock == Blocks.stone){world.setBlock(x, y, z, Blocks.cobblestone); }
+ else if(tBlock == Blocks.cobblestone){world.setBlock(x, y, z, Blocks.gravel); }
+ else if(tBlock == Blocks.gravel){world.setBlock(x, y, z, Blocks.sand); }
+ }
}
public static void addPollution(ChunkPosition aPos, int aPollution){
+ if(!GT_Mod.gregtechproxy.mPollution)return;
+ 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){
+
}
-
}
}
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
index dd74eb02e4..ae56c14ddd 100644
--- a/src/main/java/gregtech/common/GT_Proxy.java
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -149,24 +149,29 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
public boolean mAE2Integration = true;
public boolean mArcSmeltIntoAnnealed = true;
public boolean mMagneticraftRecipes = true;
+ private boolean isFirstServerWorldTick = true;
+ private boolean mOreDictActivated = false;
+ public boolean mChangeHarvestLevels=false;
+ public boolean mNerfedCombs = true;
+ public boolean mGTBees = true;
+ public boolean mHideUnusedOres = true;
+ public boolean mHideRecyclingRecipes = true;
+ public boolean mPollution = true;
public int mSkeletonsShootGTArrows = 16;
public int mMaxEqualEntitiesAtOneSpot = 3;
public int mFlintChance = 30;
public int mItemDespawnTime = 6000;
public int mUpgradeCount = 4;
- public boolean mGTBees = true;
- private World mUniverse = null;
- private boolean isFirstServerWorldTick = true;
- private boolean mOreDictActivated = false;
public int[] mHarvestLevel= new int[1000];
public int mGraniteHavestLevel=3;
public int mMaxHarvestLevel=7;
- public boolean mChangeHarvestLevels=false;
- public boolean mNerfedCombs = true;
public int mWireHeatingTicks = 4;
- public boolean mHideUnusedOres = true;
- public boolean mHideRecyclingRecipes = true;
+ public int mPollutionSmogLimit = 500000;
+ public int mPollutionPoisonLimit = 750000;
+ public int mPollutionVegetationLimit = 1000000;
+ public int mPollutionSourRainLimit = 2000000;
public double mMagneticraftBonusOutputPercent = 100.0d;
+ private World mUniverse = null;
private final String aTextThermalExpansion = "ThermalExpansion";
private final String aTextRailcraft = "Railcraft";
private final String aTextTwilightForest = "TwilightForest";
@@ -1213,6 +1218,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
}
}
}
+ if(aEvent.world.provider.dimensionId==0)
GT_Pollution.onWorldTick((int) (aEvent.world.getTotalWorldTime() % 1200));
}
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java
index 9187d1fcb5..88951bfac1 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java
@@ -207,7 +207,7 @@ public class GT_MetaTileEntity_Scanner
@Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (mProgresstime >= (mMaxProgresstime - 1)) {
- if (this.mOutputItems[0].getUnlocalizedName().equals("gt.metaitem.01.32707")) {
+ if ((this.mOutputItems[0] != null) && (this.mOutputItems[0].getUnlocalizedName().equals("gt.metaitem.01.32707"))) {
GT_Mod.instance.achievements.issueAchievement(aBaseMetaTileEntity.getWorld().getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), "scanning");
}
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
index 493f4407b4..246df6707c 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
@@ -46,7 +46,7 @@ public class GT_MetaTileEntity_DistillationTower
"1x Output Bus (Any bottom layer casing)",
"1x Maintenance Hatch (Any casing)",
"1x Energy Hatch (Any casing)",
- "Clean Stainless Steel Casings for the rest (26 at least!)"};
+ "Clean Stainless Steel Casings for the rest (36 at least!)"};
}
public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
@@ -174,7 +174,8 @@ public class GT_MetaTileEntity_DistillationTower
for (int i = 0; i < tmpHatches.length; i++) {
this.mOutputHatches.add(tmpHatches[i]);
}
- return tAmount >= 26;
+ if(this.mMaintenanceHatches.size()!=1)return false;
+ return tAmount >= 36;
}
public boolean ignoreController(Block tTileEntity) {