Changes from SnD branch

This commit is contained in:
libraryaddict 2015-10-30 19:25:02 +13:00
parent ed18588a6a
commit ea1e4b79f7
14 changed files with 478 additions and 394 deletions

View File

@ -52,6 +52,7 @@ public class Hologram
private HologramTarget _target = HologramTarget.BLACKLIST; private HologramTarget _target = HologramTarget.BLACKLIST;
private int _viewDistance = 70; private int _viewDistance = 70;
protected Vector relativeToEntity; protected Vector relativeToEntity;
private boolean _hideBoundingBox;
public Hologram(HologramManager hologramManager, Location location, String... text) public Hologram(HologramManager hologramManager, Location location, String... text)
{ {
@ -77,6 +78,17 @@ public class Hologram
return this; return this;
} }
/**
* Warning! Bounding box if hidden will hide holograms for 1.8 to 1.8.2
*
* @return
*/
public Hologram setHideBoundingBox()
{
_hideBoundingBox = true;
return this;
}
/** /**
* Is there a player entry in the hologram for Whitelist and Blacklist * Is there a player entry in the hologram for Whitelist and Blacklist
*/ */
@ -268,7 +280,7 @@ public class Hologram
packet.a = entityId; packet.a = entityId;
packet.b = 30; packet.b = 30;
packet.c = (int) (getLocation().getX() * 32); packet.c = (int) (getLocation().getX() * 32);
packet.d = (int) ((getLocation().getY() + -2.1 + ((double) textRow * 0.285)) * 32); packet.d = (int) ((getLocation().getY() + (_hideBoundingBox ? 0 : -2.1) + ((double) textRow * 0.285)) * 32);
packet.e = (int) (getLocation().getZ() * 32); packet.e = (int) (getLocation().getZ() * 32);
packet.l = watcher; packet.l = watcher;
@ -276,7 +288,11 @@ public class Hologram
watcher.a(0, (byte) 32); watcher.a(0, (byte) 32);
watcher.a(2, lineOfText); watcher.a(2, lineOfText);
watcher.a(3, (byte) 1); watcher.a(3, (byte) 1);
// watcher.a(10, (byte) 16); // TODO Uncomment after we can enforce 1.8.3
if (_hideBoundingBox)
{
watcher.a(10, (byte) 16); // TODO Uncomment after we can enforce 1.8.3
}
// Also correct hologram positioning // Also correct hologram positioning
return new Packet[] return new Packet[]

View File

