diff options
author | Blood-Asp <bloodasphendrik@gmail.com> | 2016-09-27 16:35:03 +0200 |
---|---|---|
committer | Technus <daniel112092@gmail.com> | 2016-10-02 15:27:03 +0200 |
commit | 7e720fc214775ab47d8d8fa480713f00968ffdf8 (patch) | |
tree | 0b4787d8bbc904a67ea3fb1adf9c98472f9c9e77 /src/main/java/gregtech/common/GT_Pollution.java | |
parent | 7718e97e09f898054f0cdab6ee44983da78203c0 (diff) | |
download | GT5-Unofficial-7e720fc214775ab47d8d8fa480713f00968ffdf8.tar.gz GT5-Unofficial-7e720fc214775ab47d8d8fa480713f00968ffdf8.tar.bz2 GT5-Unofficial-7e720fc214775ab47d8d8fa480713f00968ffdf8.zip |
Pollution Bloodasp2
Diffstat (limited to 'src/main/java/gregtech/common/GT_Pollution.java')
-rw-r--r-- | src/main/java/gregtech/common/GT_Pollution.java | 98 |
1 files changed, 92 insertions, 6 deletions
diff --git a/src/main/java/gregtech/common/GT_Pollution.java b/src/main/java/gregtech/common/GT_Pollution.java index 743a1c5ceb..19784cae89 100644 --- a/src/main/java/gregtech/common/GT_Pollution.java +++ b/src/main/java/gregtech/common/GT_Pollution.java @@ -3,21 +3,35 @@ 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 { 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; @@ -34,14 +48,14 @@ public class GT_Pollution { //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)); + 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){ + if(tNPol<tPollution && tNPol*120 < tPollution*100){ int tDiff = tPollution - tNPol; tDiff = tDiff/10; tNPol += tDiff; @@ -57,14 +71,86 @@ public class GT_Pollution { 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); |