Pollution Bloodasp2
This commit is contained in:
parent
7718e97e09
commit
7e720fc214
2 changed files with 100 additions and 6 deletions
|
@ -232,6 +232,14 @@ public class GT_Mod implements IGT_Mod {
|
||||||
gregtechproxy.mNerfedCombs = tMainConfig.get(aTextGeneral, "NerfCombs", true).getBoolean(true);
|
gregtechproxy.mNerfedCombs = tMainConfig.get(aTextGeneral, "NerfCombs", true).getBoolean(true);
|
||||||
gregtechproxy.mHideUnusedOres = tMainConfig.get(aTextGeneral, "HideUnusedOres", true).getBoolean(true);
|
gregtechproxy.mHideUnusedOres = tMainConfig.get(aTextGeneral, "HideUnusedOres", true).getBoolean(true);
|
||||||
gregtechproxy.mHideRecyclingRecipes = tMainConfig.get(aTextGeneral, "HideRecyclingRecipes", true).getBoolean(true);
|
gregtechproxy.mHideRecyclingRecipes = tMainConfig.get(aTextGeneral, "HideRecyclingRecipes", true).getBoolean(true);
|
||||||
|
//gregtechproxy.mArcSmeltIntoAnnealed = tMainConfig.get(aTextGeneral, "ArcSmeltIntoAnnealedWrought", true).getBoolean(true);
|
||||||
|
//gregtechproxy.mMagneticraftRecipes = tMainConfig.get(aTextGeneral, "EnableMagneticraftSupport", true).getBoolean(true);
|
||||||
|
//gregtechproxy.mMagneticraftBonusOutputPercent = tMainConfig.get(aTextGeneral, "MagneticraftBonusOutputPercent", 100.0f).getDouble();
|
||||||
|
gregtechproxy.mPollution = tMainConfig.get("Pollution", "EnablePollution", true).getBoolean(true);
|
||||||
|
gregtechproxy.mPollutionSmogLimit = tMainConfig.get("Pollution", "SmogLimit", 500000).getInt(500000);
|
||||||
|
gregtechproxy.mPollutionPoisonLimit = tMainConfig.get("Pollution", "PoisonLimit", 750000).getInt(750000);
|
||||||
|
gregtechproxy.mPollutionVegetationLimit = tMainConfig.get("Pollution", "VegetationLimit", 1000000).getInt(1000000);
|
||||||
|
gregtechproxy.mPollutionSourRainLimit = tMainConfig.get("Pollution", "SourRainLimit", 2000000).getInt(2000000);
|
||||||
|
|
||||||
GregTech_API.mOutputRF = GregTech_API.sOPStuff.get(ConfigCategories.general, "OutputRF", true);
|
GregTech_API.mOutputRF = GregTech_API.sOPStuff.get(ConfigCategories.general, "OutputRF", true);
|
||||||
GregTech_API.mInputRF = GregTech_API.sOPStuff.get(ConfigCategories.general, "InputRF", false);
|
GregTech_API.mInputRF = GregTech_API.sOPStuff.get(ConfigCategories.general, "InputRF", false);
|
||||||
|
|
|
@ -3,21 +3,35 @@
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import gregtech.GT_Mod;
|
||||||
|
import gregtech.api.objects.XSTR;
|
||||||
import gregtech.api.util.GT_Utility;
|
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.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.ChunkPosition;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldManager;
|
import net.minecraft.world.WorldManager;
|
||||||
|
import net.minecraftforge.common.DimensionManager;
|
||||||
|
|
||||||
public class GT_Pollution {
|
public class GT_Pollution {
|
||||||
|
|
||||||
|
|
||||||
static List<ChunkPosition> tList = null;
|
static List<ChunkPosition> tList = null;
|
||||||
static int loops = 1;
|
static int loops = 1;
|
||||||
|
static XSTR tRan = new XSTR();
|
||||||
|
|
||||||
public static void onWorldTick(int aTick){
|
public static void onWorldTick(int aTick){
|
||||||
|
if(!GT_Mod.gregtechproxy.mPollution)return;
|
||||||
if(aTick == 0 || (tList==null && GT_Proxy.chunkData!=null)){
|
if(aTick == 0 || (tList==null && GT_Proxy.chunkData!=null)){
|
||||||
tList = new ArrayList<ChunkPosition>(GT_Proxy.chunkData.keySet());
|
tList = new ArrayList<ChunkPosition>(GT_Proxy.chunkData.keySet());
|
||||||
loops = (tList.size()/1200) + 1;
|
loops = (tList.size()/1200) + 1;
|
||||||
|
// System.out.println("new Pollution loop"+aTick);
|
||||||
}
|
}
|
||||||
if(tList!=null && tList.size() > 0){
|
if(tList!=null && tList.size() > 0){
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -34,14 +48,14 @@ public class GT_Pollution {
|
||||||
//Spread Pollution
|
//Spread Pollution
|
||||||
if(tPollution>50000){
|
if(tPollution>50000){
|
||||||
List<ChunkPosition> tNeighbor = new ArrayList();
|
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));
|
||||||
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+1));
|
tNeighbor.add(new ChunkPosition(tPos.chunkPosX, 1, tPos.chunkPosZ+1));
|
||||||
tNeighbor.add(new ChunkPosition(tPos.chunkPosX-1, 1, tPos.chunkPosZ-1));
|
tNeighbor.add(new ChunkPosition(tPos.chunkPosX, 1, tPos.chunkPosZ-1));
|
||||||
for(ChunkPosition tNPos : tNeighbor){
|
for(ChunkPosition tNPos : tNeighbor){
|
||||||
if(GT_Proxy.chunkData.containsKey(tNPos)){
|
if(GT_Proxy.chunkData.containsKey(tNPos)){
|
||||||
int tNPol = GT_Proxy.chunkData.get(tNPos)[1];
|
int tNPol = GT_Proxy.chunkData.get(tNPos)[1];
|
||||||
if(tNPol<tPollution){
|
if(tNPol<tPollution && tNPol*120 < tPollution*100){
|
||||||
int tDiff = tPollution - tNPol;
|
int tDiff = tPollution - tNPol;
|
||||||
tDiff = tDiff/10;
|
tDiff = tDiff/10;
|
||||||
tNPol += tDiff;
|
tNPol += tDiff;
|
||||||
|
@ -57,14 +71,86 @@ public class GT_Pollution {
|
||||||
GT_Proxy.chunkData.remove(tPos);
|
GT_Proxy.chunkData.remove(tPos);
|
||||||
GT_Proxy.chunkData.put(tPos, tArray);
|
GT_Proxy.chunkData.put(tPos, tArray);
|
||||||
//Create Pollution effects
|
//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){
|
public static void addPollution(ChunkPosition aPos, int aPollution){
|
||||||
|
if(!GT_Mod.gregtechproxy.mPollution)return;
|
||||||
try{
|
try{
|
||||||
ChunkPosition tPos = new ChunkPosition(aPos.chunkPosX/16, 1, aPos.chunkPosZ/16);
|
ChunkPosition tPos = new ChunkPosition(aPos.chunkPosX/16, 1, aPos.chunkPosZ/16);
|
||||||
// System.out.println("add pollution x: "+ tPos.chunkPosX +" z: " + tPos.chunkPosZ +" poll: "+aPollution);
|
// System.out.println("add pollution x: "+ tPos.chunkPosX +" z: " + tPos.chunkPosZ +" poll: "+aPollution);
|
||||||
|
|
Loading…
Reference in a new issue