summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/minecraft/server/SpawnerCreature.java508
1 files changed, 254 insertions, 254 deletions
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
index 7e041396..2eb48298 100644
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
@@ -1,255 +1,255 @@
-package net.minecraft.server;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-// CraftBukkit
-import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
-
-public final class SpawnerCreature {
-
- private static Set b = new HashSet();
- protected static final Class[] a = new Class[] { EntitySpider.class, EntityZombie.class, EntitySkeleton.class};
-
- public SpawnerCreature() {}
-
- protected static ChunkPosition a(World world, int i, int j) {
- int k = i + world.random.nextInt(16);
- int l = world.random.nextInt(128);
- int i1 = j + world.random.nextInt(16);
-
- return new ChunkPosition(k, l, i1);
- }
-
- public static final int spawnEntities(World world, boolean flag, boolean flag1) {
- if (!flag && !flag1) {
- return 0;
- } else {
- b.clear();
-
- int i;
- int j;
-
- for (i = 0; i < world.players.size(); ++i) {
- EntityHuman entityhuman = (EntityHuman) world.players.get(i);
- int k = MathHelper.floor(entityhuman.locX / 16.0D);
-
- j = MathHelper.floor(entityhuman.locZ / 16.0D);
- byte b0 = 8;
-
- for (int l = -b0; l <= b0; ++l) {
- for (int i1 = -b0; i1 <= b0; ++i1) {
- b.add(new ChunkCoordIntPair(l + k, i1 + j));
- }
- }
- }
-
- i = 0;
- ChunkCoordinates chunkcoordinates = world.getSpawn();
- EnumCreatureType[] aenumcreaturetype = EnumCreatureType.values();
-
- j = aenumcreaturetype.length;
-
- for (int j1 = 0; j1 < j; ++j1) {
- EnumCreatureType enumcreaturetype = aenumcreaturetype[j1];
-
- if ((!enumcreaturetype.d() || flag1) && (enumcreaturetype.d() || flag) && world.a(enumcreaturetype.a()) <= enumcreaturetype.b() * b.size() / 256) {
- Iterator iterator = b.iterator();
-
- label113:
- while (iterator.hasNext()) {
- ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator.next();
- BiomeBase biomebase = world.getWorldChunkManager().a(chunkcoordintpair);
- List list = biomebase.a(enumcreaturetype);
-
- if (list != null && !list.isEmpty()) {
- int k1 = 0;
-
- BiomeMeta biomemeta;
-
- for (Iterator iterator1 = list.iterator(); iterator1.hasNext(); k1 += biomemeta.b) {
- biomemeta = (BiomeMeta) iterator1.next();
- }
-
- int l1 = world.random.nextInt(k1);
-
- biomemeta = (BiomeMeta) list.get(0);
- Iterator iterator2 = list.iterator();
-
- while (iterator2.hasNext()) {
- BiomeMeta biomemeta1 = (BiomeMeta) iterator2.next();
-
- l1 -= biomemeta1.b;
- if (l1 < 0) {
- biomemeta = biomemeta1;
- break;
- }
- }
-
- ChunkPosition chunkposition = a(world, chunkcoordintpair.x * 16, chunkcoordintpair.z * 16);
- int i2 = chunkposition.x;
- int j2 = chunkposition.y;
- int k2 = chunkposition.z;
-
- if (!world.d(i2, j2, k2) && world.getMaterial(i2, j2, k2) == enumcreaturetype.c()) {
- int l2 = 0;
-
- for (int i3 = 0; i3 < 3; ++i3) {
- int j3 = i2;
- int k3 = j2;
- int l3 = k2;
- byte b1 = 6;
-
- for (int i4 = 0; i4 < 4; ++i4) {
- j3 += world.random.nextInt(b1) - world.random.nextInt(b1);
- k3 += world.random.nextInt(1) - world.random.nextInt(1);
- l3 += world.random.nextInt(b1) - world.random.nextInt(b1);
- if (a(enumcreaturetype, world, j3, k3, l3)) {
- float f = (float) j3 + 0.5F;
- float f1 = (float) k3;
- float f2 = (float) l3 + 0.5F;
-
- if (world.a((double) f, (double) f1, (double) f2, 24.0D) == null) {
- float f3 = f - (float) chunkcoordinates.x;
- float f4 = f1 - (float) chunkcoordinates.y;
- float f5 = f2 - (float) chunkcoordinates.z;
- float f6 = f3 * f3 + f4 * f4 + f5 * f5;
-
- if (f6 >= 576.0F) {
- EntityLiving entityliving;
-
- try {
- entityliving = (EntityLiving) biomemeta.a.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
- } catch (Exception exception) {
- exception.printStackTrace();
- return i;
- }
-
- entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
- if (entityliving.d()) {
- ++l2;
- // CraftBukkit - added a reason for spawning this creature
- world.addEntity(entityliving, SpawnReason.NATURAL);
- a(entityliving, world, f, f1, f2);
- if (l2 >= entityliving.l()) {
- continue label113;
- }
- }
-
- i += l2;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- return i;
- }
- }
-
- private static boolean a(EnumCreatureType enumcreaturetype, World world, int i, int j, int k) {
- return enumcreaturetype.c() == Material.WATER ? world.getMaterial(i, j, k).isLiquid() && !world.d(i, j + 1, k) : world.d(i, j - 1, k) && !world.d(i, j, k) && !world.getMaterial(i, j, k).isLiquid() && !world.d(i, j + 1, k);
- }
-
- private static void a(EntityLiving entityliving, World world, float f, float f1, float f2) {
- if (entityliving instanceof EntitySpider && world.random.nextInt(100) == 0) {
- EntitySkeleton entityskeleton = new EntitySkeleton(world);
-
- entityskeleton.setPositionRotation((double) f, (double) f1, (double) f2, entityliving.yaw, 0.0F);
- // CraftBukkit - added a reason for spawning this creature
- world.addEntity(entityskeleton, SpawnReason.NATURAL);
- entityskeleton.mount(entityliving);
- } else if (entityliving instanceof EntitySheep) {
- ((EntitySheep) entityliving).setColor(EntitySheep.a(world.random));
- }
- }
-
- public static boolean a(World world, List list) {
- boolean flag = false;
- Pathfinder pathfinder = new Pathfinder(world);
- Iterator iterator = list.iterator();
-
- while (iterator.hasNext()) {
- EntityHuman entityhuman = (EntityHuman) iterator.next();
- Class[] aclass = a;
-
- if (aclass != null && aclass.length != 0) {
- boolean flag1 = false;
-
- for (int i = 0; i < 20 && !flag1; ++i) {
- int j = MathHelper.floor(entityhuman.locX) + world.random.nextInt(32) - world.random.nextInt(32);
- int k = MathHelper.floor(entityhuman.locZ) + world.random.nextInt(32) - world.random.nextInt(32);
- int l = MathHelper.floor(entityhuman.locY) + world.random.nextInt(16) - world.random.nextInt(16);
-
- if (l < 1) {
- l = 1;
- } else if (l > 128) {
- l = 128;
- }
-
- int i1 = world.random.nextInt(aclass.length);
-
- int j1;
-
- for (j1 = l; j1 > 2 && !world.d(j, j1 - 1, k); --j1) {
- ;
- }
-
- while (!a(EnumCreatureType.MONSTER, world, j, j1, k) && j1 < l + 16 && j1 < 128) {
- ++j1;
- }
-
- if (j1 < l + 16 && j1 < 128) {
- float f = (float) j + 0.5F;
- float f1 = (float) j1;
- float f2 = (float) k + 0.5F;
-
- EntityLiving entityliving;
-
- try {
- entityliving = (EntityLiving) aclass[i1].getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
- } catch (Exception exception) {
- exception.printStackTrace();
- return flag;
- }
-
- entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
- if (entityliving.d()) {
- PathEntity pathentity = pathfinder.a(entityliving, entityhuman, 32.0F);
-
- if (pathentity != null && pathentity.a > 1) {
- PathPoint pathpoint = pathentity.c();
-
- if (Math.abs((double) pathpoint.a - entityhuman.locX) < 1.5D && Math.abs((double) pathpoint.c - entityhuman.locZ) < 1.5D && Math.abs((double) pathpoint.b - entityhuman.locY) < 1.5D) {
- ChunkCoordinates chunkcoordinates = BlockBed.g(world, MathHelper.floor(entityhuman.locX), MathHelper.floor(entityhuman.locY), MathHelper.floor(entityhuman.locZ), 1);
-
- if (chunkcoordinates == null) {
- chunkcoordinates = new ChunkCoordinates(j, j1 + 1, k);
- }
-
- entityliving.setPositionRotation((double) ((float) chunkcoordinates.x + 0.5F), (double) chunkcoordinates.y, (double) ((float) chunkcoordinates.z + 0.5F), 0.0F, 0.0F);
- // CraftBukkit - added a reason for spawning this creature
- world.addEntity(entityliving, SpawnReason.BED);
- a(entityliving, world, (float) chunkcoordinates.x + 0.5F, (float) chunkcoordinates.y, (float) chunkcoordinates.z + 0.5F);
- entityhuman.a(true, false, false);
- entityliving.P();
- flag = true;
- flag1 = true;
- }
- }
- }
- }
- }
- }
- }
-
- return flag;
- }
+package net.minecraft.server;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+// CraftBukkit
+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
+
+public final class SpawnerCreature {
+
+ private static Set b = new HashSet();
+ protected static final Class[] a = new Class[] { EntitySpider.class, EntityZombie.class, EntitySkeleton.class};
+
+ public SpawnerCreature() {}
+
+ protected static ChunkPosition a(World world, int i, int j) {
+ int k = i + world.random.nextInt(16);
+ int l = world.random.nextInt(128);
+ int i1 = j + world.random.nextInt(16);
+
+ return new ChunkPosition(k, l, i1);
+ }
+
+ public static final int spawnEntities(World world, boolean flag, boolean flag1) {
+ if (!flag && !flag1) {
+ return 0;
+ } else {
+ b.clear();
+
+ int i;
+ int j;
+
+ for (i = 0; i < world.players.size(); ++i) {
+ EntityHuman entityhuman = (EntityHuman) world.players.get(i);
+ int k = MathHelper.floor(entityhuman.locX / 16.0D);
+
+ j = MathHelper.floor(entityhuman.locZ / 16.0D);
+ byte b0 = 8;
+
+ for (int l = -b0; l <= b0; ++l) {
+ for (int i1 = -b0; i1 <= b0; ++i1) {
+ b.add(new ChunkCoordIntPair(l + k, i1 + j));
+ }
+ }
+ }
+
+ i = 0;
+ ChunkCoordinates chunkcoordinates = world.getSpawn();
+ EnumCreatureType[] aenumcreaturetype = EnumCreatureType.values();
+
+ j = aenumcreaturetype.length;
+
+ for (int j1 = 0; j1 < j; ++j1) {
+ EnumCreatureType enumcreaturetype = aenumcreaturetype[j1];
+
+ if ((!enumcreaturetype.d() || flag1) && (enumcreaturetype.d() || flag) && world.a(enumcreaturetype.a()) <= enumcreaturetype.b() * b.size() / 256) {
+ Iterator iterator = b.iterator();
+
+ label113:
+ while (iterator.hasNext()) {
+ ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator.next();
+ BiomeBase biomebase = world.getWorldChunkManager().a(chunkcoordintpair);
+ List list = biomebase.a(enumcreaturetype);
+
+ if (list != null && !list.isEmpty()) {
+ int k1 = 0;
+
+ BiomeMeta biomemeta;
+
+ for (Iterator iterator1 = list.iterator(); iterator1.hasNext(); k1 += biomemeta.b) {
+ biomemeta = (BiomeMeta) iterator1.next();
+ }
+
+ int l1 = world.random.nextInt(k1);
+
+ biomemeta = (BiomeMeta) list.get(0);
+ Iterator iterator2 = list.iterator();
+
+ while (iterator2.hasNext()) {
+ BiomeMeta biomemeta1 = (BiomeMeta) iterator2.next();
+
+ l1 -= biomemeta1.b;
+ if (l1 < 0) {
+ biomemeta = biomemeta1;
+ break;
+ }
+ }
+
+ ChunkPosition chunkposition = a(world, chunkcoordintpair.x * 16, chunkcoordintpair.z * 16);
+ int i2 = chunkposition.x;
+ int j2 = chunkposition.y;
+ int k2 = chunkposition.z;
+
+ if (!world.d(i2, j2, k2) && world.getMaterial(i2, j2, k2) == enumcreaturetype.c()) {
+ int l2 = 0;
+
+ for (int i3 = 0; i3 < 3; ++i3) {
+ int j3 = i2;
+ int k3 = j2;
+ int l3 = k2;
+ byte b1 = 6;
+
+ for (int i4 = 0; i4 < 4; ++i4) {
+ j3 += world.random.nextInt(b1) - world.random.nextInt(b1);
+ k3 += world.random.nextInt(1) - world.random.nextInt(1);
+ l3 += world.random.nextInt(b1) - world.random.nextInt(b1);
+ if (a(enumcreaturetype, world, j3, k3, l3)) {
+ float f = (float) j3 + 0.5F;
+ float f1 = (float) k3;
+ float f2 = (float) l3 + 0.5F;
+
+ if (world.a((double) f, (double) f1, (double) f2, 24.0D) == null) {
+ float f3 = f - (float) chunkcoordinates.x;
+ float f4 = f1 - (float) chunkcoordinates.y;
+ float f5 = f2 - (float) chunkcoordinates.z;
+ float f6 = f3 * f3 + f4 * f4 + f5 * f5;
+
+ if (f6 >= 576.0F) {
+ EntityLiving entityliving;
+
+ try {
+ entityliving = (EntityLiving) biomemeta.a.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ return i;
+ }
+
+ entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
+ if (entityliving.d()) {
+ ++l2;
+ // CraftBukkit - added a reason for spawning this creature
+ world.addEntity(entityliving, SpawnReason.NATURAL);
+ a(entityliving, world, f, f1, f2);
+ if (l2 >= entityliving.l()) {
+ continue label113;
+ }
+ }
+
+ i += l2;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return i;
+ }
+ }
+
+ private static boolean a(EnumCreatureType enumcreaturetype, World world, int i, int j, int k) {
+ return enumcreaturetype.c() == Material.WATER ? world.getMaterial(i, j, k).isLiquid() && !world.d(i, j + 1, k) : world.d(i, j - 1, k) && !world.d(i, j, k) && !world.getMaterial(i, j, k).isLiquid() && !world.d(i, j + 1, k);
+ }
+
+ private static void a(EntityLiving entityliving, World world, float f, float f1, float f2) {
+ if (entityliving instanceof EntitySpider && world.random.nextInt(100) == 0) {
+ EntitySkeleton entityskeleton = new EntitySkeleton(world);
+
+ entityskeleton.setPositionRotation((double) f, (double) f1, (double) f2, entityliving.yaw, 0.0F);
+ // CraftBukkit - added a reason for spawning this creature
+ world.addEntity(entityskeleton, SpawnReason.NATURAL);
+ entityskeleton.mount(entityliving);
+ } else if (entityliving instanceof EntitySheep) {
+ ((EntitySheep) entityliving).setColor(EntitySheep.a(world.random));
+ }
+ }
+
+ public static boolean a(World world, List list) {
+ boolean flag = false;
+ Pathfinder pathfinder = new Pathfinder(world);
+ Iterator iterator = list.iterator();
+
+ while (iterator.hasNext()) {
+ EntityHuman entityhuman = (EntityHuman) iterator.next();
+ Class[] aclass = a;
+
+ if (aclass != null && aclass.length != 0) {
+ boolean flag1 = false;
+
+ for (int i = 0; i < 20 && !flag1; ++i) {
+ int j = MathHelper.floor(entityhuman.locX) + world.random.nextInt(32) - world.random.nextInt(32);
+ int k = MathHelper.floor(entityhuman.locZ) + world.random.nextInt(32) - world.random.nextInt(32);
+ int l = MathHelper.floor(entityhuman.locY) + world.random.nextInt(16) - world.random.nextInt(16);
+
+ if (l < 1) {
+ l = 1;
+ } else if (l > 128) {
+ l = 128;
+ }
+
+ int i1 = world.random.nextInt(aclass.length);
+
+ int j1;
+
+ for (j1 = l; j1 > 2 && !world.d(j, j1 - 1, k); --j1) {
+ ;
+ }
+
+ while (!a(EnumCreatureType.MONSTER, world, j, j1, k) && j1 < l + 16 && j1 < 128) {
+ ++j1;
+ }
+
+ if (j1 < l + 16 && j1 < 128) {
+ float f = (float) j + 0.5F;
+ float f1 = (float) j1;
+ float f2 = (float) k + 0.5F;
+
+ EntityLiving entityliving;
+
+ try {
+ entityliving = (EntityLiving) aclass[i1].getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ return flag;
+ }
+
+ entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
+ if (entityliving.d()) {
+ PathEntity pathentity = pathfinder.a(entityliving, entityhuman, 32.0F);
+
+ if (pathentity != null && pathentity.a > 1) {
+ PathPoint pathpoint = pathentity.c();
+
+ if (Math.abs((double) pathpoint.a - entityhuman.locX) < 1.5D && Math.abs((double) pathpoint.c - entityhuman.locZ) < 1.5D && Math.abs((double) pathpoint.b - entityhuman.locY) < 1.5D) {
+ ChunkCoordinates chunkcoordinates = BlockBed.g(world, MathHelper.floor(entityhuman.locX), MathHelper.floor(entityhuman.locY), MathHelper.floor(entityhuman.locZ), 1);
+
+ if (chunkcoordinates == null) {
+ chunkcoordinates = new ChunkCoordinates(j, j1 + 1, k);
+ }
+
+ entityliving.setPositionRotation((double) ((float) chunkcoordinates.x + 0.5F), (double) chunkcoordinates.y, (double) ((float) chunkcoordinates.z + 0.5F), 0.0F, 0.0F);
+ // CraftBukkit - added a reason for spawning this creature
+ world.addEntity(entityliving, SpawnReason.BED);
+ a(entityliving, world, (float) chunkcoordinates.x + 0.5F, (float) chunkcoordinates.y, (float) chunkcoordinates.z + 0.5F);
+ entityhuman.a(true, false, false);
+ entityliving.P();
+ flag = true;
+ flag1 = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return flag;
+ }
} \ No newline at end of file