main/Source/UltimateSkyGridPopulator

package com.gmail.labuff.shane.UltimateSkyGrid;

import java.util.Random;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Chest;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.entity.EntityType;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

public class UltimateSkyGridPopulator extends BlockPopulator {
	
	 int[] spawnEgg = {
		
		61, //EntityType.BLAZE,
		56, //EntityType.GHAST,
		62, //EntityType.MAGMA_CUBE,
		50, //EntityType.CREEPER,
		58, //EntityType.ENDERMAN,
		54, //EntityType.ZOMBIE, 
		51, //EntityType.SKELETON, 
		52, //EntityType.SPIDER,
		57, //EntityType.PIG_ZOMBIE,
		55, //EntityType.SLIME,
		90, //EntityType.PIG,
		91, //EntityType.SHEEP,
		93, //EntityType.CHICKEN,
		92, //EntityType.COW,
		96, //EntityType.MUSHROOM_COW,
		95, //EntityType.WOLF,
		//53, //EntityType.GIANT,
		120, //EntityType.VILLAGER,
		59, //EntityType.CAVE_SPIDER,
		//97, //EntityType.SNOWMAN,
		98, //EntityType.OCELOT,
		//64, //EntityType.WITHER,
		66 };//EntityType.WITCH 
		
	public void populate(World world, Random random, Chunk chunk) {
		
		int wH = world.getMaxHeight();
		
		for (int x = 0; x < 16; x += 4){
		     for (int y = 0; y < wH; y += 4){
		    	 for (int z = 0; z < 16; z += 4) {
		    		 					 
					Block blk = chunk.getBlock(x, y, z);
					
					if (blk.getType() == Material.CHEST){
						
						Chest chest = (Chest)blk.getState();						
						populateChest(world, random, UltimateSkyGrid.allBlocksOneWorld, chest);
						
					}		
					else if (blk.getType() == Material.GRASS){
						
						blk.getRelative(BlockFace.UP).setType(getGrassPop());
					}
					
					else if (blk.getType() == Material.DIRT){
						
						Random r = new Random();
						blk.getRelative(BlockFace.UP).setType(getDirtPop());
						if (blk.getRelative(BlockFace.UP).getType() == Material.SAPLING){
							blk.getRelative(BlockFace.UP).setData((byte) r.nextInt(4));
						}
						
					}
					
					else if (blk.getType() == Material.SAND){
						
						Random r = new Random();
						int a = r.nextInt(10);
						
						if (a < 1){
						
							blk.getRelative(BlockFace.UP).setTypeId(Material.CACTUS.getId(), false);
						}
						else{
							
							blk.getRelative(BlockFace.UP).setTypeId(Material.AIR.getId(), false);
						}
						
					}

					else if (blk.getType() == Material.SOUL_SAND){
							
						blk.getRelative(BlockFace.UP).setType(getSoulPop());
					}
					
					else if (blk.getType() == Material.MOB_SPAWNER){
						if(world.getEnvironment() == World.Environment.NETHER || world.getEnvironment() == World.Environment.THE_END){
							if(world.getEnvironment() == World.Environment.NETHER){
								
								CreatureSpawner spawner = (CreatureSpawner)blk.getState();
								spawner.setSpawnedType(getNetherEntity());
							}
							else{
								
								CreatureSpawner spawner = (CreatureSpawner)blk.getState();
								spawner.setSpawnedType(EntityType.ENDERMAN);
							}
						}
						else{	
							if(!(UltimateSkyGrid.allBlocksOneWorld)){
							
								
								CreatureSpawner spawner = (CreatureSpawner)blk.getState();
								spawner.setSpawnedType(getNormEntity());
								
							}
							else{
								
								CreatureSpawner spawner = (CreatureSpawner)blk.getState();
								spawner.setSpawnedType(getEntityType());
								
							}
						}
					}
					
					else if (blk.getType() == Material.LOG){
						
						Random rnd = new Random();
						blk.setData((byte)rnd.nextInt(4));
					}				
				}
			}
		}
	}
	
	public static EntityType getEntityType(){
		
		EntityType[] mobHosNorm = {
			EntityType.ZOMBIE, 
			EntityType.SKELETON, 
			EntityType.SPIDER,
			EntityType.PIG_ZOMBIE,
			EntityType.SLIME };
				
		EntityType[] mobHosRare = {
			EntityType.BLAZE,
			EntityType.GHAST,
			EntityType.MAGMA_CUBE,
			EntityType.CREEPER,
			EntityType.ENDERMAN };
				
		EntityType[] mobNorm = {
			EntityType.PIG,
			EntityType.SHEEP,
			EntityType.CHICKEN };
				
		EntityType[] mobRare = {
			EntityType.COW,
			EntityType.MUSHROOM_COW };
		
		Random random = new Random();
		int c = random.nextInt(100);
		EntityType entRet;
		
		if (c < 2){
			entRet = mobHosRare[random.nextInt(mobHosRare.length)];

		}
		else if (c < 5){
			entRet = mobRare[random.nextInt(mobRare.length)];

		}
		else if (c < 14){
			entRet = mobHosNorm[random.nextInt(mobHosNorm.length)];

		}
		else{
			entRet = mobNorm[random.nextInt(mobNorm.length)];

		}
		return entRet;
	}
	
