2011-09-04 11:21:59 +02:00
|
|
|
/*
|
|
|
|
* This file is from mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
|
|
|
|
*
|
|
|
|
* mmoMinecraft is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package com.gmail.nossr50.spout;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
import org.bukkit.World;
|
|
|
|
import org.bukkit.entity.Entity;
|
|
|
|
import org.bukkit.entity.LivingEntity;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.entity.Tameable;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import org.bukkit.entity.*;
|
|
|
|
import org.getspout.spoutapi.gui.Container;
|
|
|
|
import org.getspout.spoutapi.gui.GenericContainer;
|
|
|
|
import org.getspout.spoutapi.gui.Widget;
|
|
|
|
import org.getspout.spoutapi.gui.WidgetAnchor;
|
|
|
|
import org.getspout.spoutapi.player.SpoutPlayer;
|
|
|
|
|
|
|
|
import com.gmail.nossr50.Users;
|
2011-09-12 12:36:26 +02:00
|
|
|
import com.gmail.nossr50.config.LoadProperties;
|
2011-09-04 11:21:59 +02:00
|
|
|
import com.gmail.nossr50.party.Party;
|
2011-09-12 09:19:15 +02:00
|
|
|
import com.gmail.nossr50.spout.util.GenericLivingEntity;
|
2011-09-04 11:21:59 +02:00
|
|
|
|
|
|
|
public class mmoHelper
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A map of player containers, each container is their party bar
|
|
|
|
*/
|
|
|
|
public static HashMap<Player, GenericContainer> containers = new HashMap<Player, GenericContainer>();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the percentage health of a Player.
|
|
|
|
* @param player The Player we're interested in
|
|
|
|
* @return The percentage of max health
|
|
|
|
*/
|
|
|
|
public static int getHealth(Entity player) {
|
|
|
|
if (player != null && player instanceof LivingEntity) {
|
|
|
|
try {
|
|
|
|
return Math.min(((LivingEntity) player).getHealth() * 5, 100);
|
|
|
|
} catch (Exception e) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the colour of a LivingEntity target from a player's point of view.
|
|
|
|
* @param player The player viewing the target
|
|
|
|
* @param target The target to name
|
|
|
|
* @return The name to use
|
|
|
|
*/
|
|
|
|
public static String getColor(Player player, LivingEntity target) {
|
|
|
|
if (target instanceof Player) {
|
2011-09-12 12:36:26 +02:00
|
|
|
if (((Player) target).isOp()) {
|
|
|
|
return ChatColor.GOLD.toString();
|
|
|
|
}
|
2011-09-04 11:21:59 +02:00
|
|
|
return ChatColor.YELLOW.toString();
|
|
|
|
} else {
|
|
|
|
if (target instanceof Monster) {
|
2011-09-12 12:36:26 +02:00
|
|
|
if (player != null && player.equals(((Monster) target).getTarget())) {
|
2011-09-04 11:21:59 +02:00
|
|
|
return ChatColor.RED.toString();
|
|
|
|
} else {
|
|
|
|
return ChatColor.YELLOW.toString();
|
|
|
|
}
|
|
|
|
} else if (target instanceof WaterMob) {
|
|
|
|
return ChatColor.GREEN.toString();
|
|
|
|
} else if (target instanceof Flying) {
|
|
|
|
return ChatColor.YELLOW.toString();
|
|
|
|
} else if (target instanceof Animals) {
|
2011-09-12 12:36:26 +02:00
|
|
|
if (player != null && player.equals(((Animals) target).getTarget())) {
|
2011-09-04 11:21:59 +02:00
|
|
|
return ChatColor.RED.toString();
|
|
|
|
} else if (target instanceof Tameable) {
|
|
|
|
Tameable pet = (Tameable) target;
|
|
|
|
if (pet.isTamed()) {
|
|
|
|
return ChatColor.GREEN.toString();
|
|
|
|
} else {
|
|
|
|
return ChatColor.YELLOW.toString();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return ChatColor.GRAY.toString();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return ChatColor.GRAY.toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the percentage armour of a Player.
|
|
|
|
* @param player The Player we're interested in
|
|
|
|
* @return The percentage of max armour
|
|
|
|
*/
|
|
|
|
public static int getArmor(Entity player) {
|
|
|
|
if (player != null && player instanceof Player) {
|
|
|
|
int armor = 0, max, multi[] = {15, 30, 40, 15};
|
|
|
|
ItemStack inv[] = ((Player) player).getInventory().getArmorContents();
|
|
|
|
for (int i = 0; i < inv.length; i++) {
|
|
|
|
max = inv[i].getType().getMaxDurability();
|
|
|
|
if (max >= 0) {
|
|
|
|
armor += multi[i] * (max - inv[i].getDurability()) / max;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return armor;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String getSimpleName(LivingEntity target, boolean showOwner) {
|
|
|
|
String name = "";
|
|
|
|
if (target instanceof Player) {
|
2011-09-12 12:36:26 +02:00
|
|
|
if (LoadProperties.showDisplayName) {
|
|
|
|
name += ((Player) target).getName();
|
|
|
|
} else {
|
|
|
|
name += ((Player) target).getDisplayName();
|
|
|
|
}
|
|
|
|
} else if (target instanceof HumanEntity) {
|
|
|
|
name += ((HumanEntity) target).getName();
|
2011-09-04 11:21:59 +02:00
|
|
|
} else {
|
|
|
|
if (target instanceof Tameable) {
|
2011-09-12 12:36:26 +02:00
|
|
|
if (((Tameable) target).isTamed()) {
|
|
|
|
if (showOwner && ((Tameable) target).getOwner() instanceof Player) {
|
|
|
|
if (LoadProperties.showDisplayName) {
|
|
|
|
name += ((Player) ((Tameable) target).getOwner()).getName() + "'s ";
|
|
|
|
} else {
|
|
|
|
name += ((Player) ((Tameable) target).getOwner()).getDisplayName() + "'s ";
|
|
|
|
}
|
2011-09-04 11:21:59 +02:00
|
|
|
} else {
|
|
|
|
name += "Pet ";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (target instanceof Chicken) {
|
|
|
|
name += "Chicken";
|
|
|
|
} else if (target instanceof Cow) {
|
|
|
|
name += "Cow";
|
|
|
|
} else if (target instanceof Creeper) {
|
|
|
|
name += "Creeper";
|
2011-09-12 12:36:26 +02:00
|
|
|
} else if (target instanceof Ghast) {
|
|
|
|
name += "Ghast";
|
2011-09-04 11:21:59 +02:00
|
|
|
} else if (target instanceof Giant) {
|
|
|
|
name += "Giant";
|
|
|
|
} else if (target instanceof Pig) {
|
|
|
|
name += "Pig";
|
|
|
|
} else if (target instanceof PigZombie) {
|
|
|
|
name += "PigZombie";
|
|
|
|
} else if (target instanceof Sheep) {
|
|
|
|
name += "Sheep";
|
2011-09-12 12:36:26 +02:00
|
|
|
} else if (target instanceof Slime) {
|
|
|
|
name += "Slime";
|
2011-09-04 11:21:59 +02:00
|
|
|
} else if (target instanceof Skeleton) {
|
|
|
|
name += "Skeleton";
|
|
|
|
} else if (target instanceof Spider) {
|
|
|
|
name += "Spider";
|
|
|
|
} else if (target instanceof Squid) {
|
|
|
|
name += "Squid";
|
|
|
|
} else if (target instanceof Wolf) {
|
|
|
|
name += "Wolf";
|
|
|
|
} else if (target instanceof Zombie) {
|
|
|
|
name += "Zombie";
|
|
|
|
} else if (target instanceof Monster) {
|
|
|
|
name += "Monster";
|
|
|
|
} else if (target instanceof Creature) {
|
|
|
|
name += "Creature";
|
|
|
|
} else {
|
|
|
|
name += "Unknown";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static LivingEntity[] getPets(HumanEntity player) {
|
|
|
|
ArrayList<LivingEntity> pets = new ArrayList<LivingEntity>();
|
2011-09-12 12:36:26 +02:00
|
|
|
if (player != null && (!(player instanceof Player) || ((Player) player).isOnline())) {
|
2011-09-04 11:21:59 +02:00
|
|
|
String name = player.getName();
|
|
|
|
for (World world : Bukkit.getServer().getWorlds()) {
|
|
|
|
for (LivingEntity entity : world.getLivingEntities()) {
|
|
|
|
if (entity instanceof Tameable && ((Tameable) entity).isTamed() && ((Tameable) entity).getOwner() instanceof Player) {
|
|
|
|
if (name.equals(((Player) ((Tameable) entity).getOwner()).getName())) {
|
|
|
|
pets.add(entity);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LivingEntity[] list = new LivingEntity[pets.size()];
|
|
|
|
pets.toArray(list);
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void update(Player player)
|
|
|
|
{
|
|
|
|
//boolean show_pets = true;
|
|
|
|
Container container = containers.get(player);
|
|
|
|
|
|
|
|
if (container != null)
|
|
|
|
{
|
|
|
|
int index = 0;
|
|
|
|
Widget[] bars = container.getChildren();
|
|
|
|
for (String name : Party.getInstance().getPartyMembersByName(player).meFirst(player.getName()))
|
|
|
|
{
|
|
|
|
GenericLivingEntity bar;
|
|
|
|
if (index >= bars.length)
|
|
|
|
{
|
|
|
|
container.addChild(bar = new GenericLivingEntity());
|
|
|
|
} else {
|
|
|
|
bar = (GenericLivingEntity)bars[index];
|
|
|
|
}
|
2011-11-28 14:17:01 +01:00
|
|
|
bar.setEntity(name, Party.getInstance().isPartyLeader(name, Users.getProfile(Bukkit.getServer().getPlayer(name)).getParty()) ? ChatColor.GREEN + "@" : "");
|
2011-09-04 11:21:59 +02:00
|
|
|
//bar.setTargets(show_pets ? getPets(Bukkit.getServer().getPlayer(name)) : null);
|
|
|
|
index++;
|
|
|
|
}
|
|
|
|
while (index < bars.length) {
|
|
|
|
container.removeChild(bars[index++]);
|
|
|
|
}
|
|
|
|
container.updateLayout();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void initialize(SpoutPlayer sPlayer, Plugin plugin)
|
|
|
|
{
|
|
|
|
GenericContainer container = new GenericContainer();
|
|
|
|
|
|
|
|
container.setAlign(WidgetAnchor.TOP_LEFT)
|
|
|
|
.setAnchor(WidgetAnchor.TOP_LEFT)
|
|
|
|
.setX(3)
|
|
|
|
.setY(3)
|
|
|
|
.setWidth(427)
|
|
|
|
.setHeight(240)
|
|
|
|
.setFixed(true);
|
|
|
|
|
|
|
|
mmoHelper.containers.put(sPlayer, container);
|
|
|
|
|
|
|
|
sPlayer.getMainScreen().attachWidget(plugin, container);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Update all parties.
|
|
|
|
*/
|
|
|
|
public static void updateAll() {
|
|
|
|
for(Player x : Bukkit.getServer().getOnlinePlayers())
|
|
|
|
{
|
|
|
|
if(Users.getProfile(x).inParty())
|
|
|
|
{
|
|
|
|
update(x);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|