From 63b9ed9ab4ddd0adc424147a1c30f4d7f3f93d41 Mon Sep 17 00:00:00 2001 From: EvilSeph Date: Fri, 10 Feb 2012 10:23:52 -0500 Subject: [PATCH] Added configurable animal and monster ticks per spawn setting. --- src/main/java/net/minecraft/server/World.java | 7 ++++++- .../org/bukkit/craftbukkit/CraftServer.java | 19 +++++++++++++++++++ .../org/bukkit/craftbukkit/CraftWorld.java | 16 ++++++++++++++++ src/main/resources/configurations/bukkit.yml | 3 +++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index bae7407552..a065810f90 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -77,6 +77,8 @@ public class World implements IBlockAccess { public boolean allowMonsters; // CraftBukkit - private -> public public boolean allowAnimals; // CraftBukkit - private -> public private LongHashset chunkTickList; // CraftBukkit + public long ticksPerAnimalSpawns; // CraftBukkit + public long ticksPerMonsterSpawns; // CraftBukkit private int U; int[] H; private List V; @@ -148,6 +150,8 @@ public class World implements IBlockAccess { this.allowMonsters = true; this.allowAnimals = true; this.chunkTickList = new LongHashset(); // CraftBukkit + this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit + this.ticksPerMonsterSpawns = this.getServer().getTicksPerMonsterSpawns(); // CraftBukkit this.U = this.random.nextInt(12000); this.H = new int['\u8000']; this.V = new ArrayList(); @@ -1722,8 +1726,9 @@ public class World implements IBlockAccess { // MethodProfiler.a("mobSpawner"); // CraftBukkit - not in production code // CraftBukkit start - Only call spawner if we have players online and the world allows for mobs or animals + long time = this.worldData.getTime(); if ((this.allowMonsters || this.allowAnimals) && (this instanceof WorldServer && this.getServer().getHandle().players.size() > 0)) { - SpawnerCreature.spawnEntities(this, this.allowMonsters, this.allowAnimals && this.worldData.getTime() % 400L == 0L); + SpawnerCreature.spawnEntities(this, this.allowMonsters && (this.ticksPerMonsterSpawns != 0 && time % this.ticksPerMonsterSpawns == 0L), this.allowAnimals && (this.ticksPerAnimalSpawns != 0 && time % this.ticksPerAnimalSpawns == 0L)); } // CraftBukkit end // MethodProfiler.b("chunkSource"); // CraftBukkit - not in production code diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 07ab830f09..caeb3844e3 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -357,6 +357,14 @@ public final class CraftServer implements Server { return this.configuration.getInt("settings.ping-packet-limit", 100); } + public int getTicksPerAnimalSpawns() { + return this.configuration.getInt("ticks-per.animal-spawns"); + } + + public int getTicksPerMonsterSpawns() { + return this.configuration.getInt("ticks-per.monster-spawns"); + } + public PluginManager getPluginManager() { return pluginManager; } @@ -410,6 +418,17 @@ public final class CraftServer implements Server { for (WorldServer world : console.worlds) { world.difficulty = difficulty; world.setSpawnFlags(monsters, animals); + if (this.getTicksPerAnimalSpawns() < 0) { + world.ticksPerAnimalSpawns = 400; + } else { + world.ticksPerAnimalSpawns = this.getTicksPerAnimalSpawns(); + } + + if (this.getTicksPerMonsterSpawns() < 0) { + world.ticksPerMonsterSpawns = 1; + } else { + world.ticksPerMonsterSpawns = this.getTicksPerMonsterSpawns(); + } } pluginManager.clearPlugins(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index 5962004bfe..26abc17566 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -982,4 +982,20 @@ public class CraftWorld implements World { public boolean canGenerateStructures() { return world.getWorldData().o(); } + + public long getTicksPerAnimalSpawns() { + return world.ticksPerAnimalSpawns; + } + + public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns) { + world.ticksPerAnimalSpawns = ticksPerAnimalSpawns; + } + + public long getTicksPerMonsterSpawns() { + return world.ticksPerMonsterSpawns; + } + + public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns) { + world.ticksPerMonsterSpawns = ticksPerMonsterSpawns; + } } diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml index cf93fab41b..875ca16b8f 100644 --- a/src/main/resources/configurations/bukkit.yml +++ b/src/main/resources/configurations/bukkit.yml @@ -21,6 +21,9 @@ settings: update-folder: update ping-packet-limit: 100 use-exact-login-location: false +ticks-per: + animal-spawns: 400 + monster-spawns: 1 aliases: icanhasbukkit: - version