mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-26 23:26:45 +01:00
Gutting out the old Party HUD. Lets make a new one.
This commit is contained in:
parent
19ea6707fe
commit
7ad9b2ed58
@ -60,7 +60,6 @@ import com.gmail.nossr50.commands.general.XprateCommand;
|
|||||||
import com.gmail.nossr50.config.LoadProperties;
|
import com.gmail.nossr50.config.LoadProperties;
|
||||||
import com.gmail.nossr50.runnables.RemoveProfileFromMemoryTask;
|
import com.gmail.nossr50.runnables.RemoveProfileFromMemoryTask;
|
||||||
import com.gmail.nossr50.spout.SpoutStuff;
|
import com.gmail.nossr50.spout.SpoutStuff;
|
||||||
import com.gmail.nossr50.spout.mmoHelper;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
import com.gmail.nossr50.datatypes.SkillType;
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
import com.gmail.nossr50.locale.mcLocale;
|
||||||
@ -182,8 +181,6 @@ public class mcPlayerListener implements Listener
|
|||||||
{
|
{
|
||||||
if(SpoutStuff.playerHUDs.containsKey(player))
|
if(SpoutStuff.playerHUDs.containsKey(player))
|
||||||
SpoutStuff.playerHUDs.remove(player);
|
SpoutStuff.playerHUDs.remove(player);
|
||||||
if(mmoHelper.containers.containsKey(player))
|
|
||||||
mmoHelper.containers.remove(player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Bleed it out
|
//Bleed it out
|
||||||
|
@ -34,7 +34,6 @@ import com.gmail.nossr50.Users;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
import com.gmail.nossr50.datatypes.PlayerProfile;
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
import com.gmail.nossr50.locale.mcLocale;
|
||||||
import com.gmail.nossr50.spout.util.ArrayListString;
|
|
||||||
|
|
||||||
|
|
||||||
public class Party
|
public class Party
|
||||||
@ -145,22 +144,6 @@ public class Party
|
|||||||
}
|
}
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
public ArrayListString getPartyMembersByName(Player player)
|
|
||||||
{
|
|
||||||
ArrayListString players = new ArrayListString();
|
|
||||||
|
|
||||||
for(Player p : Bukkit.getServer().getOnlinePlayers())
|
|
||||||
{
|
|
||||||
if(p.isOnline())
|
|
||||||
{
|
|
||||||
if(inSameParty(player, p))
|
|
||||||
{
|
|
||||||
players.add(p.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void informPartyMembersOwnerChange(String newOwner) {
|
public void informPartyMembersOwnerChange(String newOwner) {
|
||||||
Player newOwnerPlayer = plugin.getServer().getPlayer(newOwner);
|
Player newOwnerPlayer = plugin.getServer().getPlayer(newOwner);
|
||||||
|
@ -1,269 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.party.Party;
|
|
||||||
import com.gmail.nossr50.spout.util.GenericLivingEntity;
|
|
||||||
|
|
||||||
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) {
|
|
||||||
if (((Player) target).isOp()) {
|
|
||||||
return ChatColor.GOLD.toString();
|
|
||||||
}
|
|
||||||
return ChatColor.YELLOW.toString();
|
|
||||||
} else {
|
|
||||||
if (target instanceof Monster) {
|
|
||||||
if (player != null && player.equals(((Monster) target).getTarget())) {
|
|
||||||
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) {
|
|
||||||
if (player != null && player.equals(((Animals) target).getTarget())) {
|
|
||||||
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) {
|
|
||||||
if (LoadProperties.showDisplayName) {
|
|
||||||
name += ((Player) target).getName();
|
|
||||||
} else {
|
|
||||||
name += ((Player) target).getDisplayName();
|
|
||||||
}
|
|
||||||
} else if (target instanceof HumanEntity) {
|
|
||||||
name += ((HumanEntity) target).getName();
|
|
||||||
} else {
|
|
||||||
if (target instanceof Tameable) {
|
|
||||||
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 ";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
name += "Pet ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (target instanceof Chicken) {
|
|
||||||
name += "Chicken";
|
|
||||||
} else if (target instanceof Cow) {
|
|
||||||
name += "Cow";
|
|
||||||
} else if (target instanceof Creeper) {
|
|
||||||
name += "Creeper";
|
|
||||||
} else if (target instanceof Ghast) {
|
|
||||||
name += "Ghast";
|
|
||||||
} 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";
|
|
||||||
} else if (target instanceof Slime) {
|
|
||||||
name += "Slime";
|
|
||||||
} 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>();
|
|
||||||
if (player != null && (!(player instanceof Player) || ((Player) player).isOnline())) {
|
|
||||||
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];
|
|
||||||
}
|
|
||||||
bar.setEntity(name, Party.getInstance().isPartyLeader(name, Users.getProfile(Bukkit.getServer().getPlayer(name)).getParty()) ? ChatColor.GREEN + "@" : "");
|
|
||||||
//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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,112 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of 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.util;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Case insensitive ArrayList<String>.
|
|
||||||
* Overrides the .contains(), .indexOf(), .lastIndexOf() and .remove() methods.
|
|
||||||
*/
|
|
||||||
public class ArrayListString extends ArrayList<String> {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = -8111006526598412404L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if this list contains the specified string.
|
|
||||||
* @param o String whose presence in this list is to be tested
|
|
||||||
* @return true if this list contains the specified string
|
|
||||||
*/
|
|
||||||
public boolean contains(String o) {
|
|
||||||
for (String e : this) {
|
|
||||||
if (o == null ? e == null : o.equalsIgnoreCase(e)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string.
|
|
||||||
* @param o String to search for
|
|
||||||
* @return The index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string
|
|
||||||
*/
|
|
||||||
public int indexOf(String o) {
|
|
||||||
for (int i = 0; i < this.size(); i++) {
|
|
||||||
if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string.
|
|
||||||
* @param o String to search for
|
|
||||||
* @return The index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string
|
|
||||||
*/
|
|
||||||
public int lastIndexOf(String o) {
|
|
||||||
for (int i = size() - 1; i >= 0; i--) {
|
|
||||||
if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes the first occurrence of the specified string from this list, if it is present. If the list does not contain the string, it is unchanged.
|
|
||||||
* @param o String to be removed from this list, if present
|
|
||||||
* @return true if this list contained the specified string
|
|
||||||
*/
|
|
||||||
public boolean remove(String o) {
|
|
||||||
int i = indexOf(o);
|
|
||||||
if (i != -1) {
|
|
||||||
remove(i);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the element at the specified position in this list.
|
|
||||||
* This is for finding the correct capitalisation of an element.
|
|
||||||
* @param index String to search for
|
|
||||||
* @return the correctly capitalised element
|
|
||||||
*/
|
|
||||||
public String get(String index) {
|
|
||||||
int i = this.indexOf(index);
|
|
||||||
if (i != -1) {
|
|
||||||
return this.get(i);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayListString meFirst(String name) {
|
|
||||||
ArrayListString copy = new ArrayListString();
|
|
||||||
if (this.contains(name)) {
|
|
||||||
copy.add(name);
|
|
||||||
}
|
|
||||||
for (String next : this) {
|
|
||||||
if (!next.equalsIgnoreCase(name)) {
|
|
||||||
copy.add(next);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return copy;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of mmoMinecraft (https://github.com/mmoMinecraftDev).
|
|
||||||
*
|
|
||||||
* 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.util;
|
|
||||||
|
|
||||||
import org.getspout.spoutapi.gui.GenericTexture;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
|
|
||||||
public final class GenericFace extends GenericTexture {
|
|
||||||
|
|
||||||
private static String facePath = "http://face.rycochet.net/";
|
|
||||||
private static int defaultSize = 8;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public GenericFace() {
|
|
||||||
this("", defaultSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericFace(String name) {
|
|
||||||
this(name, defaultSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericFace(String name, int size) {
|
|
||||||
if (LoadProperties.showFaces) {
|
|
||||||
this.setWidth(size).setHeight(size).setFixed(true);
|
|
||||||
setName(name);
|
|
||||||
} else {
|
|
||||||
this.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericFace setName(String name) {
|
|
||||||
if (LoadProperties.showFaces) {
|
|
||||||
this.name = name == null ? "" : name;
|
|
||||||
super.setUrl(facePath + this.name + ".png");
|
|
||||||
super.setDirty(true);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericFace setSize(int size) {
|
|
||||||
if (LoadProperties.showFaces) {
|
|
||||||
super.setWidth(size).setHeight(size);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,227 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of mmoHelperMinecraft (https://github.com/mmoHelperMinecraftDev).
|
|
||||||
*
|
|
||||||
* mmoHelperMinecraft 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.util;
|
|
||||||
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.getspout.spoutapi.gui.*;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.spout.mmoHelper;
|
|
||||||
|
|
||||||
public class GenericLivingEntity extends GenericContainer {
|
|
||||||
|
|
||||||
private Container _space;
|
|
||||||
private Label _label;
|
|
||||||
private Gradient _health;
|
|
||||||
private Gradient _armor;
|
|
||||||
private GenericFace _face;
|
|
||||||
private int health = 100;
|
|
||||||
private int armor = 100;
|
|
||||||
private int def_width = 80;
|
|
||||||
private int def_height = 14;
|
|
||||||
private boolean target = false;
|
|
||||||
String face = "~";
|
|
||||||
String label = "";
|
|
||||||
|
|
||||||
public GenericLivingEntity() {
|
|
||||||
super();
|
|
||||||
Color black = new Color(0, 0, 0, 0.75f);
|
|
||||||
|
|
||||||
this.addChildren(
|
|
||||||
new GenericContainer( // Used for the bar, this.children with an index 1+ are targets
|
|
||||||
_space = (Container) new GenericContainer()
|
|
||||||
.setMinWidth(def_width / 4)
|
|
||||||
.setMaxWidth(def_width / 4)
|
|
||||||
.setVisible(target),
|
|
||||||
new GenericContainer(
|
|
||||||
new GenericGradient()
|
|
||||||
.setTopColor(black)
|
|
||||||
.setBottomColor(black)
|
|
||||||
.setPriority(RenderPriority.Highest),
|
|
||||||
new GenericContainer(
|
|
||||||
_health = (Gradient) new GenericGradient(),
|
|
||||||
_armor = (Gradient) new GenericGradient()
|
|
||||||
) .setMargin(1)
|
|
||||||
.setPriority(RenderPriority.High),
|
|
||||||
new GenericContainer(
|
|
||||||
_face = (GenericFace) new GenericFace()
|
|
||||||
.setMargin(3, 0, 3, 3),
|
|
||||||
_label = (Label) new GenericLabel()
|
|
||||||
.setMargin(3)
|
|
||||||
) .setLayout(ContainerType.HORIZONTAL)
|
|
||||||
) .setLayout(ContainerType.OVERLAY)
|
|
||||||
) .setLayout(ContainerType.HORIZONTAL)
|
|
||||||
.setMargin(0, 0, 1, 0)
|
|
||||||
.setFixed(true)
|
|
||||||
.setWidth(def_width)
|
|
||||||
.setHeight(def_height)
|
|
||||||
) .setAlign(WidgetAnchor.TOP_LEFT)
|
|
||||||
.setFixed(true)
|
|
||||||
.setWidth(def_width)
|
|
||||||
.setHeight(def_height + 1);
|
|
||||||
|
|
||||||
this.setHealthColor(new Color(1f, 0, 0, 0.75f));
|
|
||||||
this.setArmorColor(new Color(0.75f, 0.75f, 0.75f, 0.75f));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the display from a possibly offline player
|
|
||||||
* @param name
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public GenericLivingEntity setEntity(String name) {
|
|
||||||
return setEntity(name, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the display from a possibly offline player
|
|
||||||
* @param name
|
|
||||||
* @param prefix Place before the name
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public GenericLivingEntity setEntity(String name, String prefix) {
|
|
||||||
Player player = this.getPlugin().getServer().getPlayer(name);
|
|
||||||
if (player != null && player.isOnline()) {
|
|
||||||
return setEntity(player, prefix);
|
|
||||||
}
|
|
||||||
setHealth(0);
|
|
||||||
setArmor(0);
|
|
||||||
setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, null) + name);
|
|
||||||
setFace("~" + name);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the display from a player or living entity
|
|
||||||
* @param entity
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public GenericLivingEntity setEntity(LivingEntity entity) {
|
|
||||||
return setEntity(entity, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the display from a player or living entity
|
|
||||||
* @param entity
|
|
||||||
* @param prefix Place before the name
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public GenericLivingEntity setEntity(LivingEntity entity, String prefix) {
|
|
||||||
if (entity != null && entity instanceof LivingEntity) {
|
|
||||||
setHealth(mmoHelper.getHealth(entity)); // Needs a maxHealth() check
|
|
||||||
setArmor(mmoHelper.getArmor(entity));
|
|
||||||
setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, entity) + mmoHelper.getSimpleName(entity, !target));
|
|
||||||
setFace(entity instanceof Player ? ((Player)entity).getName() : "+" + mmoHelper.getSimpleName(entity,false).replaceAll(" ", ""));
|
|
||||||
} else {
|
|
||||||
setHealth(0);
|
|
||||||
setArmor(0);
|
|
||||||
setLabel("");
|
|
||||||
setFace("");
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the targets of this entity - either actual targets, or pets etc
|
|
||||||
* @param targets
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public GenericLivingEntity setTargets(LivingEntity... targets) {
|
|
||||||
Widget[] widgets = this.getChildren();
|
|
||||||
if (targets == null) {
|
|
||||||
targets = new LivingEntity[0]; // zero-length array is easier to handle
|
|
||||||
}
|
|
||||||
for (int i=targets.length + 1; i<widgets.length; i++) {
|
|
||||||
this.removeChild(widgets[i]);
|
|
||||||
}
|
|
||||||
for (int i=0; i<targets.length; i++) {
|
|
||||||
GenericLivingEntity child;
|
|
||||||
if (widgets.length > i + 1) {
|
|
||||||
child = (GenericLivingEntity) widgets[i+1];
|
|
||||||
} else {
|
|
||||||
this.addChild(child = new GenericLivingEntity());
|
|
||||||
}
|
|
||||||
child.setTarget(true);
|
|
||||||
child.setEntity(targets[i]);
|
|
||||||
}
|
|
||||||
setHeight((targets.length + 1) * (def_height + 1));
|
|
||||||
updateLayout();
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericLivingEntity setTarget(boolean target) {
|
|
||||||
if (this.target != target) {
|
|
||||||
this.target = target;
|
|
||||||
_space.setVisible(target);
|
|
||||||
updateLayout();
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericLivingEntity setHealth(int health) {
|
|
||||||
if (this.health != health) {
|
|
||||||
this.health = health;
|
|
||||||
updateLayout();
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericLivingEntity setHealthColor(Color color) {
|
|
||||||
_health.setTopColor(color).setBottomColor(color);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericLivingEntity setArmor(int armor) {
|
|
||||||
if (this.armor != armor) {
|
|
||||||
this.armor = armor;
|
|
||||||
updateLayout();
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericLivingEntity setArmorColor(Color color) {
|
|
||||||
_armor.setTopColor(color).setBottomColor(color);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericLivingEntity setLabel(String label) {
|
|
||||||
if (!this.label.equals(label)) {
|
|
||||||
this.label = label;
|
|
||||||
_label.setText(label).setDirty(true);
|
|
||||||
updateLayout();
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericLivingEntity setFace(String name) {
|
|
||||||
if (!this.face.equals(name)) {
|
|
||||||
this.face = name;
|
|
||||||
_face.setVisible(!name.isEmpty());
|
|
||||||
_face.setName(name);
|
|
||||||
updateLayout();
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Container updateLayout() {
|
|
||||||
super.updateLayout();
|
|
||||||
_armor.setWidth((_armor.getContainer().getWidth() * armor) / 100).setDirty(true);
|
|
||||||
_health.setWidth((_health.getContainer().getWidth() * health) / 100).setDirty(true);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user