@ -9,9 +9,11 @@ import java.util.Map;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkEffectMeta;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.inventory.meta.SkullMeta;
@ -20,349 +22,376 @@ import org.bukkit.potion.Potion;
public class ItemBuilder public class ItemBuilder
{ {
private static ArrayList<String> split(String string, int maxLength) private static ArrayList<String> split(String string, int maxLength)
{ {
String[] split = string.split(" "); String[] split = string.split(" ");
string = ""; string = "";
ArrayList<String> newString = new ArrayList<String>(); ArrayList<String> newString = new ArrayList<String>();
for (int i = 0; i < split.length; i++) for (int i = 0; i < split.length; i++)
{ {
string += (string.length() == 0 ? "" : " ") + split[i]; string += (string.length() == 0 ? "" : " ") + split[i];
if (ChatColor.stripColor(string).length() > maxLength) if (ChatColor.stripColor(string).length() > maxLength)
{ {
newString newString
.add((newString.size() > 0 ? ChatColor.getLastColors(newString.get(newString.size() - 1)) : "") + string); .add((newString.size() > 0 ? ChatColor.getLastColors(newString.get(newString.size() - 1)) : "") + string);
string = ""; string = "";
} }
} }
if (string.length() > 0) if (string.length() > 0)
newString.add((newString.size() > 0 ? ChatColor.getLastColors(newString.get(newString.size() - 1)) : "") + string); newString.add((newString.size() > 0 ? ChatColor.getLastColors(newString.get(newString.size() - 1)) : "") + string);
return newString; return newString;
} }
private int _amount; private int _amount;
private Color _color; private Color _color;
private short _data; private short _data;
private final HashMap<Enchantment, Integer> _enchants = new HashMap<Enchantment, Integer>(); private final HashMap<Enchantment, Integer> _enchants = new HashMap<Enchantment, Integer>();
private final List<String> _lore = new ArrayList<String>(); private final List<String> _lore = new ArrayList<String>();
private Material _mat; private Material _mat;
// private Potion potion; // private Potion potion;
private String _title = null; private String _title = null;
private boolean _unbreakable; private boolean _unbreakable;
private String _playerHeadName = null; private String _playerHeadName = null;
public ItemBuilder(ItemStack item) public ItemBuilder(ItemStack item)
{ {
this(item.getType(), item.getDurability()); this(item.getType(), item.getDurability());
this._amount = item.getAmount(); _amount = item.getAmount();
this._enchants.putAll(item.getEnchantments()); _enchants.putAll(item.getEnchantments());
if (item.getType() == Material.POTION) if (item.getType() == Material.POTION)
{ {
// setPotion(Potion.fromItemStack(item)); // setPotion(Potion.fromItemStack(item));
} }
if (item.hasItemMeta()) if (item.hasItemMeta())
{ {
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
if (meta.hasDisplayName())
{
this._title = meta.getDisplayName();
}
if (meta.hasLore())
{
this._lore.addAll(meta.getLore());
}
if (meta instanceof LeatherArmorMeta)
{
this.setColor(((LeatherArmorMeta) meta).getColor());
}
this._unbreakable = meta.spigot().isUnbreakable();
}
}
public ItemBuilder(Material mat) if (meta.hasDisplayName())
{ {
this(mat, 1); _title = meta.getDisplayName();
} }
public ItemBuilder(Material mat, int amount) if (meta.hasLore())
{ {
this(mat, amount, (short) 0); _lore.addAll(meta.getLore());
} }
public ItemBuilder(Material mat, int amount, short data) if (meta instanceof LeatherArmorMeta)
{ {
this._mat = mat; setColor(((LeatherArmorMeta) meta).getColor());
this._amount = amount; }
this._data = data;
}
public ItemBuilder(Material mat, short data) _unbreakable = meta.spigot().isUnbreakable();
{ }
this(mat, 1, data); }
}
public ItemBuilder addEnchantment(Enchantment enchant, int level) public ItemBuilder(Material mat)
{ {
if (_enchants.containsKey(enchant)) this(mat, 1);
{ }
_enchants.remove(enchant);
}
_enchants.put(enchant, level);
return this;
}
public ItemBuilder addLore(String... lores) public ItemBuilder(Material mat, int amount)
{ {
for (String lore : lores) this(mat, amount, (short) 0);
{ }
this._lore.add(ChatColor.GRAY + lore);
}
return this;
}
public ItemBuilder addLore(String lore, int maxLength) public ItemBuilder(Material mat, int amount, short data)
{ {
this._lore.addAll(split(lore, maxLength)); _mat = mat;
return this; _amount = amount;
} _data = data;
}
public ItemBuilder addLores(List<String> lores) public ItemBuilder(Material mat, short data)
{ {
this._lore.addAll(lores); this(mat, 1, data);
return this; }
}
public ItemBuilder addLores(List<String> lores, int maxLength) public ItemBuilder addEnchantment(Enchantment enchant, int level)
{ {
for (String lore : lores) if (_enchants.containsKey(enchant))
{ {
addLore(lore, maxLength); _enchants.remove(enchant);
} }
return this; _enchants.put(enchant, level);
} return this;
}
public ItemBuilder addLores(String[] description, int maxLength) public ItemBuilder addLore(String... lores)
{ {
return addLores(Arrays.asList(description), maxLength); for (String lore : lores)
} {
_lore.add(ChatColor.GRAY + lore);
}
return this;
}
public ItemStack build() public ItemBuilder addLore(String lore, int maxLength)
{ {
Material mat = this._mat; _lore.addAll(split(lore, maxLength));
if (mat == null) return this;
{ }
mat = Material.AIR;
Bukkit.getLogger().warning("Null material!"); public ItemBuilder addLores(List<String> lores)
} {
else if (mat == Material.AIR) _lore.addAll(lores);
{ return this;
Bukkit.getLogger().warning("Air material!"); }
}
ItemStack item = new ItemStack(mat, this._amount, this._data); public ItemBuilder addLores(List<String> lores, int maxLength)
ItemMeta meta = item.getItemMeta(); {
if (meta != null) for (String lore : lores)
{ {
if (this._title != null) addLore(lore, maxLength);
{ }
meta.setDisplayName(this._title); return this;
} }
if (!this._lore.isEmpty())
{ public ItemBuilder addLores(String[] description, int maxLength)
meta.setLore(this._lore); {
} return addLores(Arrays.asList(description), maxLength);
if (meta instanceof LeatherArmorMeta) }
{
((LeatherArmorMeta) meta).setColor(this._color); public ItemStack build()
} {
Material mat = _mat;
if (mat == null)
{
mat = Material.AIR;
Bukkit.getLogger().warning("Null material!");
}
else if (mat == Material.AIR)
{
Bukkit.getLogger().warning("Air material!");
}
ItemStack item = new ItemStack(mat, _amount, _data);
ItemMeta meta = item.getItemMeta();
if (meta != null)
{
if (_title != null)
{
meta.setDisplayName(_title);
}
if (!_lore.isEmpty())
{
meta.setLore(_lore);
}
if (meta instanceof LeatherArmorMeta && _color != null)
{
((LeatherArmorMeta) meta).setColor(_color);
}
else if (meta instanceof SkullMeta && _playerHeadName != null) else if (meta instanceof SkullMeta && _playerHeadName != null)
{ {
((SkullMeta) meta).setOwner(_playerHeadName); ((SkullMeta) meta).setOwner(_playerHeadName);
} }
meta.spigot().setUnbreakable(isUnbreakable()); else if (meta instanceof FireworkEffectMeta && _color != null)
item.setItemMeta(meta); {
} ((FireworkEffectMeta) meta).setEffect(FireworkEffect.builder().withColor(_color).build());
item.addUnsafeEnchantments(this._enchants); }
// if (this.potion != null) {
// this.potion.apply(item);
// }
return item;
}
@Override meta.spigot().setUnbreakable(isUnbreakable());
public ItemBuilder clone() item.setItemMeta(meta);
{ }
ItemBuilder newBuilder = new ItemBuilder(this._mat);
newBuilder.setTitle(this._title); item.addUnsafeEnchantments(_enchants);
for (String lore : this._lore) // if (potion != null) {
{ // potion.apply(item);
newBuilder.addLore(lore); // }
} return item;
for (Map.Entry<Enchantment, Integer> entry : this._enchants.entrySet()) }
{
newBuilder.addEnchantment(entry.getKey(), entry.getValue());
}
newBuilder.setColor(this._color);
// newBuilder.potion = this.potion;
return newBuilder; @Override
} public ItemBuilder clone()
{
ItemBuilder newBuilder = new ItemBuilder(_mat);
public HashMap<Enchantment, Integer> getAllEnchantments() newBuilder.setTitle(_title);
{
return this._enchants;
}
public Color getColor() for (String lore : _lore)
{ {
return this._color; newBuilder.addLore(lore);
} }
public short getData() for (Map.Entry<Enchantment, Integer> entry : _enchants.entrySet())
{ {
return this._data; newBuilder.addEnchantment(entry.getKey(), entry.getValue());
} }
public int getEnchantmentLevel(Enchantment enchant) newBuilder.setColor(_color);
{ // newBuilder.potion = potion;
return this._enchants.get(enchant);
}
public List<String> getLore() return newBuilder;
{ }
return this._lore;
}
public String getTitle() public HashMap<Enchantment, Integer> getAllEnchantments()
{ {
return this._title; return _enchants;
} }
public Material getType() public Color getColor()
{ {
return this._mat; return _color;
} }
public boolean hasEnchantment(Enchantment enchant) public short getData()
{ {
return this._enchants.containsKey(enchant); return _data;
} }
public boolean isItem(ItemStack item) public int getEnchantmentLevel(Enchantment enchant)
{ {
ItemMeta meta = item.getItemMeta(); return _enchants.get(enchant);
if (item.getType() != this.getType()) }
{
return false;
}
if (!meta.hasDisplayName() && this.getTitle() != null)
{
return false;
}
if (!meta.getDisplayName().equals(this.getTitle()))
{
return false;
}
if (!meta.hasLore() && !this.getLore().isEmpty())
{
return false;
}
if (meta.hasLore())
{
for (String lore : meta.getLore())
{
if (!this.getLore().contains(lore))
{
return false;
}
}
}
for (Enchantment enchant : item.getEnchantments().keySet())
{
if (!this.hasEnchantment(enchant))
{
return false;
}
}
return true;
}
public boolean isUnbreakable() public List<String> getLore()
{ {
return this._unbreakable; return _lore;
} }
public ItemBuilder setAmount(int amount) public String getTitle()
{ {
this._amount = amount; return _title;
return this; }
}
public ItemBuilder setColor(Color color) public Material getType()
{ {
if (!this._mat.name().contains("LEATHER_")) return _mat;
{ }
throw new IllegalArgumentException("Can only dye leather armor!");
}
this._color = color;
return this;
}
public ItemBuilder setData(short newData) public boolean hasEnchantment(Enchantment enchant)
{ {
this._data = newData; return _enchants.containsKey(enchant);
return this; }
}
public ItemBuilder setPotion(Potion potion) public boolean isItem(ItemStack item)
{ {
if (this._mat != Material.POTION) ItemMeta meta = item.getItemMeta();
{
this._mat = Material.POTION;
}
// this.potion = potion;
return this;
}
public ItemBuilder setRawTitle(String title) if (item.getType() != getType())
{ {
this._title = title; return false;
return this; }
}
public ItemBuilder setTitle(String title) if (!meta.hasDisplayName() && getTitle() != null)
{ {
this._title = (title == null ? null return false;
: (title.length() > 2 && ChatColor.getLastColors(title.substring(0, 2)).length() == 0 ? ChatColor.WHITE : "")) }
+ title;
return this;
}
public ItemBuilder setTitle(String title, int maxLength) if (!meta.getDisplayName().equals(getTitle()))
{ {
if (title != null && ChatColor.stripColor(title).length() > maxLength) return false;
{ }
ArrayList<String> lores = split(title, maxLength);
for (int i = 1; i < lores.size(); i++)
{
this._lore.add(lores.get(i));
}
title = lores.get(0);
}
setTitle(title);
return this;
}
public ItemBuilder setType(Material mat) if (!meta.hasLore() && !getLore().isEmpty())
{ {
this._mat = mat; return false;
return this; }
}
public ItemBuilder setUnbreakable(boolean setUnbreakable) if (meta.hasLore())
{ {
this._unbreakable = setUnbreakable;return this; for (String lore : meta.getLore())
} {
if (!getLore().contains(lore))
{
return false;
}
}
}
for (Enchantment enchant : item.getEnchantments().keySet())
{
if (!hasEnchantment(enchant))
{
return false;
}
}
return true;
}
public boolean isUnbreakable()
{
return _unbreakable;
}
public ItemBuilder setAmount(int amount)
{
_amount = amount;
return this;
}
public ItemBuilder setColor(Color color)
{
/* (!_mat.name().contains("LEATHER_"))
{
throw new IllegalArgumentException("Can only dye leather armor!");
}*/
_color = color;
return this;
}
public ItemBuilder setData(short newData)
{
_data = newData;
return this;
}
public ItemBuilder setPotion(Potion potion)
{
if (_mat != Material.POTION)
{
_mat = Material.POTION;
}
return this;
}
public ItemBuilder setRawTitle(String title)
{
_title = title;
return this;
}
public ItemBuilder setTitle(String title)
{
_title = (title == null ? null
: (title.length() > 2 && ChatColor.getLastColors(title.substring(0, 2)).length() == 0 ? ChatColor.WHITE : ""))
+ title;
return this;
}
public ItemBuilder setTitle(String title, int maxLength)
{
if (title != null && ChatColor.stripColor(title).length() > maxLength)
{
ArrayList<String> lores = split(title, maxLength);
for (int i = 1; i < lores.size(); i++)
{
_lore.add(lores.get(i));
}
title = lores.get(0);
}
setTitle(title);
return this;
}
public ItemBuilder setType(Material mat)
{
_mat = mat;
return this;
}
public ItemBuilder setUnbreakable(boolean setUnbreakable)
{
_unbreakable = setUnbreakable;
return this;
}
public ItemBuilder setPlayerHead(String playerName) public ItemBuilder setPlayerHead(String playerName)
{ {

View File

@ -148,6 +148,7 @@ public class ProjectileManager extends MiniPlugin
if (cur.isDead() || !cur.isValid()) if (cur.isDead() || !cur.isValid())
{ {
entry.getValue().getIThrown().Idle(entry.getValue());
iterator.remove(); iterator.remove();
continue; continue;
} }

View File

@ -288,6 +288,11 @@ public class ProjectileUser
return false; return false;
} }
public IThrown getIThrown()
{
return _callback;
}
public LivingEntity GetThrower() public LivingEntity GetThrower()
{ {
return _thrower; return _thrower;

View File

@ -256,4 +256,25 @@ public class Recharge extends MiniPlugin
_recharge.get(player.getName()).get(ability).debug(player); _recharge.get(player.getName()).get(ability).debug(player);
} }
public void displayExpBar(Player player, String ability)
{
if (!_recharge.containsKey(player.getName()))
{
player.setExp(1F);
return;
}
RechargeData recharge = _recharge.get(player.getName()).get(ability);
if (recharge == null)
{
player.setExp(1F);
return;
}
float elasped = (float) (System.currentTimeMillis() - recharge.Time) / recharge.Recharge;
player.setExp(Math.max(Math.min(1, elasped), 0));
}
} }

