mirror of
https://github.com/garbagemule/MobArena.git
synced 2025-02-14 19:42:09 +01:00
Add support for ocelot pets.
By default, a raw fish will turn into a pet ocelot, but the item type is configurable.
This commit is contained in:
parent
63d2c552a6
commit
ccf6cda59a
@ -29,6 +29,7 @@ import org.bukkit.entity.AnimalTamer;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Ocelot;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.Slime;
|
||||
@ -596,6 +597,9 @@ public class ArenaListener
|
||||
else if (damager instanceof Wolf && arena.hasPet(damager)) {
|
||||
damager = (Player) ((Wolf) damager).getOwner();
|
||||
}
|
||||
else if (damager instanceof Ocelot && arena.hasPet(damager)) {
|
||||
damager = (Player) ((Ocelot) damager).getOwner();
|
||||
}
|
||||
|
||||
// If the damager was a player, add to kills.
|
||||
if (damager instanceof Player) {
|
||||
@ -694,6 +698,9 @@ public class ArenaListener
|
||||
if (damagee instanceof Wolf && arena.hasPet(damagee)) {
|
||||
onPetDamage(event, (Wolf) damagee, damager);
|
||||
}
|
||||
else if (damagee instanceof Ocelot && arena.hasPet(damagee)) {
|
||||
onPetDamage(event, (Ocelot) damagee, damager);
|
||||
}
|
||||
// Mount
|
||||
else if (damagee instanceof AbstractHorse && monsters.hasMount(damagee)) {
|
||||
onMountDamage(event, (Horse) damagee, damager);
|
||||
@ -745,6 +752,10 @@ public class ArenaListener
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
private void onPetDamage(EntityDamageEvent event, Ocelot pet, Entity damager) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
private void onMountDamage(EntityDamageEvent event, Horse mount, Entity damager) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -777,6 +788,11 @@ public class ArenaListener
|
||||
ArenaPlayerStatistics aps = arena.getArenaPlayer(p).getStats();
|
||||
aps.add("dmgDone", event.getDamage());
|
||||
}
|
||||
else if (damager instanceof Ocelot && arena.hasPet(damager)) {
|
||||
Player p = (Player) ((Ocelot) damager).getOwner();
|
||||
ArenaPlayerStatistics aps = arena.getArenaPlayer(p).getStats();
|
||||
aps.add("dmgDone", event.getDamage());
|
||||
}
|
||||
//TODO add in check for player made golems doing damage
|
||||
else if (damager instanceof LivingEntity) {
|
||||
if (!monsterInfight)
|
||||
|
@ -57,7 +57,7 @@ public class ArenaMasterImpl implements ArenaMaster
|
||||
this.classes = new HashMap<>();
|
||||
|
||||
this.allowedCommands = new HashSet<>();
|
||||
this.spawnsPets = new SpawnsPets(Material.BONE);
|
||||
this.spawnsPets = new SpawnsPets(Material.BONE, Material.RAW_FISH);
|
||||
|
||||
this.enabled = config.getBoolean("global-settings.enabled", true);
|
||||
}
|
||||
@ -266,14 +266,19 @@ public class ArenaMasterImpl implements ArenaMaster
|
||||
|
||||
private void loadPetItems(ConfigurationSection settings) {
|
||||
String wolf = settings.getString("pet-items.wolf", "");
|
||||
String ocelot = settings.getString("pet-items.ocelot", "");
|
||||
|
||||
Material wolfMaterial = Material.getMaterial(wolf.toUpperCase());
|
||||
Material ocelotMaterial = Material.getMaterial(ocelot.toUpperCase());
|
||||
|
||||
if (wolfMaterial == null && !wolf.isEmpty()) {
|
||||
plugin.getLogger().warning("Unknown item type for wolf pet item: " + wolf);
|
||||
}
|
||||
if (ocelotMaterial == null && !ocelot.isEmpty()) {
|
||||
plugin.getLogger().warning("Unknown item type for ocelot pet item: " + ocelot);
|
||||
}
|
||||
|
||||
spawnsPets = new SpawnsPets(wolfMaterial);
|
||||
spawnsPets = new SpawnsPets(wolfMaterial, ocelotMaterial);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,6 +4,7 @@ import com.garbagemule.MobArena.healthbar.HealthBar;
|
||||
import com.garbagemule.MobArena.waves.MABoss;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Ocelot;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -19,26 +20,29 @@ import java.util.Set;
|
||||
public class MonsterManager
|
||||
{
|
||||
private Set<LivingEntity> monsters, sheep, golems;
|
||||
private Set<Wolf> pets;
|
||||
private Set<Wolf> petWolves;
|
||||
private Set<Ocelot> petOcelots;
|
||||
private Map<LivingEntity,MABoss> bosses;
|
||||
private Map<LivingEntity,List<ItemStack>> suppliers;
|
||||
private Set<LivingEntity> mounts;
|
||||
|
||||
public MonsterManager() {
|
||||
this.monsters = new HashSet<>();
|
||||
this.sheep = new HashSet<>();
|
||||
this.golems = new HashSet<>();
|
||||
this.pets = new HashSet<>();
|
||||
this.bosses = new HashMap<>();
|
||||
this.suppliers = new HashMap<>();
|
||||
this.mounts = new HashSet<>();
|
||||
this.monsters = new HashSet<>();
|
||||
this.sheep = new HashSet<>();
|
||||
this.golems = new HashSet<>();
|
||||
this.petWolves = new HashSet<>();
|
||||
this.petOcelots = new HashSet<>();
|
||||
this.bosses = new HashMap<>();
|
||||
this.suppliers = new HashMap<>();
|
||||
this.mounts = new HashSet<>();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
monsters.clear();
|
||||
sheep.clear();
|
||||
golems.clear();
|
||||
pets.clear();
|
||||
petWolves.clear();
|
||||
petOcelots.clear();
|
||||
bosses.clear();
|
||||
suppliers.clear();
|
||||
mounts.clear();
|
||||
@ -53,7 +57,8 @@ public class MonsterManager
|
||||
removeAll(monsters);
|
||||
removeAll(sheep);
|
||||
removeAll(golems);
|
||||
removeAll(pets);
|
||||
removeAll(petWolves);
|
||||
removeAll(petOcelots);
|
||||
removeAll(bosses.keySet());
|
||||
removeAll(suppliers.keySet());
|
||||
removeAll(mounts);
|
||||
@ -73,7 +78,8 @@ public class MonsterManager
|
||||
if (monsters.remove(e)) {
|
||||
sheep.remove(e);
|
||||
golems.remove(e);
|
||||
pets.remove(e);
|
||||
petWolves.remove(e);
|
||||
petOcelots.remove(e);
|
||||
suppliers.remove(e);
|
||||
MABoss boss = bosses.remove(e);
|
||||
if (boss != null) {
|
||||
@ -118,26 +124,33 @@ public class MonsterManager
|
||||
return golems.remove(e);
|
||||
}
|
||||
|
||||
public Set<Wolf> getPets() {
|
||||
return pets;
|
||||
}
|
||||
|
||||
public void addPet(Wolf w) {
|
||||
pets.add(w);
|
||||
petWolves.add(w);
|
||||
}
|
||||
|
||||
public void addPet(Ocelot o) {
|
||||
petOcelots.add(o);
|
||||
}
|
||||
|
||||
public boolean hasPet(Entity e) {
|
||||
return pets.contains(e);
|
||||
return petWolves.contains(e) || petOcelots.contains(e);
|
||||
}
|
||||
|
||||
public void removePets(Player p) {
|
||||
for (Wolf w : pets) {
|
||||
for (Wolf w : petWolves) {
|
||||
if (w == null || !(w.getOwner() instanceof Player) || !w.getOwner().getName().equals(p.getName()))
|
||||
continue;
|
||||
|
||||
w.setOwner(null);
|
||||
w.remove();
|
||||
}
|
||||
for (Ocelot o : petOcelots) {
|
||||
if (o == null || !(o.getOwner() instanceof Player) || !o.getOwner().getName().equals(p.getName()))
|
||||
continue;
|
||||
|
||||
o.setOwner(null);
|
||||
o.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public void addMount(LivingEntity e) {
|
||||
|
@ -3,6 +3,7 @@ package com.garbagemule.MobArena;
|
||||
import com.garbagemule.MobArena.framework.Arena;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Ocelot;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
@ -10,9 +11,11 @@ import org.bukkit.inventory.PlayerInventory;
|
||||
public class SpawnsPets {
|
||||
|
||||
private final Material wolfMaterial;
|
||||
private final Material ocelotMaterial;
|
||||
|
||||
SpawnsPets(Material wolfMaterial) {
|
||||
SpawnsPets(Material wolfMaterial, Material ocelotMaterial) {
|
||||
this.wolfMaterial = wolfMaterial;
|
||||
this.ocelotMaterial = ocelotMaterial;
|
||||
}
|
||||
|
||||
void spawn(Arena arena) {
|
||||
@ -29,6 +32,7 @@ public class SpawnsPets {
|
||||
return;
|
||||
}
|
||||
spawnWolfPets(player, arena);
|
||||
spawnOcelotPets(player, arena);
|
||||
}
|
||||
|
||||
private void spawnWolfPets(Player player, Arena arena) {
|
||||
@ -52,4 +56,25 @@ public class SpawnsPets {
|
||||
inv.setItem(index, null);
|
||||
}
|
||||
|
||||
private void spawnOcelotPets(Player player, Arena arena) {
|
||||
if (ocelotMaterial == null) {
|
||||
return;
|
||||
}
|
||||
PlayerInventory inv = player.getInventory();
|
||||
int index = inv.first(ocelotMaterial);
|
||||
if (index == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
int amount = inv.getItem(index).getAmount();
|
||||
for (int i = 0; i < amount; i++) {
|
||||
Ocelot ocelot = (Ocelot) arena.getWorld().spawnEntity(player.getLocation(), EntityType.OCELOT);
|
||||
ocelot.setTamed(true);
|
||||
ocelot.setOwner(player);
|
||||
arena.getMonsterManager().addPet(ocelot);
|
||||
}
|
||||
|
||||
inv.setItem(index, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,3 +4,4 @@ update-notification: true
|
||||
prefix: '&a[MobArena] '
|
||||
pet-items:
|
||||
wolf: bone
|
||||
ocelot: raw_fish
|
||||
|
Loading…
Reference in New Issue
Block a user