Don't remove monster weapons.

Changes the way monster equipment is handled from clearing _all_ items to clearing just the armor contents. This means that monsters that naturally spawn with weapons won't need their weapons added back in.

It also means that monsters that _occasionally_ spawn naturally with weapons now may do that in arenas. This is deemed acceptable, because:

- occasional weapons don't have as much of an impact as occasional armor,
- the forwards compatibility aspect is too valuable to pass up on, and
- should occasional weapons become too much of an issue, they can be conditionally removed, i.e. we can implement the _inverse_ behavior of what we had previously.

Fixes #641
Fixes #686

Co-authored-by: Andreas Troelsen <[email protected]>
This commit is contained in:
Maroon28
2021-08-07 14:59:07 +02:00
committed by Andreas Troelsen
co-authored by Andreas Troelsen
parent 7b9a9505b9
commit a21f47e193
2 changed files with 4 additions and 8 deletions
@@ -30,6 +30,7 @@ public class MACreature {
private static final Map<String,MACreature> map = new HashMap<>();
private static final List<DyeColor> colors = Arrays.asList(DyeColor.values());
private static final ItemStack[] NO_ARMOR = new ItemStack[0];
static {
registerEntityTypeValues();
@@ -88,8 +89,8 @@ public class MACreature {
public LivingEntity spawn(Arena arena, World world, Location loc) {
LivingEntity e = (LivingEntity) world.spawnEntity(loc, type);
e.getEquipment().clear();
e.setCanPickupItems(false);
e.getEquipment().setArmorContents(NO_ARMOR);
switch (this.name) {
case "sheep":
@@ -128,10 +129,6 @@ public class MACreature {
case "magmacubehuge":
((Slime) e).setSize(4);
break;
case "skeleton":
case "stray":
e.getEquipment().setItemInMainHand(new ItemStack(Material.BOW, 1));
break;
case "babyzombievillager":
case "babyzombie":
((Zombie) e).setBaby(true);
@@ -149,9 +146,6 @@ public class MACreature {
case "killerbunny":
((Rabbit) e).setRabbitType(Rabbit.Type.THE_KILLER_BUNNY);
break;
case "witherskeleton":
e.getEquipment().setItemInMainHand(new ItemStack(Material.STONE_SWORD, 1));
break;
default:
break;
}