View File

@ -44,9 +44,9 @@ public class CustomDamageEvent extends Event implements Cancellable
private boolean _damageeBrute = false; private boolean _damageeBrute = false;
private boolean _damageToLevel = true; private boolean _damageToLevel = true;
public CustomDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile projectile, public CustomDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile projectile, Location knockbackOrigin,
DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor, DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor, String initialSource,
String initialSource, String initialReason, boolean cancelled) String initialReason, boolean cancelled)
{ {
_eventCause = cause; _eventCause = cause;
@ -73,6 +73,8 @@ public class CustomDamageEvent extends Event implements Cancellable
if (cancelled) if (cancelled)
SetCancelled("Pre-Cancelled"); SetCancelled("Pre-Cancelled");
_knockbackOrigin = knockbackOrigin;
} }
@Override @Override

View File

@ -173,11 +173,16 @@ public class DamageManager extends MiniPlugin
public void NewDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile proj, public void NewDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile proj,
DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor, DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor,
String source, String reason, boolean cancelled) String source, String reason, boolean cancelled)
{
NewDamageEvent(damagee, damager, proj, null, cause, damage, knockback, ignoreRate, ignoreArmor, source, reason, cancelled);
}
public void NewDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile proj, Location knockbackOrigin,
DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor,
String source, String reason, boolean cancelled)
{ {
_plugin.getServer().getPluginManager().callEvent( _plugin.getServer().getPluginManager().callEvent(new CustomDamageEvent(damagee, damager, proj, knockbackOrigin, cause,
new CustomDamageEvent(damagee, damager, proj, cause, damage, damage, knockback, ignoreRate, ignoreArmor, source, reason, cancelled));
knockback, ignoreRate, ignoreArmor,
source, reason, cancelled));
} }
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
@ -294,7 +299,7 @@ public class DamageManager extends MiniPlugin
if (e.equals(Enchantment.ARROW_KNOCKBACK) || e.equals(Enchantment.KNOCKBACK)) if (e.equals(Enchantment.ARROW_KNOCKBACK) || e.equals(Enchantment.KNOCKBACK))
event.AddKnockback("Ench Knockback", 1 + (0.5 * (double)enchants.get(e))); event.AddKnockback("Ench Knockback", 1 + (0.5 * (double)enchants.get(e)));
else if (e.equals(Enchantment.ARROW_DAMAGE)) else if (e.equals(Enchantment.ARROW_DAMAGE) || e.equals(Enchantment.DAMAGE_ALL))
event.AddMod("Enchant", "Ench Damage", 0.5 * (double)enchants.get(e), true); event.AddMod("Enchant", "Ench Damage", 0.5 * (double)enchants.get(e), true);
else if (e.equals(Enchantment.ARROW_FIRE) || e.equals(Enchantment.FIRE_ASPECT)) else if (e.equals(Enchantment.ARROW_FIRE) || e.equals(Enchantment.FIRE_ASPECT))
@ -370,7 +375,7 @@ public class DamageManager extends MiniPlugin
((CraftLivingEntity)event.GetDamageeEntity()).getHandle().o(((CraftLivingEntity)event.GetDamageeEntity()).getHandle().bv() + 1); ((CraftLivingEntity)event.GetDamageeEntity()).getHandle().o(((CraftLivingEntity)event.GetDamageeEntity()).getHandle().bv() + 1);
//Knockback //Knockback
if (event.IsKnockback() && event.GetDamagerEntity(true) != null) if (event.IsKnockback() && (event.getKnockbackOrigin() != null || event.GetDamagerEntity(true) != null))
{ {
//Base //Base
double knockback = event.GetDamage(); double knockback = event.GetDamage();
@ -382,9 +387,14 @@ public class DamageManager extends MiniPlugin
knockback = knockback * cur; knockback = knockback * cur;
//Origin //Origin
Location origin = event.GetDamagerEntity(true).getLocation(); Location origin = null;
if (event.GetDamagerEntity(true) != null)
origin = event.GetDamagerEntity(true).getLocation();
if (event.getKnockbackOrigin() != null) if (event.getKnockbackOrigin() != null)
origin = event.getKnockbackOrigin(); origin = event.getKnockbackOrigin();
else if (event.GetProjectile() != null)
origin = event.GetProjectile().getLocation();
//Vec //Vec
Vector trajectory = UtilAlg.getTrajectory2d(origin, event.GetDamageeEntity().getLocation()); Vector trajectory = UtilAlg.getTrajectory2d(origin, event.GetDamageeEntity().getLocation());

View File

@ -87,6 +87,13 @@ public class CustomExplosion extends Explosion
return this; return this;
} }
public CustomExplosion setIgnoreNonLiving(boolean ignoreNonLiving)
{
_ignoreNonLiving = ignoreNonLiving;
return this;
}
public CustomExplosion setMaxDamage(float maxDamage) public CustomExplosion setMaxDamage(float maxDamage)
{ {
_maxDamage = maxDamage; _maxDamage = maxDamage;
@ -240,6 +247,9 @@ public class CustomExplosion extends Explosion
if (entity.getBukkitEntity() == _owner && !_damageOwner) if (entity.getBukkitEntity() == _owner && !_damageOwner)
continue; continue;
if (!(entity.getBukkitEntity() instanceof LivingEntity) && _ignoreNonLiving)
continue;
double d7 = entity.f(this.posX, this.posY, this.posZ) / this._size; // XXX double d7 = entity.f(this.posX, this.posY, this.posZ) / this._size; // XXX
if (d7 <= 1.0D) if (d7 <= 1.0D)
@ -272,8 +282,8 @@ public class CustomExplosion extends Explosion
if (entity.getBukkitEntity() instanceof LivingEntity) if (entity.getBukkitEntity() instanceof LivingEntity)
{ {
_manager.NewDamageEvent((LivingEntity) entity.getBukkitEntity(), _owner, null, _manager.NewDamageEvent((LivingEntity) entity.getBukkitEntity(), _owner, null, new Location(_world.getWorld(), posX, posY, posZ),
DamageCause.ENTITY_EXPLOSION, damage, true, _ignoreRate, false, _damageReason, _damageReason); DamageCause.ENTITY_EXPLOSION, damage, true, _ignoreRate, false, _damageReason, _damageReason, false);
} }
else else
{ {

View File

@ -657,7 +657,10 @@ public abstract class Game implements Listener
HandlerList.unregisterAll(kit); HandlerList.unregisterAll(kit);
for (Perk perk : kit.GetPerks()) for (Perk perk : kit.GetPerks())
{
HandlerList.unregisterAll(perk); HandlerList.unregisterAll(perk);
perk.unregisteredEvents();
}
} }
} }

View File

@ -214,7 +214,7 @@ public class KitKnight extends SmashKit
Horse horse = (Horse)damagee.getVehicle(); Horse horse = (Horse)damagee.getVehicle();
//Damage Event //Damage Event
CustomDamageEvent newEvent = new CustomDamageEvent(horse, event.GetDamagerEntity(true), event.GetProjectile(), CustomDamageEvent newEvent = new CustomDamageEvent(horse, event.GetDamagerEntity(true), event.GetProjectile(), null,
event.GetCause(), event.GetDamageInitial(), true, false, false, event.GetCause(), event.GetDamageInitial(), true, false, false,
UtilEnt.getName(event.GetDamagerPlayer(true)), event.GetReason(), false); UtilEnt.getName(event.GetDamagerPlayer(true)), event.GetReason(), false);
@ -246,7 +246,7 @@ public class KitKnight extends SmashKit
Player player = (Player)horse.getPassenger(); Player player = (Player)horse.getPassenger();
//Damage Event //Damage Event
final CustomDamageEvent newEvent = new CustomDamageEvent(player, event.GetDamagerEntity(true), event.GetProjectile(), final CustomDamageEvent newEvent = new CustomDamageEvent(player, event.GetDamagerEntity(true), event.GetProjectile(), null,
event.GetCause(), event.GetDamageInitial(), true, false, false, event.GetCause(), event.GetDamageInitial(), true, false, false,
UtilEnt.getName(event.GetDamagerPlayer(true)), event.GetReason(), false); UtilEnt.getName(event.GetDamagerPlayer(true)), event.GetReason(), false);

View File

@ -153,7 +153,7 @@ public class SnowFight extends TeamGame
{ {
if(IsOnIce(player)) if(IsOnIce(player))
{ {
Bukkit.getPluginManager().callEvent(new CustomDamageEvent(player, null, null, DamageCause.CUSTOM, 2.0D, false, true, true, "Ice", "Ice", false)); Bukkit.getPluginManager().callEvent(new CustomDamageEvent(player, null, null, null, DamageCause.CUSTOM, 2.0D, false, true, true, "Ice", "Ice", false));
} }
} }
@ -510,7 +510,7 @@ public class SnowFight extends TeamGame
if(player instanceof Player) if(player instanceof Player)
{ {
Player damagee = (Player) player; Player damagee = (Player) player;
Bukkit.getPluginManager().callEvent(new CustomDamageEvent(damagee, null, null, DamageCause.CUSTOM, damage, false, true, true, "Ice Meteoroid", "Ice Meteoroid", false)); Bukkit.getPluginManager().callEvent(new CustomDamageEvent(damagee, null, null, null, DamageCause.CUSTOM, damage, false, true, true, "Ice Meteoroid", "Ice Meteoroid", false));
} }
} }

View File

@ -59,4 +59,9 @@ public abstract class Perk implements Listener
{ {
// When listener has been registered // When listener has been registered
} }
public void unregisteredEvents()
{
// When listener has been registered
}
} }

