Changes from SnD branch
This commit is contained in:
parent
ed18588a6a
commit
ea1e4b79f7
|
@ -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[]
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 + "]");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue