Merge pull request #409 from GunfighterJ/2.9

[Feature] Stack more mobs with /spawnmob
This commit is contained in:
Iaccidentally 2013-03-22 14:39:55 -07:00
commit c7f62700d5
3 changed files with 83 additions and 57 deletions

View file

@ -2,7 +2,9 @@ package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Mob.MobException; import com.earth2me.essentials.Mob.MobException;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
@ -11,8 +13,8 @@ import org.bukkit.Location;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.material.Colorable; import org.bukkit.material.Colorable;
@ -36,73 +38,74 @@ public class SpawnMob
return Util.joinList(availableList); return Util.joinList(availableList);
} }
public static String[] mobData(final String mobString) public static List<String> mobParts(final String mobString)
{ {
String[] returnString = new String[4]; String[] mobParts = mobString.split(",");
final String[] parts = mobString.split(","); List<String> mobs = new ArrayList<String>();
String[] mobParts = parts[0].split(":");
returnString[0] = mobParts[0]; for (String mobPart : mobParts)
if (mobParts.length == 2)
{ {
returnString[1] = mobParts[1]; String[] mobDatas = mobPart.split(":");
mobs.add(mobDatas[0]);
}
return mobs;
} }
if (parts.length > 1) public static List<String> mobData(final String mobString)
{ {
String[] mountParts = parts[1].split(":"); String[] mobParts = mobString.split(",");
returnString[2] = mountParts[0];
if (mountParts.length == 2) List<String> mobData = new ArrayList<String>();
for (String mobPart : mobParts)
{ {
returnString[3] = mountParts[1]; String[] mobDatas = mobPart.split(":");
if (mobDatas.length == 1)
{
mobData.add(null);
}
else
{
mobData.add(mobDatas[1]);
} }
} }
return returnString; return mobData;
} }
// This method spawns a mob where the user is looking, owned by user // This method spawns a mob where the user is looking, owned by user
public static void spawnmob(final IEssentials ess, final Server server, final User user, final String[] Data, int mobCount) throws Exception public static void spawnmob(final IEssentials ess, final Server server, final User user, final List<String> parts, final List<String> data, int mobCount) throws Exception
{ {
final Block block = Util.getTarget(user).getBlock(); final Block block = Util.getTarget(user).getBlock();
if (block == null) if (block == null)
{ {
throw new Exception(_("unableToSpawnMob")); throw new Exception(_("unableToSpawnMob"));
} }
spawnmob(ess, server, user, user, block.getLocation(), Data, mobCount); spawnmob(ess, server, user, user, block.getLocation(), parts, data, mobCount);
} }
// This method spawns a mob at loc, owned by noone // This method spawns a mob at loc, owned by noone
public static void spawnmob(final IEssentials ess, final Server server, final CommandSender sender, final Location loc, final String[] Data, int mobCount) throws Exception public static void spawnmob(final IEssentials ess, final Server server, final CommandSender sender, final Location loc, final List<String> parts, final List<String> data, int mobCount) throws Exception
{ {
spawnmob(ess, server, sender, null, loc, Data, mobCount); spawnmob(ess, server, sender, null, loc, parts, data, mobCount);
} }
// This method spawns a mob at target, owned by target // This method spawns a mob at target, owned by target
public static void spawnmob(final IEssentials ess, final Server server, final CommandSender sender, final User target, final String[] Data, int mobCount) throws Exception public static void spawnmob(final IEssentials ess, final Server server, final CommandSender sender, final User target, final List<String> parts, final List<String> data, int mobCount) throws Exception
{ {
spawnmob(ess, server, sender, target, target.getLocation(), Data, mobCount); spawnmob(ess, server, sender, target, target.getLocation(), parts, data, mobCount);
} }
// This method spawns a mob at loc, owned by target // This method spawns a mob at loc, owned by target
public static void spawnmob(final IEssentials ess, final Server server, final CommandSender sender, final User target, final Location loc, final String[] Data, int mobCount) throws Exception public static void spawnmob(final IEssentials ess, final Server server, final CommandSender sender, final User target, final Location loc, final List<String> parts, final List<String> data, int mobCount) throws Exception
{ {
final Location sloc = Util.getSafeDestination(loc); final Location sloc = Util.getSafeDestination(loc);
final String mobType = Data[0];
final String mobData = Data[1];
final String mountType = Data[2];
final String mountData = Data[3];
Mob mob = Mob.fromName(mobType); for(int i = 0; i < parts.size(); i++)
Mob mobMount = null;
checkSpawnable(ess, sender, mob);
if (mountType != null)
{ {
mobMount = Mob.fromName(mountType); Mob mob = Mob.fromName(parts.get(i));
checkSpawnable(ess, sender, mobMount); checkSpawnable(ess, sender, mob);
} }
int serverLimit = ess.getSettings().getSpawnMobLimit(); int serverLimit = ess.getSettings().getSpawnMobLimit();
@ -112,11 +115,12 @@ public class SpawnMob
sender.sendMessage(_("mobSpawnLimit")); sender.sendMessage(_("mobSpawnLimit"));
} }
Mob mob = Mob.fromName(parts.get(0)); // Get the first mob
try try
{ {
for (int i = 0; i < mobCount; i++) for (int i = 0; i < mobCount; i++)
{ {
spawnMob(ess, server, sender, target, sloc, mob, mobData, mobMount, mountData); spawnMob(ess, server, sender, target, sloc, parts, data);
} }
sender.sendMessage(mobCount + " " + mob.name.toLowerCase(Locale.ENGLISH) + mob.suffix + " " + _("spawned")); sender.sendMessage(mobCount + " " + mob.name.toLowerCase(Locale.ENGLISH) + mob.suffix + " " + _("spawned"));
} }
@ -134,23 +138,40 @@ public class SpawnMob
} }
} }
private static void spawnMob(final IEssentials ess, final Server server, final CommandSender sender, final User target, final Location sloc, Mob mob, String mobData, Mob mobMount, String mountData) throws Exception private static void spawnMob(final IEssentials ess, final Server server, final CommandSender sender, final User target, final Location sloc, List<String> parts, List<String> data) throws Exception
{ {
Entity spawnedMob = mob.spawn(sloc.getWorld(), server, sloc); Mob mob;
Entity spawnedMount = null; Entity spawnedMob = null;
Entity spawnedMount;
if (mobMount != null) for (int i = 0; i < parts.size(); i++)
{ {
spawnedMount = mobMount.spawn(sloc.getWorld(), server, sloc); if (i == 0)
{
mob = Mob.fromName(parts.get(i));
spawnedMob = mob.spawn(sloc.getWorld(), server, sloc);
if (data.get(i) != null)
{
changeMobData(mob.getType(), spawnedMob, data.get(i), target);
}
}
int next = (i + 1);
if (next < parts.size()) //If it's the last mob in the list, don't set the mount
{
Mob mMob = Mob.fromName(parts.get(next));
spawnedMount = mMob.spawn(sloc.getWorld(), server, sloc);
if (data.get(next) != null)
{
changeMobData(mMob.getType(), spawnedMount, data.get(next), target);
}
spawnedMob.setPassenger(spawnedMount); spawnedMob.setPassenger(spawnedMount);
spawnedMob = spawnedMount;
} }
if (mobData != null)
{
changeMobData(mob.getType(), spawnedMob, mobData, target);
}
if (spawnedMount != null && mountData != null)
{
changeMobData(mobMount.getType(), spawnedMount, mountData, target);
} }
} }

