Modify monster spawning algorithm. Allow all players to have a fair

share of mobs. Number of mobs allowed increases with the number of
nearby players in the area. One player won't hog the entire mob spawn
cap anymore.
This commit is contained in:
sigonasr2 2016-09-02 10:51:07 -05:00
parent aae4497d18
commit 5caa9a237f
3 changed files with 15 additions and 1 deletions

Binary file not shown.

View File

@ -19,6 +19,7 @@ import org.bukkit.entity.Guardian;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Monster;
import org.bukkit.entity.PigZombie;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Zombie;
import org.bukkit.entity.Skeleton.SkeletonType;
@ -58,6 +59,9 @@ public class MonsterController {
return false;
}
}
if (!meetsConditionsToSpawn(ent)) {
return false;
}
if (isZombieLeader(ent)) {
//Zombie leaders have faster movement.
ent.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,Integer.MAX_VALUE,1));
@ -140,6 +144,17 @@ public class MonsterController {
}
}
private static boolean meetsConditionsToSpawn(LivingEntity ent) {
double dist = 999999999;
int nearbyplayers=0;
for (Player p : Bukkit.getOnlinePlayers()) {
double temp = ent.getLocation().distanceSquared(p.getLocation());
if (temp<262144) {nearbyplayers++;}
dist = (temp<dist)?temp:dist;
}
return (dist<262144 && ent.getNearbyEntities(16, 16, 16).size()<nearbyplayers*3);
}
private static boolean meetsConditionsToBeElite(LivingEntity ent) {
if (Math.random()<=TwosideKeeper.ELITE_MONSTER_CHANCE && TwosideKeeper.LAST_ELITE_SPAWN+(72000*4)<TwosideKeeper.getServerTickTime() &&
((ent instanceof Zombie) || ((ent instanceof Skeleton) && ((Skeleton)ent).getSkeletonType()==SkeletonType.WITHER))

View File

@ -934,7 +934,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
filesave=getDataFolder(); //Store the location of where our data folder is.
log("Data folder at "+filesave+".",3);
Bukkit.getServer().setSpawnRadius(1);
//log("Spawn Radius is "+Bukkit.getServer().getSpawnRadius(),0);
time_passed+=-Bukkit.getWorld("world").getFullTime();