View File

@ -121,6 +121,15 @@ public class PerkZombieBile extends SmashPerk implements IThrown
} }
} }
@EventHandler
public void death(PlayerDeathEvent event)
{
if (_active.containsKey(event.getEntity()))
{
_active.remove(event.getEntity());
}
}
@Override @Override
public void Collide(LivingEntity target, Block block, ProjectileUser data) public void Collide(LivingEntity target, Block block, ProjectileUser data)
{ {

View File

@ -1,13 +1,8 @@
package nautilus.game.arcade.scoreboard; package nautilus.game.arcade.scoreboard;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import mineplex.core.common.Rank;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTime.TimeUnit;
import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.Game;
import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.GameTeam;
@ -16,6 +11,7 @@ import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team; import org.bukkit.scoreboard.Team;
@ -27,7 +23,7 @@ public class GameScoreboard
private Objective _sideObjective; private Objective _sideObjective;
private ArrayList<ScoreboardElement> _elements = new ArrayList<ScoreboardElement>(); private ArrayList<ScoreboardElement> _elements = new ArrayList<ScoreboardElement>();
private String[] _current = new String[15]; private char[] _chars = "1234567890abcdefghijklmnopqrstuvwxyz".toCharArray();
private String _title; private String _title;
private int _shineIndex; private int _shineIndex;
@ -246,84 +242,61 @@ public class GameScoreboard
if (_debug) System.out.println(); if (_debug) System.out.println();
if (_debug) System.out.println("/////////////////////////"); if (_debug) System.out.println("/////////////////////////");
//Generate Lines // Generate Lines
ArrayList<String> newLines = new ArrayList<String>(); ArrayList<String> newLines = new ArrayList<String>();
for (ScoreboardElement elem : _elements) for (ScoreboardElement elem : _elements)
{ {
for (String line : elem.GetLines()) newLines.addAll(elem.GetLines());
{ }
//Ensure no duplicate lines
while (true)
{
boolean matched = false;
for (String otherLine : newLines) int i = 0;
while (true)
{
if (i >= _chars.length)
break;
String str = ChatColor.COLOR_CHAR + "" + _chars[i];
Score score = GetObjectiveSide().getScore(str);
if (newLines.size() <= i)
{
if (score.isScoreSet())
{
ResetScore(str);
}
else
{
break;
}
}
else
{
Team team = GetScoreboard().getTeam(str);
if (team == null)
{
team = GetScoreboard().registerNewTeam(str);
team.addEntry(str);
}
String line = newLines.get(i);
team.setPrefix(line);
if (!score.isScoreSet())
{
if (i == 15)
{ {
if (line.equals(otherLine)) score.setScore(1);
{
line += ChatColor.RESET;
matched = true;
}
} }
if (!matched) score.setScore(15 - i);
break;
} }
newLines.add(line);
}
}
//Find Changes
HashSet<Integer> toAdd = new HashSet<Integer>();
HashSet<Integer> toDelete = new HashSet<Integer>();
for (int i=0 ; i<15 ; i++)
{
//Delete Old Excess Row
if (i >= newLines.size())
{
if (_current[i] != null)
{
if (_debug) System.out.println("Delete: " + i + " [" + _current[i] + "]");
toDelete.add(i);
}
continue;
} }
//Update or Add Row i++;
if (_current[i] == null || !_current[i].equals(newLines.get(i)))
{
if (_debug) System.out.println("Update: " + i + " [" + newLines.get(i) + "]");
toDelete.add(i);
toAdd.add(i);
}
}
//Delete Elements - Must happen before Add
for (int i : toDelete)
{
//Remove Old Line at Index
if (_current[i] != null)
{
if (_debug) System.out.println("Deleting: " + i + " [" + _current[i] + "]");
ResetScore(_current[i]);
_current[i] = null;
}
}
//Add Elements
for (int i : toAdd)
{
//Insert New Line
String newLine = newLines.get(i);
GetObjectiveSide().getScore(newLine).setScore(15-i);
_current[i] = newLine;
if (_debug) System.out.println("Setting: " + (15-i) + " [" + newLine + "]");
} }
} }