	public EntityType getNormEntity(){
		
		EntityType[] mobHosNorm = {
			EntityType.ZOMBIE, 
			EntityType.SKELETON, 
			EntityType.SPIDER,
			EntityType.SLIME };
				
		EntityType[] mobHosRare = {
			EntityType.CREEPER,
			EntityType.ENDERMAN };
				
		EntityType[] mobNorm = {
			EntityType.PIG,
			EntityType.SHEEP,
			EntityType.CHICKEN };
				
		EntityType[] mobRare = {
			EntityType.COW,
			EntityType.MUSHROOM_COW };
		
		Random random = new Random();
		int c = random.nextInt(100);
		EntityType ent;
		
		if (c < 2){
			
			ent = mobHosRare[random.nextInt(mobHosRare.length)];
		}
		else if (c < 5){
			
			ent = mobRare[random.nextInt(mobRare.length)];
		}
		else if (c < 14){
			
			ent = mobHosNorm[random.nextInt(mobHosNorm.length)];
		}
		else{
			
			ent = mobNorm[random.nextInt(mobNorm.length)];
		}
		return ent;
	}
	
	public EntityType getNetherEntity(){
		
		EntityType[] mobHosNorm = {
			EntityType.PIG_ZOMBIE };
		
		EntityType[] mobHosRare = {
			EntityType.BLAZE,
			EntityType.GHAST,
			EntityType.MAGMA_CUBE };
		
		Random random = new Random();
		int c = random.nextInt(100);
		EntityType ent;
		
		if (c < 2){
			
			ent = mobHosRare[random.nextInt(mobHosRare.length)];
		}
		else {
			
			ent = mobHosNorm[random.nextInt(mobHosNorm.length)];
		}
		return ent;
	}
	
	public static Material getGrassPop(){
		Random rand = new Random();
		int p = rand.nextInt(100);
			
		if (p < 5){
				
			Material popMat = Material.RED_MUSHROOM;
			return popMat;
		}
		else if (p < 10){
				
			Material popMat = Material.BROWN_MUSHROOM;
			return popMat;
		}
		else if (p < 15){
				
			Material popMat = Material.RED_ROSE;
			return popMat;
		}
		else if (p < 20){
				
			Material popMat = Material.YELLOW_FLOWER;
			return popMat;
		}
		else if (p < 25){
				
			Material popMat = Material.SUGAR_CANE_BLOCK;
			return popMat;
		}
		else {
			return Material.AIR;
		}		
	}
	
	public static Material getSoulPop(){
		Random random = new Random();
		int a = random.nextInt(10);
		
		if (a < 1){
			
			return Material.NETHER_WARTS;
		}
		else {
			
			return Material.AIR;
		}
	}
	
	
	public static Material getDirtPop(){
	
		Random r = new Random();
		int p = r.nextInt(10);
		if (p < 1){
			
			return Material.SAPLING;
		}
		else{
			
			return Material.AIR;
		}
	}
	