View file

@ -5,6 +5,7 @@ import com.earth2me.essentials.Mob;
import com.earth2me.essentials.SpawnMob; import com.earth2me.essentials.SpawnMob;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import com.earth2me.essentials.Util; import com.earth2me.essentials.Util;
import java.util.List;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -25,7 +26,8 @@ public class Commandspawnmob extends EssentialsCommand
throw new NotEnoughArgumentsException(_("mobsAvailable", mobList)); throw new NotEnoughArgumentsException(_("mobsAvailable", mobList));
} }
String[] mobData = SpawnMob.mobData(args[0]); List<String> mobParts = SpawnMob.mobParts(args[0]);
List<String> mobData = SpawnMob.mobData(args[0]);
int mobCount = 1; int mobCount = 1;
if (args.length >= 2) if (args.length >= 2)
@ -36,11 +38,11 @@ public class Commandspawnmob extends EssentialsCommand
if (args.length >= 3) if (args.length >= 3)
{ {
final User target = getPlayer(ess.getServer(), user, args, 2); final User target = getPlayer(ess.getServer(), user, args, 2);
SpawnMob.spawnmob(ess, server, user, target, mobData, mobCount); SpawnMob.spawnmob(ess, server, user, target, mobParts, mobData, mobCount);
return; return;
} }
SpawnMob.spawnmob(ess, server, user, mobData, mobCount); SpawnMob.spawnmob(ess, server, user, mobParts, mobData, mobCount);
} }
@Override @Override
@ -52,10 +54,11 @@ public class Commandspawnmob extends EssentialsCommand
throw new NotEnoughArgumentsException(_("mobsAvailable", mobList)); throw new NotEnoughArgumentsException(_("mobsAvailable", mobList));
} }
String[] mobData = SpawnMob.mobData(args[0]); List<String> mobParts = SpawnMob.mobParts(args[0]);
List<String> mobData = SpawnMob.mobData(args[0]);
int mobCount = Integer.parseInt(args[1]); int mobCount = Integer.parseInt(args[1]);
final User target = getPlayer(ess.getServer(), args, 2, true, false); final User target = getPlayer(ess.getServer(), args, 2, true, false);
SpawnMob.spawnmob(ess, server, sender, target, mobData, mobCount); SpawnMob.spawnmob(ess, server, sender, target, mobParts, mobData, mobCount);
} }
} }

View file

@ -1,6 +1,7 @@
package com.earth2me.essentials.signs; package com.earth2me.essentials.signs;
import com.earth2me.essentials.*; import com.earth2me.essentials.*;
import java.util.List;
public class SignSpawnmob extends EssentialsSign public class SignSpawnmob extends EssentialsSign
@ -26,8 +27,9 @@ public class SignSpawnmob extends EssentialsSign
try try
{ {
String[] mobData = SpawnMob.mobData(sign.getLine(2)); List<String> mobParts = SpawnMob.mobParts(sign.getLine(2));
SpawnMob.spawnmob(ess, ess.getServer(), player, player, mobData, Integer.parseInt(sign.getLine(1))); List<String> mobData = SpawnMob.mobData(sign.getLine(2));
SpawnMob.spawnmob(ess, ess.getServer(), player, player, mobParts, mobData, Integer.parseInt(sign.getLine(1)));
} }
catch (Exception ex) catch (Exception ex)
{ {