Mobs don't spawn

This commit is contained in:
Catfoolyou 2025-04-18 15:22:33 -04:00
parent a53d1f808f
commit 44ae27f469
17 changed files with 18083 additions and 17894 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -135,18 +135,18 @@ public abstract class BiomeGenBase
this.biomeID = par1;
biomeList[par1] = this;
this.theBiomeDecorator = this.createBiomeDecorator();
this.spawnableCreatureList.add(new SpawnListEntry(EntitySheep.class, 12, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry(EntityPig.class, 10, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry(EntityCow.class, 8, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySpider.class, 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityZombie.class, 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySkeleton.class, 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityCreeper.class, 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityEnderman.class, 1, 1, 4));
this.spawnableWaterCreatureList.add(new SpawnListEntry(EntitySquid.class, 10, 4, 4));
this.spawnableCaveCreatureList.add(new SpawnListEntry(EntityBat.class, 10, 8, 8));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntitySheep(w), 12, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityPig(w), 10, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityChicken(w), 10, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityCow(w), 8, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntitySpider(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityZombie(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntitySkeleton(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityCreeper(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntitySlime(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityEnderman(w), 1, 1, 4));
this.spawnableWaterCreatureList.add(new SpawnListEntry((w) -> new EntitySquid(w), 10, 4, 4));
this.spawnableCaveCreatureList.add(new SpawnListEntry((w) -> new EntityBat(w), 10, 8, 8));
}
/**

View File

@ -9,7 +9,7 @@ public class BiomeGenEnd extends BiomeGenBase
this.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.clear();
this.spawnableCaveCreatureList.clear();
this.spawnableMonsterList.add(new SpawnListEntry(EntityEnderman.class, 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityEnderman(w), 10, 4, 4));
this.topBlock = (byte)Block.dirt.blockID;
this.fillerBlock = (byte)Block.dirt.blockID;
this.theBiomeDecorator = new BiomeEndDecorator(this);

View File

@ -7,7 +7,7 @@ public class BiomeGenForest extends BiomeGenBase
public BiomeGenForest(int par1)
{
super(par1);
this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 5, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityWolf(w), 5, 4, 4));
this.theBiomeDecorator.treesPerChunk = 10;
this.theBiomeDecorator.grassPerChunk = 2;
}

View File

@ -9,8 +9,8 @@ public class BiomeGenHell extends BiomeGenBase
this.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.clear();
this.spawnableCaveCreatureList.clear();
this.spawnableMonsterList.add(new SpawnListEntry(EntityGhast.class, 50, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityPigZombie.class, 100, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityMagmaCube.class, 1, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityGhast(w), 50, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityPigZombie(w), 100, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityMagmaCube(w), 1, 4, 4));
}
}

View File

@ -10,8 +10,8 @@ public class BiomeGenJungle extends BiomeGenBase
this.theBiomeDecorator.treesPerChunk = 50;
this.theBiomeDecorator.grassPerChunk = 25;
this.theBiomeDecorator.flowersPerChunk = 4;
this.spawnableMonsterList.add(new SpawnListEntry(EntityOcelot.class, 2, 1, 1));
this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityOcelot(w), 2, 1, 1));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityChicken(w), 10, 4, 4));
}
/**

View File

@ -14,6 +14,6 @@ public class BiomeGenMushroomIsland extends BiomeGenBase
this.spawnableMonsterList.clear();
this.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.clear();
this.spawnableCreatureList.add(new SpawnListEntry(EntityMooshroom.class, 8, 4, 8));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityMooshroom(w), 8, 4, 8));
}
}

View File

@ -5,7 +5,7 @@ public class BiomeGenPlains extends BiomeGenBase
protected BiomeGenPlains(int par1)
{
super(par1);
this.spawnableCreatureList.add(new SpawnListEntry(EntityHorse.class, 5, 2, 6));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityHorse(w), 5, 2, 6));
this.theBiomeDecorator.treesPerChunk = -999;
this.theBiomeDecorator.flowersPerChunk = 4;
this.theBiomeDecorator.grassPerChunk = 10;

View File

@ -15,7 +15,7 @@ public class BiomeGenSwamp extends BiomeGenBase
this.theBiomeDecorator.clayPerChunk = 1;
this.theBiomeDecorator.waterlilyPerChunk = 4;
this.waterColorMultiplier = 14745518;
this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 1, 1, 1));
this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntitySlime(w), 1, 1, 1));
}
/**

View File

@ -7,7 +7,7 @@ public class BiomeGenTaiga extends BiomeGenBase
public BiomeGenTaiga(int par1)
{
super(par1);
this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 8, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityWolf(w), 8, 4, 4));
this.theBiomeDecorator.treesPerChunk = 10;
this.theBiomeDecorator.grassPerChunk = 1;
}

View File

@ -516,7 +516,7 @@ public class ChunkProviderGenerate implements IChunkProvider
}
var6.decorate(this.worldObj, this.rand, var4, var5);
//SpawnerAnimals.performWorldGenSpawning(this.worldObj, var6, var4 + 8, var5 + 8, 16, 16, this.rand); // problem, IMPORTANT!!!
SpawnerAnimals.performWorldGenSpawning(this.worldObj, var6, var4 + 8, var5 + 8, 16, 16, this.rand);
var4 += 8;
var5 += 8;

View File

@ -9,10 +9,10 @@ public class MapGenNetherBridge extends MapGenStructure
public MapGenNetherBridge()
{
this.spawnList.add(new SpawnListEntry(EntityBlaze.class, 10, 2, 3));
this.spawnList.add(new SpawnListEntry(EntityPigZombie.class, 5, 4, 4));
this.spawnList.add(new SpawnListEntry(EntitySkeleton.class, 10, 4, 4));
this.spawnList.add(new SpawnListEntry(EntityMagmaCube.class, 3, 4, 4));
this.spawnList.add(new SpawnListEntry((w) -> new EntityBlaze(w), 10, 2, 3));
this.spawnList.add(new SpawnListEntry((w) -> new EntityPigZombie(w), 5, 4, 4));
this.spawnList.add(new SpawnListEntry((w) -> new EntitySkeleton(w), 10, 4, 4));
this.spawnList.add(new SpawnListEntry((w) -> new EntityMagmaCube(w), 3, 4, 4));
}
public String func_143025_a()

View File

@ -26,7 +26,7 @@ public class MapGenScatteredFeature extends MapGenStructure
this.scatteredFeatureSpawnList = new ArrayList();
this.maxDistanceBetweenScatteredFeatures = 32;
this.minDistanceBetweenScatteredFeatures = 8;
this.scatteredFeatureSpawnList.add(new SpawnListEntry(EntityWitch.class, 1, 1, 1));
this.scatteredFeatureSpawnList.add(new SpawnListEntry((w) -> new EntityWitch(w), 1, 1, 1));
}
public MapGenScatteredFeature(Map par1Map)

View File

@ -1,22 +1,17 @@
package net.minecraft.src;
public class SpawnListEntry extends WeightedRandomItem
{
import java.util.function.Function;
public class SpawnListEntry extends WeightedRandomItem {
/** Holds the class of the entity to be spawned. */
public Class entityClass;
public Function<World, EntityLiving> entityConstructor;
public int minGroupCount;
public int maxGroupCount;
public SpawnListEntry(Class par1Class, int par2, int par3, int par4)
{
public SpawnListEntry(Function<World, EntityLiving> par1Class, int par2, int par3, int par4) {
super(par2);
this.entityClass = par1Class;
this.entityConstructor = par1Class;
this.minGroupCount = par3;
this.maxGroupCount = par4;
}
public String toString()
{
return this.entityClass.getSimpleName() + "*(" + this.minGroupCount + "-" + this.maxGroupCount + "):" + this.itemWeight;
}
}

View File

@ -3,18 +3,21 @@ package net.minecraft.src;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import net.lax1dude.eaglercraft.EaglercraftRandom;
public final class SpawnerAnimals
{
public final class SpawnerAnimals {
/** The 17x17 area around the player where mobs can spawn */
private HashMap eligibleChunksForSpawning = new HashMap();
private static HashMap eligibleChunksForSpawning = new HashMap();
/** An array of entity classes that spawn at night. */
protected static final Class[] nightSpawnEntities = new Class[] { EntitySpider.class, EntityZombie.class,
EntitySkeleton.class };
/**
* Given a chunk, find a random position in it.
*/
protected static ChunkPosition getRandomSpawningPointInChunk(World par0World, int par1, int par2)
{
protected static ChunkPosition getRandomSpawningPointInChunk(World par0World, int par1, int par2) {
Chunk var3 = par0World.getChunkFromChunkCoords(par1, par2);
int var4 = par1 * 16 + par0World.rand.nextInt(16);
int var5 = par2 * 16 + par0World.rand.nextInt(16);
@ -23,159 +26,148 @@ public final class SpawnerAnimals
}
/**
* adds all chunks within the spawn radius of the players to eligibleChunksForSpawning. pars: the world,
* hostileCreatures, passiveCreatures. returns number of eligible chunks.
* adds all chunks within the spawn radius of the players to
* eligibleChunksForSpawning. pars: the world, hostileCreatures,
* passiveCreatures. returns number of eligible chunks.
*/
public int findChunksForSpawning(WorldServer par1WorldServer, boolean par2, boolean par3, boolean par4)
{
if (!par2 && !par3)
{
public static int findChunksForSpawning(WorldServer par0WorldServer, boolean par1, boolean par2, boolean par3) {
if (!par1 && !par2) {
return 0;
} else {
eligibleChunksForSpawning.clear();
int var4;
int var7;
for (var4 = 0; var4 < par0WorldServer.playerEntities.size(); ++var4) {
EntityPlayerMP var5 = (EntityPlayerMP) par0WorldServer.playerEntities.get(var4);
int var6 = MathHelper.floor_double(var5.posX / 16.0D);
var7 = MathHelper.floor_double(var5.posZ / 16.0D);
int var8 = 8;
if(var5.renderDistance < var8) {
var8 = var5.renderDistance;
if(var8 < 4) {
var8 = 4;
} // TODO
}
else
{
this.eligibleChunksForSpawning.clear();
int var5;
int var8;
for (var5 = 0; var5 < par1WorldServer.playerEntities.size(); ++var5)
{
EntityPlayer var6 = (EntityPlayer)par1WorldServer.playerEntities.get(var5);
int var7 = MathHelper.floor_double(var6.posX / 16.0D);
var8 = MathHelper.floor_double(var6.posZ / 16.0D);
byte var9 = 8;
for (int var9 = -var8; var9 <= var8; ++var9) {
for (int var10 = -var8; var10 <= var8; ++var10) {
boolean var11 = var8 >= 8 && (var9 == -var8 || var9 == var8 || var10 == -var8 || var10 == var8);
ChunkCoordIntPair var12 = new ChunkCoordIntPair(var9 + var6, var10 + var7);
for (int var10 = -var9; var10 <= var9; ++var10)
{
for (int var11 = -var9; var11 <= var9; ++var11)
{
boolean var12 = var10 == -var9 || var10 == var9 || var11 == -var9 || var11 == var9;
ChunkCoordIntPair var13 = new ChunkCoordIntPair(var10 + var7, var11 + var8);
if (!var12)
{
this.eligibleChunksForSpawning.put(var13, Boolean.valueOf(false));
}
else if (!this.eligibleChunksForSpawning.containsKey(var13))
{
this.eligibleChunksForSpawning.put(var13, Boolean.valueOf(true));
if (!var11) {
eligibleChunksForSpawning.put(var12, Boolean.valueOf(false));
} else if (!eligibleChunksForSpawning.containsKey(var12)) {
eligibleChunksForSpawning.put(var12, Boolean.valueOf(true));
}
}
}
}
var5 = 0;
ChunkCoordinates var34 = par1WorldServer.getSpawnPoint();
EnumCreatureType[] var35 = EnumCreatureType.values();
var8 = var35.length;
var4 = 0;
ChunkCoordinates var32 = par0WorldServer.getSpawnPoint();
EnumCreatureType[] var33 = EnumCreatureType.values();
var7 = var33.length;
for (int var36 = 0; var36 < var8; ++var36)
{
EnumCreatureType var37 = var35[var36];
for (int var34 = 0; var34 < var7; ++var34) {
EnumCreatureType var35 = var33[var34];
if ((!var37.getPeacefulCreature() || par3) && (var37.getPeacefulCreature() || par2) && (!var37.getAnimal() || par4) && par1WorldServer.countEntities(var37.getCreatureClass()) <= var37.getMaxNumberOfCreature() * this.eligibleChunksForSpawning.size() / 256)
{
Iterator var38 = this.eligibleChunksForSpawning.keySet().iterator();
if ((!var35.getPeacefulCreature() || par2) && (var35.getPeacefulCreature() || par1)
&& (!var35.getAnimal() || par3)
&& par0WorldServer.countEntities(var35.getCreatureClass()) <= var35.getMaxNumberOfCreature()
* eligibleChunksForSpawning.size() / 256) {
Iterator var36 = eligibleChunksForSpawning.keySet().iterator();
label110:
while (var38.hasNext())
{
ChunkCoordIntPair var39 = (ChunkCoordIntPair)var38.next();
while (var36.hasNext()) {
ChunkCoordIntPair var37 = (ChunkCoordIntPair) var36.next();
if (!((Boolean)this.eligibleChunksForSpawning.get(var39)).booleanValue())
{
ChunkPosition var40 = getRandomSpawningPointInChunk(par1WorldServer, var39.chunkXPos, var39.chunkZPos);
int var14 = var40.x;
int var15 = var40.y;
int var16 = var40.z;
if (!((Boolean) eligibleChunksForSpawning.get(var37)).booleanValue()) {
ChunkPosition var38 = getRandomSpawningPointInChunk(par0WorldServer, var37.chunkXPos,
var37.chunkZPos);
int var13 = var38.x;
int var14 = var38.y;
int var15 = var38.z;
if (!par1WorldServer.isBlockNormalCube(var14, var15, var16) && par1WorldServer.getBlockMaterial(var14, var15, var16) == var37.getCreatureMaterial())
{
if (!par0WorldServer.isBlockNormalCube(var13, var14, var15) && par0WorldServer
.getBlockMaterial(var13, var14, var15) == var35.getCreatureMaterial()) {
int var16 = 0;
int var17 = 0;
int var18 = 0;
while (var18 < 3)
{
while (var17 < 3) {
int var18 = var13;
int var19 = var14;
int var20 = var15;
int var21 = var16;
byte var22 = 6;
SpawnListEntry var23 = null;
EntityLivingData var24 = null;
int var25 = 0;
byte var21 = 6;
SpawnListEntry var22 = null;
int var23 = 0;
while (true)
{
if (var25 < 4)
{
label103:
{
var19 += par1WorldServer.rand.nextInt(var22) - par1WorldServer.rand.nextInt(var22);
var20 += par1WorldServer.rand.nextInt(1) - par1WorldServer.rand.nextInt(1);
var21 += par1WorldServer.rand.nextInt(var22) - par1WorldServer.rand.nextInt(var22);
while (true) {
if (var23 < 4) {
label103: {
var18 += par0WorldServer.rand.nextInt(var21)
- par0WorldServer.rand.nextInt(var21);
var19 += par0WorldServer.rand.nextInt(1)
- par0WorldServer.rand.nextInt(1);
var20 += par0WorldServer.rand.nextInt(var21)
- par0WorldServer.rand.nextInt(var21);
if (canCreatureTypeSpawnAtLocation(var37, par1WorldServer, var19, var20, var21))
{
float var26 = (float)var19 + 0.5F;
float var27 = (float)var20;
float var28 = (float)var21 + 0.5F;
if (canCreatureTypeSpawnAtLocation(var35, par0WorldServer, var18, var19,
var20)) {
float var24 = (float) var18 + 0.5F;
float var25 = (float) var19;
float var26 = (float) var20 + 0.5F;
if (par1WorldServer.getClosestPlayer((double)var26, (double)var27, (double)var28, 24.0D) == null)
{
float var29 = var26 - (float)var34.posX;
float var30 = var27 - (float)var34.posY;
float var31 = var28 - (float)var34.posZ;
float var32 = var29 * var29 + var30 * var30 + var31 * var31;
if (par0WorldServer.getClosestPlayer(var24,
var25, var26, 24.0D) == null) {
float var27 = var24 - (float) var32.posX;
float var28 = var25 - (float) var32.posY;
float var29 = var26 - (float) var32.posZ;
float var30 = var27 * var27 + var28 * var28 + var29 * var29;
if (var32 >= 576.0F)
{
if (var23 == null)
{
var23 = par1WorldServer.spawnRandomCreature(var37, var19, var20, var21);
if (var30 >= 576.0F) {
if (var22 == null) {
var22 = par0WorldServer.spawnRandomCreature(var35,
var18, var19, var20);
if (var23 == null)
{
if (var22 == null) {
break label103;
}
}
EntityLiving var41;
EntityLiving var39;
try
{
var41 = (EntityLiving)var23.entityClass.getConstructor(new Class[] {World.class}).newInstance(new Object[] {par1WorldServer});
}
catch (Exception var33)
{
var33.printStackTrace();
return var5;
try {
var39 = (EntityLiving) var22.entityConstructor.apply(par0WorldServer);
} catch (Exception var31) {
var31.printStackTrace();
return var4;
}
var41.setLocationAndAngles((double)var26, (double)var27, (double)var28, par1WorldServer.rand.nextFloat() * 360.0F, 0.0F);
var39.setLocationAndAngles((double) var24, (double) var25, (double) var26, par0WorldServer.rand.nextFloat() * 360.0F, 0.0F);
if (var41.getCanSpawnHere())
{
++var17;
par1WorldServer.spawnEntityInWorld(var41);
var24 = var41.onSpawnWithEgg(var24);
if (var39.getCanSpawnHere()) {
++var16;
par0WorldServer.spawnEntityInWorld(var39);
creatureSpecificInit(var39, par0WorldServer, var24, var25, var26);
if (var17 >= var41.getMaxSpawnedInChunk())
{
if (var16 >= var39.getMaxSpawnedInChunk()) {
continue label110;
}
}
var5 += var17;
var4 += var16;
}
}
}
++var25;
++var23;
continue;
}
}
++var18;
++var17;
break;
}
}
@ -185,85 +177,80 @@ public final class SpawnerAnimals
}
}
return var5;
return var4;
}
}
/**
* Returns whether or not the specified creature type can spawn at the specified location.
* Returns whether or not the specified creature type can spawn at the specified
* location.
*/
public static boolean canCreatureTypeSpawnAtLocation(EnumCreatureType par0EnumCreatureType, World par1World, int par2, int par3, int par4)
{
if (par0EnumCreatureType.getCreatureMaterial() == Material.water)
{
public static boolean canCreatureTypeSpawnAtLocation(EnumCreatureType par0EnumCreatureType, World par1World, int par2, int par3, int par4) {
if (par0EnumCreatureType.getCreatureMaterial() == Material.water) {
return par1World.getBlockMaterial(par2, par3, par4).isLiquid() && par1World.getBlockMaterial(par2, par3 - 1, par4).isLiquid() && !par1World.isBlockNormalCube(par2, par3 + 1, par4);
}
else if (!par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4))
{
} else if (!par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4)) {
return false;
}
else
{
} else {
int var5 = par1World.getBlockId(par2, par3 - 1, par4);
return var5 != Block.bedrock.blockID && !par1World.isBlockNormalCube(par2, par3, par4) && !par1World.getBlockMaterial(par2, par3, par4).isLiquid() && !par1World.isBlockNormalCube(par2, par3 + 1, par4);
}
}
/**
* determines if a skeleton spawns on a spider, and if a sheep is a different
* color
*/
private static void creatureSpecificInit(EntityLiving par0EntityLiving, World par1World, float par2, float par3, float par4) {
par0EntityLiving.onSpawnWithEgg(null);
}
/**
* Called during chunk generation to spawn initial creatures.
*/
public static void performWorldGenSpawning(World par0World, BiomeGenBase par1BiomeGenBase, int par2, int par3, int par4, int par5, EaglercraftRandom par6Random)
{
public static void performWorldGenSpawning(World par0World, BiomeGenBase par1BiomeGenBase, int par2, int par3, int par4, int par5, EaglercraftRandom par6Random) {
List var7 = par1BiomeGenBase.getSpawnableList(EnumCreatureType.creature);
if (!var7.isEmpty())
{
while (par6Random.nextFloat() < par1BiomeGenBase.getSpawningChance())
{
SpawnListEntry var8 = (SpawnListEntry)WeightedRandom.getRandomItem(par0World.rand, var7);
EntityLivingData var9 = null;
int var10 = var8.minGroupCount + par6Random.nextInt(1 + var8.maxGroupCount - var8.minGroupCount);
int var11 = par2 + par6Random.nextInt(par4);
int var12 = par3 + par6Random.nextInt(par5);
if (!var7.isEmpty()) {
while (par6Random.nextFloat() < par1BiomeGenBase.getSpawningChance()) {
SpawnListEntry var8 = (SpawnListEntry) WeightedRandom.getRandomItem(par0World.rand, var7);
int var9 = var8.minGroupCount + par6Random.nextInt(1 + var8.maxGroupCount - var8.minGroupCount);
int var10 = par2 + par6Random.nextInt(par4);
int var11 = par3 + par6Random.nextInt(par5);
int var12 = var10;
int var13 = var11;
int var14 = var12;
for (int var15 = 0; var15 < var10; ++var15)
{
boolean var16 = false;
for (int var14 = 0; var14 < var9; ++var14) {
boolean var15 = false;
for (int var17 = 0; !var16 && var17 < 4; ++var17)
{
int var18 = par0World.getTopSolidOrLiquidBlock(var11, var12);
for (int var16 = 0; !var15 && var16 < 4; ++var16) {
int var17 = par0World.getTopSolidOrLiquidBlock(var10, var11);
if (canCreatureTypeSpawnAtLocation(EnumCreatureType.creature, par0World, var11, var18, var12))
{
float var19 = (float)var11 + 0.5F;
float var20 = (float)var18;
float var21 = (float)var12 + 0.5F;
EntityLiving var22;
if (canCreatureTypeSpawnAtLocation(EnumCreatureType.creature, par0World, var10, var17, var11)) {
float var18 = (float) var10 + 0.5F;
float var19 = (float) var17;
float var20 = (float) var11 + 0.5F;
EntityLiving var21;
try
{
var22 = (EntityLiving)var8.entityClass.getConstructor(new Class[] {World.class}).newInstance(new Object[] {par0World});
}
catch (Exception var24)
{
var24.printStackTrace();
try {
var21 = (EntityLiving) var8.entityConstructor.apply(par0World);
} catch (Exception var23) {
var23.printStackTrace();
continue;
}
var22.setLocationAndAngles((double)var19, (double)var20, (double)var21, par6Random.nextFloat() * 360.0F, 0.0F);
par0World.spawnEntityInWorld(var22);
var9 = var22.onSpawnWithEgg(var9);
var16 = true;
var21.setLocationAndAngles((double) var18, (double) var19, (double) var20,
par6Random.nextFloat() * 360.0F, 0.0F);
par0World.spawnEntityInWorld(var21);
creatureSpecificInit(var21, par0World, var18, var19, var20);
var15 = true;
}
var11 += par6Random.nextInt(5) - par6Random.nextInt(5);
var10 += par6Random.nextInt(5) - par6Random.nextInt(5);
for (var12 += par6Random.nextInt(5) - par6Random.nextInt(5); var11 < par2 || var11 >= par2 + par4 || var12 < par3 || var12 >= par3 + par4; var12 = var14 + par6Random.nextInt(5) - par6Random.nextInt(5))
{
var11 = var13 + par6Random.nextInt(5) - par6Random.nextInt(5);
for (var11 += par6Random.nextInt(5) - par6Random.nextInt(5); var10 < par2
|| var10 >= par2 + par4 || var11 < par3 || var11 >= par3 + par4; var11 = var13
+ par6Random.nextInt(5) - par6Random.nextInt(5)) {
var10 = var12 + par6Random.nextInt(5) - par6Random.nextInt(5);
}
}
}

View File

@ -123,7 +123,7 @@ public class WorldServer extends World
if (this.getGameRules().getGameRuleBooleanValue("doMobSpawning"))
{
//this.animalSpawner.findChunksForSpawning(this, this.spawnHostileMobs, this.spawnPeacefulMobs, this.worldInfo.getWorldTotalTime() % 400L == 0L); // FIX THIS SHIT, IMPORTANT!!!
this.animalSpawner.findChunksForSpawning(this, this.spawnHostileMobs, this.spawnPeacefulMobs, this.worldInfo.getWorldTotalTime() % 400L == 0L);
}
this.chunkProvider.unloadQueuedChunks();