package dangerzone.blocks;
import dangerzone.BreakChecks;
import dangerzone.Player;
import dangerzone.World;

/*
 * This code is copyright Richard H. Clark, TheyCallMeDanger, OreSpawn, 2015-2021.
 * You may use this code for reference for modding the DangerZone game program,
 * and are perfectly welcome to cut'n'paste portions for your mod as well.
 * DO NOT USE THIS CODE FOR ANY PURPOSE OTHER THAN MODDING FOR THE DANGERZONE GAME.
 * DO NOT REDISTRIBUTE THIS CODE. 
 * 
 *
 * 
 * WARNING: There are bugs. Big bugs. Little bugs. Every size in-between bugs.
 * This code is NOT suitable for use in anything other than this particular game. 
 * NO GUARANTEES of any sort are given, either express or implied, and Richard H. Clark, 
 * TheyCallMeDanger, OreSpawn are not responsible for any damages, direct, indirect, or otherwise. 
 * You should have made backups. It's your own fault for not making them.
 * 
 * NO ATTEMPT AT SECURITY IS MADE. This code is USE AT YOUR OWN RISK.
 * Regardless of what you may think, the reality is, that the moment you 
 * connected your computer to the Internet, Uncle Sam, among many others, hacked it.
 * DO NOT KEEP VALUABLE INFORMATION ON INTERNET-CONNECTED COMPUTERS.
 * Or your phone...
 * 
 */
public class BlockLiquidStatic extends Block {

	//non-ticking water block. otherwise, large bodies of water would eat CPU and slow everything down.
	//checks to see if something significant changed.
	//if so, sets itself to a ticking water block.
	//active partner is set in post_load_processing
	
	public BlockLiquidStatic(String n, String txt){
		super(n, txt);
		isSolidForRendering = false;
		isSolid = false;
		isTranslucent = true;
		friction = 0.10f;
		maxdamage = 2;
		maxstack = 16;
		showInInventory = false; //hide me!
		isLiquid = true;
	}
	
	public void notifyNeighborChanged(World w, int d, int x, int y, int z){
		int i, j, k;
		int bid;
		boolean change = false;
		
		if(!w.isServer)return;
		if(w.getblock(d, x, y, z) != blockID)return;
		
		//if it looks like we can do something useful, change to a ticking block...
		for(i=-1;i<=1;i++){
			for(j=0;j>=-1;j--){
				for(k=-1;k<=1;k++){
					bid = w.getblock(d, x+i, y+j, z+k);
					if(bid == 0){
						change = true;
					}else if(bid == Blocks.getActiveBlockid(this.blockID)){
						if(w.getblockmeta(d, x+i, y+j, z+k) != 0)change = true;
					}else if(bid != this.blockID){
						if(Blocks.isLeaves(bid) && !Blocks.isWaterPlant(bid))change = true;
					}
				}
			}
		}
		if(change){
			if(BreakChecks.canChangeBlock(w, d, x, y, z, d, x, y, z, Blocks.getActiveBlockid(this.blockID), 0)){
				w.setblockandmeta(d, x, y, z, Blocks.getActiveBlockid(this.blockID), 0); //change to an actively ticking block!
				for(i=-1;i<=1;i++){
					for(j=0;j>=-1;j--){
						for(k=-1;k<=1;k++){
							bid = w.getblock(d, x+i, y+j, z+k);
							if(bid == 0){
								//spread out!
								w.setblockandmeta(d, x+i, y+j, z+k, Blocks.getActiveBlockid(this.blockID), 0xf); //start small!
							}
						}
					}
				}
			}
		}
		
	}
	
	public int getBlockDrop(Player p, World w, int dimension, int x, int y, int z){
		//Player can be NULL! Make sure you check!
		return 0;
	}

}