ForgePatch/patches/common/net/minecraft/src/SpawnerAnimals.java.patch

52 lines
2.4 KiB
Diff
Raw Normal View History

--- ../src_base/common/net/minecraft/src/SpawnerAnimals.java
+++ ../src_work/common/net/minecraft/src/SpawnerAnimals.java
@@ -1,9 +1,14 @@
package net.minecraft.src;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
+
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingSpecialSpawnEvent;
public final class SpawnerAnimals
{
@@ -79,6 +84,9 @@
if ((!var34.getPeacefulCreature() || par2) && (var34.getPeacefulCreature() || par1) && par0WorldServer.countEntities(var34.getCreatureClass()) <= var34.getMaxNumberOfCreature() * eligibleChunksForSpawning.size() / 256)
{
Iterator var35 = eligibleChunksForSpawning.keySet().iterator();
+ ArrayList<ChunkCoordIntPair> tmp = new ArrayList(eligibleChunksForSpawning.keySet());
+ Collections.shuffle(tmp);
+ var35 = tmp.iterator();
label108:
while (var35.hasNext())
@@ -207,7 +215,8 @@
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);
+ boolean spawnBlock = (Block.blocksList[var5] != null && Block.blocksList[var5].canCreatureSpawn(par0EnumCreatureType, par1World, par2, par3 - 1, par4));
+ return spawnBlock && var5 != Block.bedrock.blockID && !par1World.isBlockNormalCube(par2, par3, par4) && !par1World.getBlockMaterial(par2, par3, par4).isLiquid() && !par1World.isBlockNormalCube(par2, par3 + 1, par4);
}
}
@@ -216,6 +225,13 @@
*/
private static void creatureSpecificInit(EntityLiving par0EntityLiving, World par1World, float par2, float par3, float par4)
{
+ LivingSpecialSpawnEvent event = new LivingSpecialSpawnEvent(par0EntityLiving, par1World, par2, par3, par4);
+ MinecraftForge.EVENT_BUS.post(event);
+ if (event.isHandeled())
+ {
+ return;
+ }
+
if (par0EntityLiving instanceof EntitySpider && par1World.rand.nextInt(100) == 0)
{
EntitySkeleton var7 = new EntitySkeleton(par1World);