	public void populateChest(World world, Random random, boolean allBlocks, Chest chest){
		
		Environment env = world.getEnvironment();
		int maxI;
		
		int[] itemMythicID = {0};
		int[] itemMythicAmount = {0};
		int[] itemRareID;
		int[] itemRareAmount;
		int[] itemID;
		int[] itemAmount;
		int mythChance = 0;
		int rareChance;
		
		
		if(env == World.Environment.NETHER || env == World.Environment.THE_END){
			
			if (env == World.Environment.NETHER){
			
				rareChance = UltimateSkyGrid.cNethChRare;
				itemRareID = UltimateSkyGrid.iNethChRare;
				itemRareAmount = UltimateSkyGrid.iNethChRareAmount;
				itemID = UltimateSkyGrid.iNethChNorm;
				itemAmount = UltimateSkyGrid.iNethChNormAmount;
				int a = random.nextInt(10);
			    int preMax1 = random.nextInt(2);
			    int preMax2 = random.nextInt(5);		
			        
			    if (a < 2){
			        	
			        maxI = 1 + preMax2;
			    }
			    else{
			        	
			        maxI = 1 + preMax1;
			    }
			}
		
			else{
				
				rareChance = UltimateSkyGrid.cEndChRare;
				itemRareID = UltimateSkyGrid.iEndChRare;
				itemRareAmount = UltimateSkyGrid.iEndChRareAmount;
				itemID = UltimateSkyGrid.iEndChNorm;
				itemAmount = UltimateSkyGrid.iEndChNormAmount;
				int a = random.nextInt(10);
			    int preMax1 = random.nextInt(2);
			    int preMax2 = random.nextInt(5);		
			        
			    if (a < 2){
			        	
			        maxI = 1 + preMax2;
			    }
			    else{
			        	
			        maxI = 1 + preMax1;
			    }
			}
		}
		else{
			if(allBlocks){	
				
				mythChance = UltimateSkyGrid.cChMythic;
				rareChance = UltimateSkyGrid.cChRare;	
				itemMythicID = UltimateSkyGrid.iChMythic;
				itemMythicAmount = UltimateSkyGrid.iChMythicAmount;
				itemRareID = UltimateSkyGrid.iChRare;
				itemRareAmount = UltimateSkyGrid.iChRareAmount;
				itemID = UltimateSkyGrid.iChNormal;
				itemAmount = UltimateSkyGrid.iChNormalAmount;
				int a = random.nextInt(10);
			    int preMax1 = random.nextInt(4);
			    int preMax2 = random.nextInt(10);		
			        
			    if (a < 2){
			        	
			        maxI = 1 + preMax2;
			    }
			    else{
			        	
			        maxI = 1 + preMax1;
			    }
			}
			else{
				
				mythChance = UltimateSkyGrid.cChMythic;
				rareChance = UltimateSkyGrid.cChRare;
				itemMythicID = UltimateSkyGrid.iNormChMythic;
				itemMythicAmount = UltimateSkyGrid.iNormChMythicAmount;
				itemRareID = UltimateSkyGrid.iNormChRare;
				itemRareAmount = UltimateSkyGrid.iNormChRareAmount;
				itemID = UltimateSkyGrid.iNormChNormal;
				itemAmount = UltimateSkyGrid.iNormChNormalAmount;
				int a = random.nextInt(10);
			    int preMax1 = random.nextInt(4);
			    int preMax2 = random.nextInt(10);		
			        
			    if (a < 2){
			        	
			        maxI = 1 + preMax2;
			    }
			    else{
			        	
			        maxI = 1 + preMax1;
			    }
			}
		}
		
		for(int i = 0; i < maxI; i++){
			
			
			
			Inventory inv = chest.getInventory();
			int quality = random.nextInt(100);
			
			if (quality < rareChance){
				if (quality < mythChance && env == World.Environment.NORMAL){
					int amount;
					int aPos = random.nextInt(itemMythicID.length);
					int ID = itemMythicID[aPos];
					int maxAmount = itemMythicAmount[aPos];
					if (maxAmount == 1){
						
						amount = 1;
					}
					else{
						
						amount = random.nextInt(maxAmount) + 1;
					}
					
					ItemStack itm = new ItemStack(ID, amount, (short) 0);
					
					if (itm.getType() == Material.MONSTER_EGG){
						
						Random rdm = new Random();
						itm = new ItemStack(Material.MONSTER_EGG, 1, (short)spawnEgg[rdm.nextInt(spawnEgg.length)]);
						inv.addItem(itm);
						
					}
					else{
						
						inv.addItem(itm);
						
					}
				}
				else{
					
					int amount;
					int aPos = random.nextInt(itemRareID.length);
					int ID = itemRareID[aPos];
					int maxAmount = itemRareAmount[aPos];
					
					if (maxAmount == 1){
						
						amount = 1;
					}
					else{
						
						amount = random.nextInt(maxAmount) + 1;
					}
					
					ItemStack itm = new ItemStack(ID, amount, (short) 0);
					
					if (itm.getType() == Material.MONSTER_EGG || itm.getType() == Material.LOG){
						if(itm.getType() == Material.MONSTER_EGG){

							itm = new ItemStack(Material.MONSTER_EGG, amount, (short)spawnEgg[random.nextInt(spawnEgg.length)]);
							inv.addItem(itm);
						
						}
						else{
							
							itm = new ItemStack(Material.LOG, amount, (short) random.nextInt(4));
							inv.addItem(itm);
						}
					}
					else{
						
						inv.addItem(itm);

					}
				}
			}
			else{
				
				int amount;
				int aPos = random.nextInt(itemID.length);
				int ID = itemID[aPos];
				int maxAmount = itemAmount[aPos];
				
				if (maxAmount == 1){
					
					amount = 1;
				}
				else{
					
					amount = random.nextInt(maxAmount) + 1;
				}
				
				ItemStack itm = new ItemStack(ID, amount, (short) 0);
				
				if (itm.getType() == Material.MONSTER_EGG || itm.getType() == Material.LOG){
					if(itm.getType() == Material.MONSTER_EGG){

						itm = new ItemStack(Material.MONSTER_EGG, amount, (short)spawnEgg[random.nextInt(spawnEgg.length)]);
						inv.addItem(itm);
					
					}
					else{
						
						itm = new ItemStack(Material.LOG, amount, (short) random.nextInt(4));
						inv.addItem(itm);
					}
				}
				else{
					
					inv.addItem(itm);					

				}
			}
		}
	}
}

Comments

Posts Quoted:
Reply
Clear All Quotes