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; this.biomeID = par1;
biomeList[par1] = this; biomeList[par1] = this;
this.theBiomeDecorator = this.createBiomeDecorator(); this.theBiomeDecorator = this.createBiomeDecorator();
this.spawnableCreatureList.add(new SpawnListEntry(EntitySheep.class, 12, 4, 4)); this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntitySheep(w), 12, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry(EntityPig.class, 10, 4, 4)); this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityPig(w), 10, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10, 4, 4)); this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityChicken(w), 10, 4, 4));
this.spawnableCreatureList.add(new SpawnListEntry(EntityCow.class, 8, 4, 4)); this.spawnableCreatureList.add(new SpawnListEntry((w) -> new EntityCow(w), 8, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySpider.class, 10, 4, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntitySpider(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityZombie.class, 10, 4, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityZombie(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySkeleton.class, 10, 4, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntitySkeleton(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityCreeper.class, 10, 4, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityCreeper(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 10, 4, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntitySlime(w), 10, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityEnderman.class, 1, 1, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityEnderman(w), 1, 1, 4));
this.spawnableWaterCreatureList.add(new SpawnListEntry(EntitySquid.class, 10, 4, 4)); this.spawnableWaterCreatureList.add(new SpawnListEntry((w) -> new EntitySquid(w), 10, 4, 4));
this.spawnableCaveCreatureList.add(new SpawnListEntry(EntityBat.class, 10, 8, 8)); 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.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.clear(); this.spawnableWaterCreatureList.clear();
this.spawnableCaveCreatureList.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.topBlock = (byte)Block.dirt.blockID;
this.fillerBlock = (byte)Block.dirt.blockID; this.fillerBlock = (byte)Block.dirt.blockID;
this.theBiomeDecorator = new BiomeEndDecorator(this); this.theBiomeDecorator = new BiomeEndDecorator(this);

View File

@ -7,7 +7,7 @@ public class BiomeGenForest extends BiomeGenBase
public BiomeGenForest(int par1) public BiomeGenForest(int par1)
{ {
super(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.treesPerChunk = 10;
this.theBiomeDecorator.grassPerChunk = 2; this.theBiomeDecorator.grassPerChunk = 2;
} }

View File

@ -9,8 +9,8 @@ public class BiomeGenHell extends BiomeGenBase
this.spawnableCreatureList.clear(); this.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.clear(); this.spawnableWaterCreatureList.clear();
this.spawnableCaveCreatureList.clear(); this.spawnableCaveCreatureList.clear();
this.spawnableMonsterList.add(new SpawnListEntry(EntityGhast.class, 50, 4, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityGhast(w), 50, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityPigZombie.class, 100, 4, 4)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityPigZombie(w), 100, 4, 4));
this.spawnableMonsterList.add(new SpawnListEntry(EntityMagmaCube.class, 1, 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.treesPerChunk = 50;
this.theBiomeDecorator.grassPerChunk = 25; this.theBiomeDecorator.grassPerChunk = 25;
this.theBiomeDecorator.flowersPerChunk = 4; this.theBiomeDecorator.flowersPerChunk = 4;
this.spawnableMonsterList.add(new SpawnListEntry(EntityOcelot.class, 2, 1, 1)); this.spawnableMonsterList.add(new SpawnListEntry((w) -> new EntityOcelot(w), 2, 1, 1));
this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10, 4, 4)); 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.spawnableMonsterList.clear();
this.spawnableCreatureList.clear(); this.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.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) protected BiomeGenPlains(int par1)
{ {
super(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.treesPerChunk = -999;
this.theBiomeDecorator.flowersPerChunk = 4; this.theBiomeDecorator.flowersPerChunk = 4;
this.theBiomeDecorator.grassPerChunk = 10; this.theBiomeDecorator.grassPerChunk = 10;

View File

@ -15,7 +15,7 @@ public class BiomeGenSwamp extends BiomeGenBase
this.theBiomeDecorator.clayPerChunk = 1; this.theBiomeDecorator.clayPerChunk = 1;
this.theBiomeDecorator.waterlilyPerChunk = 4; this.theBiomeDecorator.waterlilyPerChunk = 4;
this.waterColorMultiplier = 14745518; 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) public BiomeGenTaiga(int par1)
{ {
super(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.treesPerChunk = 10;
this.theBiomeDecorator.grassPerChunk = 1; this.theBiomeDecorator.grassPerChunk = 1;
} }

View File

@ -516,7 +516,7 @@ public class ChunkProviderGenerate implements IChunkProvider
} }
var6.decorate(this.worldObj, this.rand, var4, var5); 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; var4 += 8;
var5 += 8; var5 += 8;

View File

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

View File

@ -26,7 +26,7 @@ public class MapGenScatteredFeature extends MapGenStructure
this.scatteredFeatureSpawnList = new ArrayList(); this.scatteredFeatureSpawnList = new ArrayList();
this.maxDistanceBetweenScatteredFeatures = 32; this.maxDistanceBetweenScatteredFeatures = 32;
this.minDistanceBetweenScatteredFeatures = 8; 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) public MapGenScatteredFeature(Map par1Map)

View File

@ -1,22 +1,17 @@
package net.minecraft.src; 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. */ /** Holds the class of the entity to be spawned. */
public Class entityClass; public Function<World, EntityLiving> entityConstructor;
public int minGroupCount; public int minGroupCount;
public int maxGroupCount; 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); super(par2);
this.entityClass = par1Class; this.entityConstructor = par1Class;
this.minGroupCount = par3; this.minGroupCount = par3;
this.maxGroupCount = par4; 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.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import net.lax1dude.eaglercraft.EaglercraftRandom; import net.lax1dude.eaglercraft.EaglercraftRandom;
public final class SpawnerAnimals public final class SpawnerAnimals {
{
/** The 17x17 area around the player where mobs can spawn */ /** 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. * 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); Chunk var3 = par0World.getChunkFromChunkCoords(par1, par2);
int var4 = par1 * 16 + par0World.rand.nextInt(16); int var4 = par1 * 16 + par0World.rand.nextInt(16);
int var5 = par2 * 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, * adds all chunks within the spawn radius of the players to
* hostileCreatures, passiveCreatures. returns number of eligible chunks. * eligibleChunksForSpawning. pars: the world, hostileCreatures,
* passiveCreatures. returns number of eligible chunks.
*/ */
public int findChunksForSpawning(WorldServer par1WorldServer, boolean par2, boolean par3, boolean par4) public static int findChunksForSpawning(WorldServer par0WorldServer, boolean par1, boolean par2, boolean par3) {
{ if (!par1 && !par2) {
if (!par2 && !par3)
{
return 0; return 0;
} } else {
else eligibleChunksForSpawning.clear();
{ int var4;
this.eligibleChunksForSpawning.clear(); int var7;
int var5;
int var8;
for (var5 = 0; var5 < par1WorldServer.playerEntities.size(); ++var5) for (var4 = 0; var4 < par0WorldServer.playerEntities.size(); ++var4) {
{ EntityPlayerMP var5 = (EntityPlayerMP) par0WorldServer.playerEntities.get(var4);
EntityPlayer var6 = (EntityPlayer)par1WorldServer.playerEntities.get(var5); int var6 = MathHelper.floor_double(var5.posX / 16.0D);
int var7 = MathHelper.floor_double(var6.posX / 16.0D); var7 = MathHelper.floor_double(var5.posZ / 16.0D);
var8 = MathHelper.floor_double(var6.posZ / 16.0D); int var8 = 8;
byte var9 = 8;
for (int var10 = -var9; var10 <= var9; ++var10) if(var5.renderDistance < var8) {
{ var8 = var5.renderDistance;
for (int var11 = -var9; var11 <= var9; ++var11) if(var8 < 4) {
{ var8 = 4;
boolean var12 = var10 == -var9 || var10 == var9 || var11 == -var9 || var11 == var9; } // TODO
ChunkCoordIntPair var13 = new ChunkCoordIntPair(var10 + var7, var11 + var8); }
if (!var12) for (int var9 = -var8; var9 <= var8; ++var9) {
{ for (int var10 = -var8; var10 <= var8; ++var10) {
this.eligibleChunksForSpawning.put(var13, Boolean.valueOf(false)); boolean var11 = var8 >= 8 && (var9 == -var8 || var9 == var8 || var10 == -var8 || var10 == var8);
} ChunkCoordIntPair var12 = new ChunkCoordIntPair(var9 + var6, var10 + var7);
else if (!this.eligibleChunksForSpawning.containsKey(var13))
{ if (!var11) {
this.eligibleChunksForSpawning.put(var13, Boolean.valueOf(true)); eligibleChunksForSpawning.put(var12, Boolean.valueOf(false));
} else if (!eligibleChunksForSpawning.containsKey(var12)) {
eligibleChunksForSpawning.put(var12, Boolean.valueOf(true));
} }
} }
} }
} }
var5 = 0; var4 = 0;
ChunkCoordinates var34 = par1WorldServer.getSpawnPoint(); ChunkCoordinates var32 = par0WorldServer.getSpawnPoint();
EnumCreatureType[] var35 = EnumCreatureType.values(); EnumCreatureType[] var33 = EnumCreatureType.values();
var8 = var35.length; var7 = var33.length;
for (int var36 = 0; var36 < var8; ++var36) for (int var34 = 0; var34 < var7; ++var34) {
{ EnumCreatureType var35 = var33[var34];
EnumCreatureType var37 = var35[var36];
if ((!var37.getPeacefulCreature() || par3) && (var37.getPeacefulCreature() || par2) && (!var37.getAnimal() || par4) && par1WorldServer.countEntities(var37.getCreatureClass()) <= var37.getMaxNumberOfCreature() * this.eligibleChunksForSpawning.size() / 256) if ((!var35.getPeacefulCreature() || par2) && (var35.getPeacefulCreature() || par1)
{ && (!var35.getAnimal() || par3)
Iterator var38 = this.eligibleChunksForSpawning.keySet().iterator(); && par0WorldServer.countEntities(var35.getCreatureClass()) <= var35.getMaxNumberOfCreature()
* eligibleChunksForSpawning.size() / 256) {
Iterator var36 = eligibleChunksForSpawning.keySet().iterator();
label110: label110:
while (var38.hasNext()) while (var36.hasNext()) {
{ ChunkCoordIntPair var37 = (ChunkCoordIntPair) var36.next();
ChunkCoordIntPair var39 = (ChunkCoordIntPair)var38.next();
if (!((Boolean)this.eligibleChunksForSpawning.get(var39)).booleanValue()) if (!((Boolean) eligibleChunksForSpawning.get(var37)).booleanValue()) {
{ ChunkPosition var38 = getRandomSpawningPointInChunk(par0WorldServer, var37.chunkXPos,
ChunkPosition var40 = getRandomSpawningPointInChunk(par1WorldServer, var39.chunkXPos, var39.chunkZPos); var37.chunkZPos);
int var14 = var40.x; int var13 = var38.x;
int var15 = var40.y; int var14 = var38.y;
int var16 = var40.z; 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 var17 = 0;
int var18 = 0;
while (var18 < 3) while (var17 < 3) {
{ int var18 = var13;
int var19 = var14; int var19 = var14;
int var20 = var15; int var20 = var15;
int var21 = var16; byte var21 = 6;
byte var22 = 6; SpawnListEntry var22 = null;
SpawnListEntry var23 = null; int var23 = 0;
EntityLivingData var24 = null;
int var25 = 0;
while (true) while (true) {
{ if (var23 < 4) {
if (var25 < 4) label103: {
{ var18 += par0WorldServer.rand.nextInt(var21)
label103: - par0WorldServer.rand.nextInt(var21);
{ var19 += par0WorldServer.rand.nextInt(1)
var19 += par1WorldServer.rand.nextInt(var22) - par1WorldServer.rand.nextInt(var22); - par0WorldServer.rand.nextInt(1);
var20 += par1WorldServer.rand.nextInt(1) - par1WorldServer.rand.nextInt(1); var20 += par0WorldServer.rand.nextInt(var21)
var21 += par1WorldServer.rand.nextInt(var22) - par1WorldServer.rand.nextInt(var22); - par0WorldServer.rand.nextInt(var21);
if (canCreatureTypeSpawnAtLocation(var37, par1WorldServer, var19, var20, var21)) if (canCreatureTypeSpawnAtLocation(var35, par0WorldServer, var18, var19,
{ var20)) {
float var26 = (float)var19 + 0.5F; float var24 = (float) var18 + 0.5F;
float var27 = (float)var20; float var25 = (float) var19;
float var28 = (float)var21 + 0.5F; float var26 = (float) var20 + 0.5F;
if (par1WorldServer.getClosestPlayer((double)var26, (double)var27, (double)var28, 24.0D) == null) if (par0WorldServer.getClosestPlayer(var24,
{ var25, var26, 24.0D) == null) {
float var29 = var26 - (float)var34.posX; float var27 = var24 - (float) var32.posX;
float var30 = var27 - (float)var34.posY; float var28 = var25 - (float) var32.posY;
float var31 = var28 - (float)var34.posZ; float var29 = var26 - (float) var32.posZ;
float var32 = var29 * var29 + var30 * var30 + var31 * var31; float var30 = var27 * var27 + var28 * var28 + var29 * var29;
if (var32 >= 576.0F) if (var30 >= 576.0F) {
{ if (var22 == null) {
if (var23 == null) var22 = par0WorldServer.spawnRandomCreature(var35,
{ var18, var19, var20);
var23 = par1WorldServer.spawnRandomCreature(var37, var19, var20, var21);
if (var23 == null) if (var22 == null) {
{
break label103; break label103;
} }
} }
EntityLiving var41; EntityLiving var39;
try try {
{ var39 = (EntityLiving) var22.entityConstructor.apply(par0WorldServer);
var41 = (EntityLiving)var23.entityClass.getConstructor(new Class[] {World.class}).newInstance(new Object[] {par1WorldServer}); } catch (Exception var31) {
} var31.printStackTrace();
catch (Exception var33) return var4;
{
var33.printStackTrace();
return var5;
} }
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()) if (var39.getCanSpawnHere()) {
{ ++var16;
++var17; par0WorldServer.spawnEntityInWorld(var39);
par1WorldServer.spawnEntityInWorld(var41); creatureSpecificInit(var39, par0WorldServer, var24, var25, var26);
var24 = var41.onSpawnWithEgg(var24);
if (var17 >= var41.getMaxSpawnedInChunk()) if (var16 >= var39.getMaxSpawnedInChunk()) {
{
continue label110; continue label110;
} }
} }
var5 += var17; var4 += var16;
} }
} }
} }
++var25; ++var23;
continue; continue;
} }
} }
++var18; ++var17;
break; 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) public static boolean canCreatureTypeSpawnAtLocation(EnumCreatureType par0EnumCreatureType, World par1World, int par2, int par3, int par4) {
{ if (par0EnumCreatureType.getCreatureMaterial() == Material.water) {
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); 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; return false;
} } else {
else
{
int var5 = par1World.getBlockId(par2, par3 - 1, par4); 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); 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. * 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); List var7 = par1BiomeGenBase.getSpawnableList(EnumCreatureType.creature);
if (!var7.isEmpty()) if (!var7.isEmpty()) {
{ while (par6Random.nextFloat() < par1BiomeGenBase.getSpawningChance()) {
while (par6Random.nextFloat() < par1BiomeGenBase.getSpawningChance()) SpawnListEntry var8 = (SpawnListEntry) WeightedRandom.getRandomItem(par0World.rand, var7);
{ int var9 = var8.minGroupCount + par6Random.nextInt(1 + var8.maxGroupCount - var8.minGroupCount);
SpawnListEntry var8 = (SpawnListEntry)WeightedRandom.getRandomItem(par0World.rand, var7); int var10 = par2 + par6Random.nextInt(par4);
EntityLivingData var9 = null; int var11 = par3 + par6Random.nextInt(par5);
int var10 = var8.minGroupCount + par6Random.nextInt(1 + var8.maxGroupCount - var8.minGroupCount); int var12 = var10;
int var11 = par2 + par6Random.nextInt(par4);
int var12 = par3 + par6Random.nextInt(par5);
int var13 = var11; int var13 = var11;
int var14 = var12;
for (int var15 = 0; var15 < var10; ++var15) for (int var14 = 0; var14 < var9; ++var14) {
{ boolean var15 = false;
boolean var16 = false;
for (int var17 = 0; !var16 && var17 < 4; ++var17) for (int var16 = 0; !var15 && var16 < 4; ++var16) {
{ int var17 = par0World.getTopSolidOrLiquidBlock(var10, var11);
int var18 = par0World.getTopSolidOrLiquidBlock(var11, var12);
if (canCreatureTypeSpawnAtLocation(EnumCreatureType.creature, par0World, var11, var18, var12)) if (canCreatureTypeSpawnAtLocation(EnumCreatureType.creature, par0World, var10, var17, var11)) {
{ float var18 = (float) var10 + 0.5F;
float var19 = (float)var11 + 0.5F; float var19 = (float) var17;
float var20 = (float)var18; float var20 = (float) var11 + 0.5F;
float var21 = (float)var12 + 0.5F; EntityLiving var21;
EntityLiving var22;
try try {
{ var21 = (EntityLiving) var8.entityConstructor.apply(par0World);
var22 = (EntityLiving)var8.entityClass.getConstructor(new Class[] {World.class}).newInstance(new Object[] {par0World}); } catch (Exception var23) {
} var23.printStackTrace();
catch (Exception var24)
{
var24.printStackTrace();
continue; continue;
} }
var22.setLocationAndAngles((double)var19, (double)var20, (double)var21, par6Random.nextFloat() * 360.0F, 0.0F); var21.setLocationAndAngles((double) var18, (double) var19, (double) var20,
par0World.spawnEntityInWorld(var22); par6Random.nextFloat() * 360.0F, 0.0F);
var9 = var22.onSpawnWithEgg(var9); par0World.spawnEntityInWorld(var21);
var16 = true; 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)) for (var11 += par6Random.nextInt(5) - par6Random.nextInt(5); var10 < par2
{ || var10 >= par2 + par4 || var11 < par3 || var11 >= par3 + par4; var11 = var13
var11 = var13 + par6Random.nextInt(5) - par6Random.nextInt(5); + 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")) 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(); this.chunkProvider.unloadQueuedChunks();