Merge branch 'ma-creature'

This commit is contained in:
garbagemule
2015-07-17 04:45:57 +02:00
2 changed files with 143 additions and 125 deletions
@@ -1,7 +1,9 @@
package com.garbagemule.MobArena.waves; package com.garbagemule.MobArena.waves;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.bukkit.DyeColor; import org.bukkit.DyeColor;
import org.bukkit.Location; import org.bukkit.Location;
@@ -14,185 +16,201 @@ import org.bukkit.inventory.ItemStack;
import com.garbagemule.MobArena.MobArena; import com.garbagemule.MobArena.MobArena;
import com.garbagemule.MobArena.framework.Arena; import com.garbagemule.MobArena.framework.Arena;
public enum MACreature public class MACreature
{ {
// This part must come before the constants!
private static Map<String,MACreature> map;
static {
map = new HashMap<>();
for (EntityType type : EntityType.values()) {
// Instantiating a new creature registers it
new MACreature(type);
}
}
// Default creatures // Default creatures
ZOMBIE(EntityType.ZOMBIE), ZOMBIES(EntityType.ZOMBIE), public static final MACreature ZOMBIE = new MACreature("zombie", EntityType.ZOMBIE);
SKELETON(EntityType.SKELETON), SKELETONS(EntityType.SKELETON), public static final MACreature SKELETON = new MACreature("skeleton", EntityType.SKELETON);
SPIDER(EntityType.SPIDER), SPIDERS(EntityType.SPIDER), public static final MACreature SPIDER = new MACreature("spider", EntityType.SPIDER);
CREEPER(EntityType.CREEPER), CREEPERS(EntityType.CREEPER), public static final MACreature CREEPER = new MACreature("creeper", EntityType.CREEPER);
WOLF(EntityType.WOLF), WOLVES(EntityType.WOLF), public static final MACreature WOLF = new MACreature("wolf", "wolves", EntityType.WOLF);
// Special creatures // Special creatures
ZOMBIEPIGMAN(EntityType.PIG_ZOMBIE), ZOMBIEPIGMEN(EntityType.PIG_ZOMBIE), public static final MACreature ZOMBIEPIGMAN = new MACreature("zombiepigman", "zombiepigmen", EntityType.PIG_ZOMBIE);
POWEREDCREEPER(EntityType.CREEPER), POWEREDCREEPERS(EntityType.CREEPER), public static final MACreature POWEREDCREEPER = new MACreature("poweredcreeper", EntityType.CREEPER);
ANGRYWOLF(EntityType.WOLF), ANGRYWOLVES(EntityType.WOLF), public static final MACreature ANGRYWOLF = new MACreature("angrywolf", "angrywolves", EntityType.WOLF);
GIANT(EntityType.GIANT), GIANTS(EntityType.GIANT), public static final MACreature GIANT = new MACreature("giant", EntityType.GIANT);
GHAST(EntityType.GHAST), GHASTS(EntityType.GHAST), public static final MACreature GHAST = new MACreature("ghast", EntityType.GHAST);
ENDERMAN(EntityType.ENDERMAN), ENDERMEN(EntityType.ENDERMAN), public static final MACreature ENDERMAN = new MACreature("enderman", "endermen", EntityType.ENDERMAN);
CAVESPIDER(EntityType.CAVE_SPIDER), CAVESPIDERS(EntityType.CAVE_SPIDER), public static final MACreature CAVESPIDER = new MACreature("cavespider", EntityType.CAVE_SPIDER);
SILVERFISH(EntityType.SILVERFISH), public static final MACreature SILVERFISH = new MACreature("silverfish", null, EntityType.SILVERFISH);
// 1.0 creatures // 1.0 creatures
BLAZE(EntityType.BLAZE), BLAZES(EntityType.BLAZE), public static final MACreature BLAZE = new MACreature("blaze", EntityType.BLAZE);
ENDERDRAGON(EntityType.ENDER_DRAGON), ENDERDRAGONS(EntityType.ENDER_DRAGON), public static final MACreature ENDERDRAGON = new MACreature("enderdragon", EntityType.ENDER_DRAGON);
SNOWMAN(EntityType.SNOWMAN), SNOWMEN(EntityType.SNOWMAN), public static final MACreature SNOWMAN = new MACreature("snowman", "snowmen", EntityType.SNOWMAN);
SNOWGOLEM(EntityType.SNOWMAN), SNOWGOLEMS(EntityType.SNOWMAN), public static final MACreature SNOWGOLEM = new MACreature("snowgolem", EntityType.SNOWMAN);
MUSHROOMCOW(EntityType.MUSHROOM_COW), MUSHROOMCOWS(EntityType.MUSHROOM_COW), public static final MACreature MUSHROOMCOW = new MACreature("mushroomcow", EntityType.MUSHROOM_COW);
VILLAGER(EntityType.VILLAGER), VILLAGERS(EntityType.VILLAGER), public static final MACreature MOOSHROOM = new MACreature("mooshroom", EntityType.MUSHROOM_COW);
public static final MACreature VILLAGER = new MACreature("villager", EntityType.VILLAGER);
// 1.2 creatures // 1.2 creatures
OCELOT(EntityType.OCELOT), OCELOTS(EntityType.OCELOT), public static final MACreature OCELOT = new MACreature("ocelot", EntityType.OCELOT);
IRONGOLEM(EntityType.IRON_GOLEM), IRONGOLEMS(EntityType.IRON_GOLEM), public static final MACreature IRONGOLEM = new MACreature("irongolem", EntityType.IRON_GOLEM);
// Passive creatures // Passive creatures
CHICKEN(EntityType.CHICKEN), CHICKENS(EntityType.CHICKEN), public static final MACreature CHICKEN = new MACreature("chicken", EntityType.CHICKEN);
COW(EntityType.COW), COWS(EntityType.COW), public static final MACreature COW = new MACreature("cow", EntityType.COW);
PIG(EntityType.PIG), PIGS(EntityType.PIG), public static final MACreature PIG = new MACreature("pig", EntityType.PIG);
SHEEP(EntityType.SHEEP), public static final MACreature SHEEP = new MACreature("sheep", null, EntityType.SHEEP);
SQUID(EntityType.SQUID), SQUIDS(EntityType.SQUID), public static final MACreature SQUID = new MACreature("squid", EntityType.SQUID);
// Extended creatures // Extended creatures
EXPLODINGSHEEP(EntityType.SHEEP), public static final MACreature EXPLODINGSHEEP = new MACreature("explodingsheep", null, EntityType.SHEEP);
// Slimes // Slimes
SLIME(EntityType.SLIME), SLIMES(EntityType.SLIME), public static final MACreature SLIME = new MACreature("slime", EntityType.SLIME);
SLIMETINY(EntityType.SLIME), SLIMESTINY(EntityType.SLIME), public static final MACreature SLIMETINY = new MACreature("slimetiny", "slimestiny", EntityType.SLIME);
SLIMESMALL(EntityType.SLIME), SLIMESSMALL(EntityType.SLIME), public static final MACreature SLIMESMALL = new MACreature("slimesmall", "slimessmall", EntityType.SLIME);
SLIMEBIG(EntityType.SLIME), SLIMESBIG(EntityType.SLIME), public static final MACreature SLIMEBIG = new MACreature("slimebig", "slimesbig", EntityType.SLIME);
SLIMEHUGE(EntityType.SLIME), SLIMESHUGE(EntityType.SLIME), public static final MACreature SLIMEHUGE = new MACreature("slimehuge", "slimeshuge", EntityType.SLIME);
// Magma cubes // Magma cubes
MAGMACUBE(EntityType.MAGMA_CUBE), MAGMACUBES(EntityType.MAGMA_CUBE), public static final MACreature MAGMACUBE = new MACreature("magmacube", EntityType.MAGMA_CUBE);
MAGMACUBETINY(EntityType.MAGMA_CUBE), MAGMACUBESTINY(EntityType.MAGMA_CUBE), public static final MACreature MAGMACUBETINY = new MACreature("magmacubetiny", "magmacubestiny", EntityType.MAGMA_CUBE);
MAGMACUBESMALL(EntityType.MAGMA_CUBE),MAGMACUBESSMALL(EntityType.MAGMA_CUBE), public static final MACreature MAGMACUBESMALL = new MACreature("magmacubesmall", "magmacubessmall", EntityType.MAGMA_CUBE);
MAGMACUBEBIG(EntityType.MAGMA_CUBE), MAGMACUBESBIG(EntityType.MAGMA_CUBE), public static final MACreature MAGMACUBEBIG = new MACreature("magmacubebig", "magmacubesbig", EntityType.MAGMA_CUBE);
MAGMACUBEHUGE(EntityType.MAGMA_CUBE), MAGMACUBESHUGE(EntityType.MAGMA_CUBE), public static final MACreature MAGMACUBEHUGE = new MACreature("magmacubehuge", "magmacubeshuge", EntityType.MAGMA_CUBE);
// 1.4 creatures // 1.4 creatures
BAT(EntityType.BAT), BATS(EntityType.BAT), public static final MACreature BAT = new MACreature("bat", EntityType.BAT);
WITCH(EntityType.WITCH), WITCHES(EntityType.WITCH), public static final MACreature WITCH = new MACreature("witch", "witches", EntityType.WITCH);
WITHER(EntityType.WITHER), WITHERS(EntityType.WITHER), public static final MACreature WITHER = new MACreature("wither", EntityType.WITHER);
WITHERSKELETON(EntityType.SKELETON), WITHERSKELETONS(EntityType.SKELETON), public static final MACreature WITHERSKELETON = new MACreature("witherskeleton", EntityType.SKELETON);
BABYZOMBIE(EntityType.ZOMBIE), BABYZOMBIES(EntityType.ZOMBIE), public static final MACreature BABYZOMBIE = new MACreature("babyzombie", EntityType.ZOMBIE);
BABYPIGMAN(EntityType.PIG_ZOMBIE), BABYPIGMEN(EntityType.PIG_ZOMBIE), public static final MACreature BABYPIGMAN = new MACreature("babypigman", "babypigmen", EntityType.PIG_ZOMBIE);
ZOMBIEVILLAGER(EntityType.ZOMBIE), ZOMBIEVILLAGERS(EntityType.ZOMBIE), public static final MACreature ZOMBIEVILLAGER = new MACreature("zombievillager", EntityType.ZOMBIE);
BABYZOMBIEVILLAGER(EntityType.ZOMBIE),BABYZOMBIEVILLAGERS(EntityType.ZOMBIE), public static final MACreature BABYZOMBIEVILLAGER = new MACreature("babyzombievillager", EntityType.ZOMBIE);
// 1.6 creatures // 1.6 creatures
HORSE(EntityType.HORSE), HORSES(EntityType.HORSE), public static final MACreature HORSE = new MACreature("horse", EntityType.HORSE);
DONKEY(EntityType.HORSE), DONKEYS(EntityType.HORSE), public static final MACreature DONKEY = new MACreature("donkey", EntityType.HORSE);
MULE(EntityType.HORSE), MULES(EntityType.HORSE), public static final MACreature MULE = new MACreature("mule", EntityType.HORSE);
SKELETONHORSE(EntityType.HORSE), SKELETONHORSES(EntityType.HORSE), public static final MACreature SKELETONHORSE = new MACreature("skeletonhorse", EntityType.HORSE);
UNDEADHORSE(EntityType.HORSE), UNDEADHORSES(EntityType.HORSE); public static final MACreature UNDEADHORSE = new MACreature("undeadhorse", EntityType.HORSE);
private List<DyeColor> colors = Arrays.asList(DyeColor.values()); private List<DyeColor> colors = Arrays.asList(DyeColor.values());
private String name;
private String plural;
private EntityType type; private EntityType type;
private MACreature(EntityType type) { public MACreature(String name, String plural, EntityType type) {
this.name = name;
this.plural = (plural != null) ? plural : name;
this.type = type; this.type = type;
register();
}
public MACreature(String name, EntityType type) {
this(name, name + "s", type);
} }
private MACreature(EntityType type) {
this(
type.name().toLowerCase().replaceAll("[-_\\.]", ""),
type.name().toLowerCase().replaceAll("[-_\\.]", "") + "s",
type
);
}
private void register() {
map.put(name, this);
map.put(plural, this);
}
public String getName() {
return name;
}
public EntityType getType() { public EntityType getType() {
return type; return type;
} }
public static MACreature fromString(String string) { public static MACreature fromString(String string) {
return WaveUtils.getEnumFromString(MACreature.class, string.replaceAll("[-_\\.]", "")); return map.get(string.replaceAll("[-_\\.]", ""));
} }
public LivingEntity spawn(Arena arena, World world, Location loc) { public LivingEntity spawn(Arena arena, World world, Location loc) {
LivingEntity e = (LivingEntity) world.spawnEntity(loc, type); LivingEntity e = (LivingEntity) world.spawnEntity(loc, type);
e.getEquipment().clear(); e.getEquipment().clear();
switch (this) { switch (this.name) {
case SHEEP: case "sheep":
((Sheep) e).setColor(colors.get(MobArena.random.nextInt(colors.size()))); ((Sheep) e).setColor(colors.get(MobArena.random.nextInt(colors.size())));
break; break;
case EXPLODINGSHEEP: case "explodingsheep":
arena.getMonsterManager().addExplodingSheep(e); arena.getMonsterManager().addExplodingSheep(e);
((Sheep) e).setColor(DyeColor.RED); ((Sheep) e).setColor(DyeColor.RED);
break; break;
case POWEREDCREEPERS: case "poweredcreeper":
((Creeper) e).setPowered(true); ((Creeper) e).setPowered(true);
break; break;
case ANGRYWOLVES: case "angrywolf":
((Wolf) e).setAngry(true); ((Wolf) e).setAngry(true);
break; break;
case SLIME: case "slime":
case SLIMES: case "magmacube":
case MAGMACUBE:
case MAGMACUBES:
((Slime) e).setSize( (1 + MobArena.random.nextInt(3)) ); ((Slime) e).setSize( (1 + MobArena.random.nextInt(3)) );
break; break;
case SLIMETINY: case "slimetiny":
case SLIMESTINY: case "magmacubetiny":
case MAGMACUBETINY:
case MAGMACUBESTINY:
((Slime) e).setSize(1); ((Slime) e).setSize(1);
break; break;
case SLIMESMALL: case "slimesmall":
case SLIMESSMALL: case "magmacubesmall":
case MAGMACUBESMALL:
case MAGMACUBESSMALL:
((Slime) e).setSize(2); ((Slime) e).setSize(2);
break; break;
case SLIMEBIG: case "slimebig":
case SLIMESBIG: case "magmacubebig":
case MAGMACUBEBIG:
case MAGMACUBESBIG:
((Slime) e).setSize(3); ((Slime) e).setSize(3);
break; break;
case SLIMEHUGE: case "slimehuge":
case SLIMESHUGE: case "magmacubehuge":
case MAGMACUBEHUGE:
case MAGMACUBESHUGE:
((Slime) e).setSize(4); ((Slime) e).setSize(4);
break; break;
case SKELETON: case "skeleton":
case SKELETONS: e.getEquipment().setItemInHand(new ItemStack(Material.BOW, 1));
((Skeleton) e).getEquipment().setItemInHand(new ItemStack(Material.BOW, 1)); break;
break; case "zombiepigman":
case ZOMBIEPIGMAN: e.getEquipment().setItemInHand(new ItemStack(Material.GOLD_SWORD, 1));
case ZOMBIEPIGMEN: break;
((PigZombie) e).getEquipment().setItemInHand(new ItemStack(Material.GOLD_SWORD, 1)); case "zombievillager":
break;
case ZOMBIEVILLAGER:
case ZOMBIEVILLAGERS:
((Zombie) e).setVillager(true); ((Zombie) e).setVillager(true);
break; break;
case BABYZOMBIEVILLAGER: case "babyzombievillager":
case BABYZOMBIEVILLAGERS:
((Zombie) e).setVillager(true); ((Zombie) e).setVillager(true);
case BABYZOMBIE: case "babyzombie":
case BABYZOMBIES: case "babypigman":
case BABYPIGMAN:
case BABYPIGMEN:
((Zombie) e).setBaby(true); ((Zombie) e).setBaby(true);
break; break;
case WITHERSKELETON: case "witherskeleton":
case WITHERSKELETONS: e.getEquipment().setItemInHand(new ItemStack(Material.STONE_SWORD, 1));
((Skeleton) e).getEquipment().setItemInHand(new ItemStack(Material.STONE_SWORD, 1));
((Skeleton) e).setSkeletonType(SkeletonType.WITHER); ((Skeleton) e).setSkeletonType(SkeletonType.WITHER);
break; break;
case HORSE: case "horse":
case HORSES:
((Horse) e).setVariant(Horse.Variant.HORSE); ((Horse) e).setVariant(Horse.Variant.HORSE);
break; break;
case DONKEY: case "donkey":
case DONKEYS:
((Horse) e).setVariant(Horse.Variant.DONKEY); ((Horse) e).setVariant(Horse.Variant.DONKEY);
break; break;
case MULE: case "mule":
case MULES:
((Horse) e).setVariant(Horse.Variant.MULE); ((Horse) e).setVariant(Horse.Variant.MULE);
break; break;
case SKELETONHORSE: case "skeletonhorse":
case SKELETONHORSES:
((Horse) e).setVariant(Horse.Variant.SKELETON_HORSE); ((Horse) e).setVariant(Horse.Variant.SKELETON_HORSE);
break; break;
case UNDEADHORSE: case "undeadhorse":
case UNDEADHORSES:
((Horse) e).setVariant(Horse.Variant.UNDEAD_HORSE); ((Horse) e).setVariant(Horse.Variant.UNDEAD_HORSE);
break; break;
default: default:
@@ -32,14 +32,14 @@ public class SpecialWave extends AbstractWave
} }
int amount; int amount;
switch (entry.getValue()) { switch (entry.getValue().getName()) {
case POWEREDCREEPERS: case "poweredcreeper":
case ZOMBIEPIGMEN: case "zombiepigman":
case ANGRYWOLVES: amount = playerCount * 2; break; case "angrywolf": amount = playerCount * 2; break;
case SLIMES: amount = playerCount * 4; break; case "slime": amount = playerCount * 4; break;
case GIANTS: case "giant":
case GHASTS: amount = 2; case "ghast": amount = 2; break;
default: amount = playerCount + 1; break; default: amount = playerCount + 1; break;
} }
amount = (int) Math.max(1D, amount * super.getAmountMultiplier()); amount = (int) Math.max(1D, amount * super.getAmountMultiplier());