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