From cfff65364972d686db4eec681859cccaf25c0d76 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Sun, 24 Apr 2016 08:39:15 +0200 Subject: [PATCH] MassiveCore - Working on DataItemStack. Not done yet. --- .../massivecraft/massivecore/ItemData.java | 221 --------- .../massivecraft/massivecore/MassiveCore.java | 10 + .../massivecore/MassiveCoreMConf.java | 6 + .../massivecore/PriorityLines.java | 49 +- .../command/type/TypeAbstract.java | 4 +- .../comparator/ComparatorAbstract.java | 162 ++++--- .../ComparatorAbstractTransformer.java | 2 +- .../comparator/ComparatorCaseInsensitive.java | 2 +- .../comparator/ComparatorCollection.java | 68 +++ .../comparator/ComparatorCombined.java | 55 +++ .../comparator/ComparatorComparable.java | 40 ++ .../comparator/ComparatorEntityId.java | 39 -- .../comparator/ComparatorHashCode.java | 4 +- .../comparator/ComparatorIdentified.java | 43 ++ .../comparator/ComparatorIdentifiedSmart.java | 16 + .../comparator/ComparatorIdentity.java | 6 +- .../comparator/ComparatorLenient.java | 44 -- .../massivecore/comparator/ComparatorMap.java | 46 ++ .../comparator/ComparatorNamed.java | 43 ++ .../comparator/ComparatorNaturalOrder.java | 2 +- .../comparator/ComparatorNull.java | 25 + .../comparator/ComparatorPrioritized.java | 44 ++ .../comparator/ComparatorPriority.java | 41 -- .../comparator/ComparatorReversed.java | 11 +- .../comparator/ComparatorSmart.java | 26 ++ .../comparator/ComparatorWithList.java | 43 ++ .../massivecore/item/Converter.java | 11 + .../massivecore/item/ConverterDefault.java | 26 ++ .../item/ConverterFromBannerPattern.java | 25 + .../item/ConverterFromBannerPatternType.java | 25 + .../item/ConverterFromBannerPatterns.java | 18 + .../massivecore/item/ConverterFromColor.java | 25 + .../massivecore/item/ConverterFromColors.java | 18 + .../item/ConverterFromDyeColor.java | 26 ++ .../item/ConverterFromEnchant.java | 26 ++ .../item/ConverterFromEnchants.java | 18 + .../item/ConverterFromFireworkEffect.java | 25 + .../item/ConverterFromFireworkEffectType.java | 25 + .../item/ConverterFromFireworkEffects.java | 18 + .../item/ConverterFromItemFlag.java | 25 + .../item/ConverterFromItemFlags.java | 18 + .../item/ConverterFromPotionEffect.java | 25 + .../item/ConverterFromPotionEffectType.java | 26 ++ .../item/ConverterFromPotionEffects.java | 18 + .../massivecore/item/ConverterList.java | 59 +++ .../item/ConverterListImmutable.java | 58 +++ .../massivecore/item/ConverterMap.java | 77 ++++ .../massivecore/item/ConverterSet.java | 59 +++ .../item/ConverterToBannerPattern.java | 25 + .../item/ConverterToBannerPatternType.java | 25 + .../item/ConverterToBannerPatterns.java | 18 + .../massivecore/item/ConverterToColor.java | 25 + .../massivecore/item/ConverterToColors.java | 18 + .../massivecore/item/ConverterToDyeColor.java | 26 ++ .../massivecore/item/ConverterToEnchant.java | 26 ++ .../massivecore/item/ConverterToEnchants.java | 18 + .../item/ConverterToFireworkEffect.java | 25 + .../item/ConverterToFireworkEffectType.java | 25 + .../item/ConverterToFireworkEffects.java | 18 + .../massivecore/item/ConverterToItemFlag.java | 25 + .../item/ConverterToItemFlags.java | 18 + .../item/ConverterToPotionEffect.java | 25 + .../item/ConverterToPotionEffectType.java | 26 ++ .../item/ConverterToPotionEffects.java | 18 + .../massivecore/item/DataBannerPattern.java | 107 +++++ .../massivecore/item/DataFireworkEffect.java | 143 ++++++ .../massivecore/item/DataItemStack.java | 428 ++++++++++++++++++ .../massivecore/item/DataPotionEffect.java | 142 ++++++ .../massivecore/item/WriterAbstract.java | 251 ++++++++++ .../item/WriterAbstractBannerPattern.java | 40 ++ .../item/WriterAbstractFireworkEffect.java | 39 ++ .../item/WriterAbstractItemMeta.java | 8 + .../item/WriterAbstractItemStack.java | 25 + .../item/WriterAbstractItemStackMeta.java | 31 ++ .../massivecore/item/WriterAbstractMeta.java | 39 ++ .../item/WriterAbstractPotionEffect.java | 38 ++ .../item/WriterAbstractReflect.java | 35 ++ .../massivecore/item/WriterBannerPattern.java | 29 ++ .../item/WriterBannerPatternColor.java | 43 ++ .../item/WriterBannerPatternId.java | 43 ++ .../item/WriterFireworkEffect.java | 32 ++ .../item/WriterFireworkEffectColors.java | 47 ++ .../item/WriterFireworkEffectFadeColors.java | 47 ++ .../item/WriterFireworkEffectFlicker.java | 40 ++ .../item/WriterFireworkEffectTrail.java | 40 ++ .../item/WriterFireworkEffectType.java | 43 ++ .../massivecore/item/WriterItemStack.java | 34 ++ .../item/WriterItemStackCount.java | 42 ++ .../item/WriterItemStackDamage.java | 42 ++ .../massivecore/item/WriterItemStackId.java | 44 ++ .../massivecore/item/WriterItemStackMeta.java | 77 ++++ .../item/WriterItemStackMetaAuthor.java | 46 ++ .../item/WriterItemStackMetaBannerBase.java | 48 ++ .../WriterItemStackMetaBannerPatterns.java | 51 +++ .../item/WriterItemStackMetaColor.java | 49 ++ .../item/WriterItemStackMetaEnchants.java | 54 +++ .../WriterItemStackMetaFireworkEffect.java | 49 ++ .../WriterItemStackMetaFireworkEffects.java | 51 +++ .../WriterItemStackMetaFireworkFlight.java | 46 ++ .../item/WriterItemStackMetaFlags.java | 50 ++ .../item/WriterItemStackMetaLore.java | 44 ++ .../item/WriterItemStackMetaName.java | 42 ++ .../item/WriterItemStackMetaPages.java | 48 ++ .../WriterItemStackMetaPotionEffects.java | 54 +++ .../item/WriterItemStackMetaRepaircost.java | 46 ++ .../item/WriterItemStackMetaScaling.java | 46 ++ .../item/WriterItemStackMetaSkull17.java | 47 ++ .../item/WriterItemStackMetaSkull18.java | 64 +++ .../WriterItemStackMetaStoredEnchants.java | 56 +++ .../item/WriterItemStackMetaTitle.java | 46 ++ .../item/WriterItemStackMetaUnbreakable.java | 42 ++ .../massivecore/item/WriterPotionEffect.java | 33 ++ .../item/WriterPotionEffectAmbient.java | 40 ++ .../item/WriterPotionEffectAmplifier.java | 40 ++ .../item/WriterPotionEffectColor.java | 43 ++ .../item/WriterPotionEffectDuraction.java | 40 ++ .../item/WriterPotionEffectId.java | 43 ++ .../item/WriterPotionEffectParticles.java | 40 ++ src/com/massivecraft/massivecore/ps/PS.java | 150 +++--- .../massivecraft/massivecore/util/MUtil.java | 48 +- 120 files changed, 4883 insertions(+), 566 deletions(-) delete mode 100644 src/com/massivecraft/massivecore/ItemData.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorCollection.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorCombined.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorComparable.java delete mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorEntityId.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorIdentified.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorIdentifiedSmart.java delete mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorLenient.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorMap.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorNamed.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorNull.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorPrioritized.java delete mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorPriority.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorSmart.java create mode 100644 src/com/massivecraft/massivecore/comparator/ComparatorWithList.java create mode 100644 src/com/massivecraft/massivecore/item/Converter.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterDefault.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromBannerPattern.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromBannerPatternType.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromBannerPatterns.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromColor.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromColors.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromDyeColor.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromEnchant.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromEnchants.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromFireworkEffect.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromFireworkEffectType.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromFireworkEffects.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromItemFlag.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromItemFlags.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromPotionEffect.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromPotionEffectType.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterFromPotionEffects.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterList.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterListImmutable.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterMap.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterSet.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToBannerPattern.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToBannerPatternType.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToBannerPatterns.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToColor.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToColors.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToDyeColor.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToEnchant.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToEnchants.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToFireworkEffect.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToFireworkEffectType.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToFireworkEffects.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToItemFlag.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToItemFlags.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToPotionEffect.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToPotionEffectType.java create mode 100644 src/com/massivecraft/massivecore/item/ConverterToPotionEffects.java create mode 100644 src/com/massivecraft/massivecore/item/DataBannerPattern.java create mode 100644 src/com/massivecraft/massivecore/item/DataFireworkEffect.java create mode 100644 src/com/massivecraft/massivecore/item/DataItemStack.java create mode 100644 src/com/massivecraft/massivecore/item/DataPotionEffect.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstract.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractBannerPattern.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractFireworkEffect.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractItemMeta.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractItemStack.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractMeta.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractPotionEffect.java create mode 100644 src/com/massivecraft/massivecore/item/WriterAbstractReflect.java create mode 100644 src/com/massivecraft/massivecore/item/WriterBannerPattern.java create mode 100644 src/com/massivecraft/massivecore/item/WriterBannerPatternColor.java create mode 100644 src/com/massivecraft/massivecore/item/WriterBannerPatternId.java create mode 100644 src/com/massivecraft/massivecore/item/WriterFireworkEffect.java create mode 100644 src/com/massivecraft/massivecore/item/WriterFireworkEffectColors.java create mode 100644 src/com/massivecraft/massivecore/item/WriterFireworkEffectFadeColors.java create mode 100644 src/com/massivecraft/massivecore/item/WriterFireworkEffectFlicker.java create mode 100644 src/com/massivecraft/massivecore/item/WriterFireworkEffectTrail.java create mode 100644 src/com/massivecraft/massivecore/item/WriterFireworkEffectType.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStack.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackCount.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackDamage.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackId.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMeta.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaAuthor.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerBase.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerPatterns.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaColor.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaEnchants.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffect.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffects.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkFlight.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaFlags.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaLore.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaName.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaPages.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaPotionEffects.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaRepaircost.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaScaling.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull17.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull18.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaStoredEnchants.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaTitle.java create mode 100644 src/com/massivecraft/massivecore/item/WriterItemStackMetaUnbreakable.java create mode 100644 src/com/massivecraft/massivecore/item/WriterPotionEffect.java create mode 100644 src/com/massivecraft/massivecore/item/WriterPotionEffectAmbient.java create mode 100644 src/com/massivecraft/massivecore/item/WriterPotionEffectAmplifier.java create mode 100644 src/com/massivecraft/massivecore/item/WriterPotionEffectColor.java create mode 100644 src/com/massivecraft/massivecore/item/WriterPotionEffectDuraction.java create mode 100644 src/com/massivecraft/massivecore/item/WriterPotionEffectId.java create mode 100644 src/com/massivecraft/massivecore/item/WriterPotionEffectParticles.java diff --git a/src/com/massivecraft/massivecore/ItemData.java b/src/com/massivecraft/massivecore/ItemData.java deleted file mode 100644 index 1c29b9e5..00000000 --- a/src/com/massivecraft/massivecore/ItemData.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.massivecraft.massivecore; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.Bukkit; -import org.bukkit.Color; -import org.bukkit.block.banner.Pattern; -import org.bukkit.potion.PotionEffect; - -import com.massivecraft.massivecore.collections.MassiveListDef; -import com.massivecraft.massivecore.collections.MassiveTreeMapDef; -import com.massivecraft.massivecore.collections.MassiveTreeSetDef; -import com.massivecraft.massivecore.comparator.ComparatorHashCode; -import com.massivecraft.massivecore.xlib.gson.annotations.SerializedName; - -/** - * This class makes use of primitives, collections and maps only. - * All Bukkit specific enumerations and classes are avoided. - * That means this class itself is compatible with all Bukkit server versions. - * - * We also make sure to only initialize variables with null as value. - * Null means "default" and this way we save database space as well as CPU power on class construction. - * - * This class acts as a safe intermediary for database storage. - * It is mainly used by the ItemStackAdapter and InventoryAdapter. - * It can also be used directly, for example in maps, since it provides a stable equals and hash code method (as opposed to Bukkit). - */ -public class ItemData -{ - // -------------------------------------------- // - // CONSTANTS - // -------------------------------------------- // - - // Immutable Defaults - public static final transient int DEFAULT_ID = 0; - public static final transient int DEFAULT_COUNT = 1; - public static final transient int DEFAULT_DAMAGE = 0; - public static final transient boolean DEFAULT_SCALING = false; - public static final transient boolean DEFAULT_UNBREAKABLE = false; - - // -------------------------------------------- // - // FIELDS > BASIC - // -------------------------------------------- // - - private Integer id = null; - public int getId() { return (this.id == null ? DEFAULT_ID : this.id); } - public ItemData setId(int id) { this.id = (id == DEFAULT_ID ? null : id); return this; } - - private Integer count = null; - public int getCount() { return (this.count == null ? DEFAULT_COUNT : this.count); } - public ItemData setCount(int count) { this.count = (count == DEFAULT_COUNT ? null : count); return this; } - - private Integer damage = null; - public int getDamage() { return (this.damage == null ? DEFAULT_DAMAGE : this.damage); } - public ItemData setDamage(int damage) { this.damage = (damage == DEFAULT_DAMAGE ? null: damage); return this; } - - // -------------------------------------------- // - // FIELDS > UNSPECIFIC - // -------------------------------------------- // - - private String name = null; - public String getName() { return this.name; } - public ItemData setName(String name) { this.name = name; return this; } - - private MassiveListDef lore = null; - public List getLore() { return this.lore; } - public ItemData setLore(Collection lore) { this.lore = (lore == null ? null : new MassiveListDef<>(lore)); return this;} - - // TODO: Can I create a string comparator and use that one instead? HashCode looks ugly. - private MassiveTreeMapDef enchants = null; - public Map getEnchants() { return this.enchants; } - public ItemData setEnchants(Map enchants) { this.enchants = (enchants == null ? null : new MassiveTreeMapDef(ComparatorHashCode.get(), enchants)); return this; } - - private Integer repaircost = null; - public Integer getRepaircost() { return this.repaircost; } - public ItemData setRepaircost(int repaircost) { this.repaircost = repaircost; return this; } - - // -------------------------------------------- // - // FIELDS > BOOK - // -------------------------------------------- // - - private String title = null; - public String getTitle() { return this.title; } - public ItemData setTitle(String title) { this.title = title; return this; } - - private String author = null; - public String getAuthor() { return this.author; } - public ItemData setAuthor(String author) { this.author = author; return this; } - - private MassiveListDef pages = new MassiveListDef<>(); - public List getPages() { return this.pages; } - public ItemData setPages(Collection bookPages) { this.pages = new MassiveListDef<>(bookPages); return this; } - - // -------------------------------------------- // - // FIELDS > LEATHER ARMOR - // -------------------------------------------- // - - // TODO: Color is not a primitive... convert into using a primitive! - // TODO: We must also figure out the int value of the DefaultLeatherColor! - private Color color = null; - public Color getColor() { return (this.color == null ? Bukkit.getItemFactory().getDefaultLeatherColor() : this.color); } - public ItemData setColor(Color color) { this.color = (Bukkit.getItemFactory().getDefaultLeatherColor().equals(color) ? null : color); return this; } - - // -------------------------------------------- // - // FIELDS > MAP - // -------------------------------------------- // - - private Boolean scaling = null; - public boolean isScaling() { return (this.scaling == null ? DEFAULT_SCALING : this.scaling); } - public ItemData setScaling(boolean scaling) { this.scaling = (scaling == DEFAULT_SCALING ? null : scaling); return this; } - - // -------------------------------------------- // - // FIELDS > POTION - // -------------------------------------------- // - - // TODO: Create and use PotionEffectData! - @SerializedName("potion-effects") - private List potionEffects = null; - public List getPotionEffects() { return this.potionEffects; } - public ItemData setPotionEffects(Collection potionEffects) { this.potionEffects = (potionEffects == null ? null : new MassiveListDef<>(potionEffects)); return this; } - - // -------------------------------------------- // - // FIELDS > SKULL - // -------------------------------------------- // - - private String skull = null; - public String getSkull() { return this.skull; } - public ItemData setSkull(String skull) { this.skull = skull; return this; } - - // -------------------------------------------- // - // FIELDS > FIREWORK EFFECT - // -------------------------------------------- // - - // TODO - - // -------------------------------------------- // - // FIELDS > FIREWORK - // -------------------------------------------- // - - // TODO - - // -------------------------------------------- // - // FIELDS > STORED ENCHANTS - // -------------------------------------------- // - - // TODO: Can I create a string comparator and use that one instead? HashCode looks ugly. - @SerializedName("stored-enchants") - private MassiveTreeMapDef storedEnchants = null; - public Map getStoredEnchants() { return this.storedEnchants; } - public ItemData setStoredEnchants(Map storedEnchants) { this.storedEnchants = (storedEnchants == null ? null : new MassiveTreeMapDef(ComparatorHashCode.get(), storedEnchants)); return this; } - - // -------------------------------------------- // - // FIELDS > UNBREAKABLE - // -------------------------------------------- // - // SINCE: 1.8 - - private Boolean unbreakable = null; - public boolean isUnbreakable() { return (this.unbreakable == null ? DEFAULT_UNBREAKABLE : this.unbreakable); } - public ItemData setUnbreakable(boolean unbreakable) { this.unbreakable = (unbreakable == DEFAULT_UNBREAKABLE ? null : unbreakable); return this; } - - // -------------------------------------------- // - // FIELDS > FLAGS - // -------------------------------------------- // - // SINCE: 1.8 - - // TODO: Can I create a string comparator and use that one instead? HashCode looks ugly. - private MassiveTreeSetDef flags = null; - public Set getFlags() { return this.flags; } - public ItemData setFlags(Collection flags) { this.flags = (flags == null ? null : new MassiveTreeSetDef(ComparatorHashCode.get(), flags)); return this; } - - // -------------------------------------------- // - // FIELDS > BANNER BASE - // -------------------------------------------- // - // SINCE: 1.8 - // The integer is the dye color byte representation. - - @SerializedName("banner-base") - private Integer bannerBase = null; - public Integer getBannerBase() { return this.bannerBase; } - public ItemData setBannerBase(Integer bannerBase) { this.bannerBase = bannerBase; return this; } - - // -------------------------------------------- // - // FIELDS > BANNER PATTERNS - // -------------------------------------------- // - // SINCE: 1.8 - // This should really be a list and not a set. - // The order matters and is explicitly assigned. - - // TODO: The Pattern class can not be used here. It breaks 1.8 compatibility. - // TODO: Convert to to use only raw primitiveish data! - // TODO: I actually decided to use a list of integers. That should be mimiced here. - @SerializedName("banner") - private MassiveListDef bannerPatterns = null; - public List getBannerPatterns() { return this.bannerPatterns; } - public ItemData setBannerPatterns(Collection bannerPatterns) { this.bannerPatterns = (bannerPatterns == null ? null : new MassiveListDef<>(bannerPatterns)); return this;} - - // -------------------------------------------- // - // FIELDS > POTION - // -------------------------------------------- // - // SINCE: 1.9 - - private String potion = null; - public String getPotion() { return this.potion; } - public ItemData setPotion(String potion) { this.potion = potion; return this; } - - // -------------------------------------------- // - // CONVERT - // -------------------------------------------- // - - // TODO: Add in covert methods... they will have to use mixins for transfering! - - // -------------------------------------------- // - // HASH CODE & EQUALS - // -------------------------------------------- // - - // TODO - -} diff --git a/src/com/massivecraft/massivecore/MassiveCore.java b/src/com/massivecraft/massivecore/MassiveCore.java index 5c2c69a0..72dfe07d 100644 --- a/src/com/massivecraft/massivecore/MassiveCore.java +++ b/src/com/massivecraft/massivecore/MassiveCore.java @@ -61,6 +61,10 @@ import com.massivecraft.massivecore.engine.EngineMassiveCoreTeleportMixinCause; import com.massivecraft.massivecore.engine.EngineMassiveCoreVariable; import com.massivecraft.massivecore.engine.EngineMassiveCoreWorldNameSet; import com.massivecraft.massivecore.integration.vault.IntegrationVault; +import com.massivecraft.massivecore.item.WriterBannerPattern; +import com.massivecraft.massivecore.item.WriterFireworkEffect; +import com.massivecraft.massivecore.item.WriterItemStack; +import com.massivecraft.massivecore.item.WriterPotionEffect; import com.massivecraft.massivecore.mixin.MixinActionbar; import com.massivecraft.massivecore.mixin.MixinActual; import com.massivecraft.massivecore.mixin.MixinCommand; @@ -209,6 +213,12 @@ public class MassiveCore extends MassivePlugin AspectColl.class, MassiveCoreMConfColl.class, MassiveCoreMSponsorInfoColl.class, + + // Writer, + WriterItemStack.class, + WriterPotionEffect.class, + WriterFireworkEffect.class, + WriterBannerPattern.class, // Engine EngineMassiveCoreChestGui.class, diff --git a/src/com/massivecraft/massivecore/MassiveCoreMConf.java b/src/com/massivecraft/massivecore/MassiveCoreMConf.java index 7f9b03e9..b64f01e6 100644 --- a/src/com/massivecraft/massivecore/MassiveCoreMConf.java +++ b/src/com/massivecraft/massivecore/MassiveCoreMConf.java @@ -131,6 +131,12 @@ public class MassiveCoreMConf extends Entity public WriteConcern getMongoDbWriteConcernSave() { return getMongoDbWriteConcern(this.catchingMongoDbErrorsOnSave); } public WriteConcern getMongoDbWriteConcernDelete() { return getMongoDbWriteConcern(this.catchingMongoDbErrorsOnDelete); } + // -------------------------------------------- // + // DEBUG + // -------------------------------------------- // + + public boolean debugWriters = false; + // -------------------------------------------- // // SPONSOR // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/PriorityLines.java b/src/com/massivecraft/massivecore/PriorityLines.java index 98311f5f..c3a3f584 100644 --- a/src/com/massivecraft/massivecore/PriorityLines.java +++ b/src/com/massivecraft/massivecore/PriorityLines.java @@ -4,8 +4,10 @@ import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Objects; -import com.massivecraft.massivecore.comparator.ComparatorHashCode; +import com.massivecraft.massivecore.comparator.ComparatorIdentity; +import com.massivecraft.massivecore.comparator.ComparatorPrioritized; import com.massivecraft.massivecore.util.MUtil; public class PriorityLines implements Prioritized, Comparable @@ -55,47 +57,46 @@ public class PriorityLines implements Prioritized, Comparable } // -------------------------------------------- // - // COMPARABLE + // COMPARABLE & EQUALS & HASHCODE // -------------------------------------------- // @Override public int compareTo(PriorityLines that) { - int ret; + // Create + int ret = 0; - ret = Integer.compare(this.priority, that.priority); + // Fill + ret = ComparatorPrioritized.get().compare(this, that); if (ret != 0) return ret; - if (MUtil.equals(this.lines, that.lines)) return 0; - ret = ComparatorHashCode.get().compare(this.lines, that.lines); + ret = ComparatorIdentity.get().compare(this, that); if (ret != 0) return ret; + // Return return ret; } - // -------------------------------------------- // - // HASH CODE & EQUALS - // -------------------------------------------- // + @Override + public boolean equals(Object object) + { + if ( ! (object instanceof PriorityLines)) return false; + PriorityLines that = (PriorityLines)object; + return MUtil.equals( + this.getPriority(), that.getPriority(), + this.getLines(), that.getLines() + ); + } @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((lines == null) ? 0 : lines.hashCode()); - result = prime * result + priority; - return result; + return Objects.hash( + this.getPriority(), + this.getLines() + ); } - @Override - public boolean equals(Object obj) - { - if (this == obj) return true; - if (!(obj instanceof PriorityLines)) return false; - PriorityLines other = (PriorityLines) obj; - if (priority != other.priority) return false; - if ( ! MUtil.equals(this.lines, other.lines)) return false; - return true; - } + } diff --git a/src/com/massivecraft/massivecore/command/type/TypeAbstract.java b/src/com/massivecraft/massivecore/command/type/TypeAbstract.java index 78a2a826..c30b0ac4 100644 --- a/src/com/massivecraft/massivecore/command/type/TypeAbstract.java +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstract.java @@ -22,7 +22,7 @@ import com.massivecraft.massivecore.command.editor.CommandEditAbstract; import com.massivecraft.massivecore.command.editor.CommandEditSimple; import com.massivecraft.massivecore.command.editor.EditSettings; import com.massivecraft.massivecore.command.editor.Property; -import com.massivecraft.massivecore.comparator.ComparatorHashCode; +import com.massivecraft.massivecore.comparator.ComparatorSmart; import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.store.SenderEntity; import com.massivecraft.massivecore.util.ContainerUtil; @@ -518,7 +518,7 @@ public abstract class TypeAbstract implements Type { if (this.elementComparator != null) return (Comparator) this.elementComparator; if (this.isContainerIndexed()) return null; - return (Comparator) ComparatorHashCode.get().getLenient(); + return (Comparator) ComparatorSmart.get(); } @SuppressWarnings("unchecked") @Override diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorAbstract.java b/src/com/massivecraft/massivecore/comparator/ComparatorAbstract.java index 248cb071..e41c4b24 100644 --- a/src/com/massivecraft/massivecore/comparator/ComparatorAbstract.java +++ b/src/com/massivecraft/massivecore/comparator/ComparatorAbstract.java @@ -2,92 +2,138 @@ package com.massivecraft.massivecore.comparator; import java.util.Comparator; -import com.massivecraft.massivecore.Identified; -import com.massivecraft.massivecore.Named; -import com.massivecraft.massivecore.Prioritized; -import com.massivecraft.massivecore.util.MUtil; - -public class ComparatorAbstract implements Comparator +public abstract class ComparatorAbstract implements Comparator { // -------------------------------------------- // - // REVERSED + // SMART // -------------------------------------------- // + // Smart comparators falls back to generalized Object comparison solutions we have implemented. + // They just try to compare better if the initial comparison does not find a difference. + // Note that they leave equals be. Objects that actually are equal will remain that way. - private ComparatorReversed reversed = null; - public ComparatorAbstract getReversed() - { - if (this.reversed == null) this.reversed = ComparatorReversed.get(this); - return this.reversed; - } + private boolean smart = false; + public boolean isSmart() { return this.smart; } + public ComparatorAbstract setSmart(boolean smart) { this.smart = smart; return this; } // -------------------------------------------- // // LENIENT // -------------------------------------------- // + // Lenient comparators will not ever accept 0 as a return value. + // The only common user case is when sorting map entries by value. - private ComparatorLenient lenient = null; - public ComparatorAbstract getLenient() - { - if (this.lenient == null) this.lenient = ComparatorLenient.get(this); - return this.lenient; - } + private boolean lenient = false; + public boolean isLenient() { return this.lenient; } + public ComparatorAbstract setLenient(boolean lenient) { this.lenient = lenient; return this; } // -------------------------------------------- // - // OVERRIDE + // REVERSED + // -------------------------------------------- // + // Reversed comparators multiply the return value with -1. + + private boolean reversed = false; + public boolean isReversed() { return this.reversed; } + public ComparatorAbstract setReversed(boolean reversed) { this.reversed = reversed; return this; } + + // -------------------------------------------- // + // COMPARE // -------------------------------------------- // @Override - public int compare(T type1, T type2) + public int compare(T object1, T object2) { - Integer ret; + // Create + int ret = compareSystem(object1, object2); - // Null - ret = MUtil.compareNulls(type1, type2); - if (ret != null) return ret; - - // Inner - ret = this.compareInner(type1, type2); - if (ret != null) return ret; - - // Prioritized - if (type1 instanceof Prioritized) + // Lenient + if (this.isLenient() && ret == 0) { - Prioritized prioritized1 = (Prioritized)type1; - Prioritized prioritized2 = (Prioritized)type2; - - ret = Integer.compare(prioritized1.getPriority(), prioritized2.getPriority()); - if (ret != null) return ret; + ret = ComparatorIdentity.get().compare(object1, object2); + if (ret == 0) ret = 1; } - // Named - if (type1 instanceof Named) + // Reversed + if (this.isReversed()) { - Named named1 = (Named)type1; - Named named2 = (Named)type2; - - ret = ComparatorNaturalOrder.get().compare(named1.getName(), named2.getName()); - if (ret != null) return ret; + ret *= -1; } - // Identified - if (type1 instanceof Identified) - { - Identified identified1 = (Identified)type1; - Identified identified2 = (Identified)type2; - ret = MUtil.compare(identified1.getId(), identified2.getId()); - if (ret != null) return ret; - } - - // Identity - return ComparatorIdentity.get().compare(type1, type2); + // Return + return ret; } // -------------------------------------------- // - // INNER + // COMPARE > SYSTEM // -------------------------------------------- // - public Integer compareInner(T type1, T type2) + private int compareSystem(T object1, T object2) { - return null; + // Create + int ret = 0; + + // Null + if (object1 == null && object2 == null) return 0; + if (object1 == null) return -1; + if (object2 == null) return +1; + + // Inner + ret = this.compareInner(object1, object2); + if (ret != 0) return ret; + + // Smart + if (this.isSmart()) + { + ret = ComparatorPrioritized.get().compare(object1, object2); + if (ret != 0) return ret; + + ret = ComparatorNamed.get().compare(object1, object2); + if (ret != 0) return ret; + + ret = ComparatorIdentified.get().compare(object1, object2); + if (ret != 0) return ret; + + ret = ComparatorComparable.get().compare(object1, object2); + if (ret != 0) return ret; + + ret = ComparatorCollection.get().compare(object1, object2); + if (ret != 0) return ret; + + ret = ComparatorMap.get().compare(object1, object2); + if (ret != 0) return ret; + } + + // Return + return ret; + } + + // -------------------------------------------- // + // COMPARE > INNER + // -------------------------------------------- // + + public abstract int compareInner(T type1, T type2); + + // -------------------------------------------- // + // UTILITY + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + public int compare(T... objects) + { + if (objects == null) throw new NullPointerException("objects"); + if (objects.length % 2 != 0) throw new IllegalArgumentException("objects length not even"); + + int index = 1; + while (index < objects.length) + { + T object1 = objects[index - 1]; + T object2 = objects[index]; + + int ret = this.compare(object1, object2); + if (ret != 0) return ret; + + index += 2; + } + + return 0; } } diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorAbstractTransformer.java b/src/com/massivecraft/massivecore/comparator/ComparatorAbstractTransformer.java index a3ec2b26..9fbed9c6 100644 --- a/src/com/massivecraft/massivecore/comparator/ComparatorAbstractTransformer.java +++ b/src/com/massivecraft/massivecore/comparator/ComparatorAbstractTransformer.java @@ -18,7 +18,7 @@ public abstract class ComparatorAbstractTransformer extends ComparatorAbst // -------------------------------------------- // @Override - public Integer compareInner(T type1, T type2) + public int compareInner(T type1, T type2) { X x1 = this.transform(type1); X x2 = this.transform(type2); diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorCaseInsensitive.java b/src/com/massivecraft/massivecore/comparator/ComparatorCaseInsensitive.java index 0d311053..d0ca4314 100644 --- a/src/com/massivecraft/massivecore/comparator/ComparatorCaseInsensitive.java +++ b/src/com/massivecraft/massivecore/comparator/ComparatorCaseInsensitive.java @@ -14,7 +14,7 @@ public class ComparatorCaseInsensitive extends ComparatorAbstract // -------------------------------------------- // @Override - public Integer compareInner(String string1, String string2) + public int compareInner(String string1, String string2) { return String.CASE_INSENSITIVE_ORDER.compare(string1, string2); } diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorCollection.java b/src/com/massivecraft/massivecore/comparator/ComparatorCollection.java new file mode 100644 index 00000000..e05535a2 --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorCollection.java @@ -0,0 +1,68 @@ +package com.massivecraft.massivecore.comparator; + +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import com.massivecraft.massivecore.collections.MassiveList; + +public class ComparatorCollection extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorCollection i = new ComparatorCollection(); + public static ComparatorCollection get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + @Override + public int compareInner(Object object1, Object object2) + { + // Create + int ret = 0; + + // Instance Of + Collection collection1 = null; + Collection collection2 = null; + if (object1 instanceof Collection) collection1 = (Collection)object1; + if (object2 instanceof Collection) collection2 = (Collection)object2; + ret = ComparatorNull.get().compare(collection1, collection2); + if (ret != 0) return ret; + if (collection1 == null && collection2 == null) return ret; + + // Size + int size1 = collection1.size(); + int size2 = collection2.size(); + ret = Integer.compare(size1, size2); + if (ret != 0) return ret; + + // Elements + List elements1 = new MassiveList<>(collection1); + Collections.sort(elements1, ComparatorSmart.get()); + + List elements2 = new MassiveList<>(collection2); + Collections.sort(elements2, ComparatorSmart.get()); + + Iterator iterator1 = elements1.iterator(); + Iterator iterator2 = elements1.iterator(); + + while (iterator1.hasNext()) + { + Object element1 = iterator1.next(); + Object element2 = iterator2.next(); + + ret = ComparatorSmart.get().compare(element1, element2); + if (ret != 0) return ret; + } + + // Return + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorCombined.java b/src/com/massivecraft/massivecore/comparator/ComparatorCombined.java new file mode 100644 index 00000000..3e8c041b --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorCombined.java @@ -0,0 +1,55 @@ +package com.massivecraft.massivecore.comparator; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +public class ComparatorCombined extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + @SafeVarargs + public static ComparatorCombined get(Comparator... comparators) { return new ComparatorCombined<>(comparators); } + public static ComparatorCombined get(List> comparators) { return new ComparatorCombined<>(comparators); } + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private List> comparators = null; + public List> getComparators() { return this.comparators; } + public ComparatorCombined setComparators(List> comparators) { this.comparators = comparators; return this; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + @SafeVarargs + public ComparatorCombined(Comparator... comparators) + { + this(Arrays.asList(comparators)); + } + + public ComparatorCombined(List> comparators) + { + this.comparators = comparators; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public int compareInner(T object1, T object2) + { + for (Comparator comparator : this.getComparators()) + { + int ret = comparator.compare(object1, object2); + if (ret != 0) return ret; + } + return 0; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorComparable.java b/src/com/massivecraft/massivecore/comparator/ComparatorComparable.java new file mode 100644 index 00000000..b0b984b4 --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorComparable.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.comparator; + +public class ComparatorComparable extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static transient ComparatorComparable i = new ComparatorComparable(); + public static ComparatorComparable get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + @Override + public int compareInner(Object object1, Object object2) + { + // Create + int ret = 0; + + // Instance Of + Comparable comparable1 = null; + Comparable comparable2 = null; + if (object1 instanceof Comparable) comparable1 = (Comparable)object1; + if (object2 instanceof Comparable) comparable2 = (Comparable)object2; + ret = ComparatorNull.get().compare(comparable1, comparable2); + if (ret != 0) return ret; + if (comparable1 == null && comparable2 == null) return ret; + + // Compare + ret = comparable1.compareTo(comparable2); + if (ret != 0) return ret; + + // Return + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorEntityId.java b/src/com/massivecraft/massivecore/comparator/ComparatorEntityId.java deleted file mode 100644 index 44907a41..00000000 --- a/src/com/massivecraft/massivecore/comparator/ComparatorEntityId.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.massivecraft.massivecore.comparator; - -import java.util.Comparator; - -import com.massivecraft.massivecore.store.Entity; - -public class ComparatorEntityId implements Comparator> -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static ComparatorEntityId i = new ComparatorEntityId(); - public static ComparatorEntityId get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public int compare(Entity e1, Entity e2) - { - if (e1 == null && e2 == null) return 0; - if (e1 == null) return -1; - if (e2 == null) return +1; - - if (e1.equals(e2)) return 0; - - String id1 = e1.getId(); - String id2 = e2.getId(); - - int ret = ComparatorNaturalOrder.get().compare(id1, id2); - if (ret != 0) return ret; - - // We should only return 0 if the items actually are equal. - return e2.hashCode() - e1.hashCode(); - } - -} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorHashCode.java b/src/com/massivecraft/massivecore/comparator/ComparatorHashCode.java index 7c7c2976..00c59508 100644 --- a/src/com/massivecraft/massivecore/comparator/ComparatorHashCode.java +++ b/src/com/massivecraft/massivecore/comparator/ComparatorHashCode.java @@ -8,7 +8,7 @@ public class ComparatorHashCode extends ComparatorAbstract // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static transient ComparatorHashCode i = new ComparatorHashCode(); + private static ComparatorHashCode i = new ComparatorHashCode(); public static ComparatorHashCode get() { return i; } // -------------------------------------------- // @@ -16,7 +16,7 @@ public class ComparatorHashCode extends ComparatorAbstract // -------------------------------------------- // @Override - public Integer compareInner(Object object1, Object object2) + public int compareInner(Object object1, Object object2) { return Integer.compare(Objects.hashCode(object1), Objects.hashCode(object2)); } diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorIdentified.java b/src/com/massivecraft/massivecore/comparator/ComparatorIdentified.java new file mode 100644 index 00000000..d5e4a2ba --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorIdentified.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.comparator; + +import com.massivecraft.massivecore.Identified; + +public class ComparatorIdentified extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorIdentified i = new ComparatorIdentified(); + public static ComparatorIdentified get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public int compareInner(Object object1, Object object2) + { + // Create + int ret = 0; + + // Instance Of + Identified identified1 = null; + Identified identified2 = null; + if (object1 instanceof Identified) identified1 = (Identified)object1; + if (object2 instanceof Identified) identified2 = (Identified)object2; + ret = ComparatorNull.get().compareInner(identified1, identified2); + if (ret != 0) return ret; + if (identified1 == null && identified2 == null) return ret; + + // Id + String id1 = identified1.getId(); + String id2 = identified2.getId(); + ret = ComparatorComparable.get().compare(id1, id2); + if (ret != 0) return ret; + + // Return + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorIdentifiedSmart.java b/src/com/massivecraft/massivecore/comparator/ComparatorIdentifiedSmart.java new file mode 100644 index 00000000..31bd398d --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorIdentifiedSmart.java @@ -0,0 +1,16 @@ +package com.massivecraft.massivecore.comparator; + +public class ComparatorIdentifiedSmart extends ComparatorIdentified +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorIdentifiedSmart i = new ComparatorIdentifiedSmart(); + public static ComparatorIdentifiedSmart get() { return i; } + public ComparatorIdentifiedSmart() + { + this.setSmart(true); + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorIdentity.java b/src/com/massivecraft/massivecore/comparator/ComparatorIdentity.java index 66891908..72462f21 100644 --- a/src/com/massivecraft/massivecore/comparator/ComparatorIdentity.java +++ b/src/com/massivecraft/massivecore/comparator/ComparatorIdentity.java @@ -6,15 +6,15 @@ public class ComparatorIdentity extends ComparatorAbstract // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static transient ComparatorIdentity i = new ComparatorIdentity(); + private static ComparatorIdentity i = new ComparatorIdentity(); public static ComparatorIdentity get() { return i; } - + // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // @Override - public Integer compareInner(Object object1, Object object2) + public int compareInner(Object object1, Object object2) { if (object1 == object2) return 0; return Integer.compare(System.identityHashCode(object1), System.identityHashCode(object2)); diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorLenient.java b/src/com/massivecraft/massivecore/comparator/ComparatorLenient.java deleted file mode 100644 index c1405498..00000000 --- a/src/com/massivecraft/massivecore/comparator/ComparatorLenient.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.massivecraft.massivecore.comparator; - -import java.util.Comparator; - -public class ComparatorLenient extends ComparatorAbstractWrapper -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - public static ComparatorLenient get(Comparator comparator) { return new ComparatorLenient(comparator); } - public ComparatorLenient(Comparator comparator) - { - super(comparator); - } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public int compare(T type1, T type2) - { - int ret; - - ret = this.getComparator().compare(type1, type2); - if (ret != 0) return ret; - - ret = ComparatorHashCode.get().compare(type1, type2); - if (ret != 0) return ret; - - ret = ComparatorIdentity.get().compare(type1, type2); - if (ret != 0) return ret; - - return 1; - } - - @Override - public ComparatorAbstract getLenient() - { - return this; - } - -} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorMap.java b/src/com/massivecraft/massivecore/comparator/ComparatorMap.java new file mode 100644 index 00000000..1f866150 --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorMap.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.comparator; + +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +public class ComparatorMap extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorMap i = new ComparatorMap(); + public static ComparatorMap get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + @Override + public int compareInner(Object object1, Object object2) + { + // Create + int ret = 0; + + // Instance Of + Map map1 = null; + Map map2 = null; + if (object1 instanceof Map) map1 = (Map)object1; + if (object2 instanceof Map) map2 = (Map)object2; + ret = ComparatorNull.get().compare(map1, map2); + if (ret != 0) return ret; + if (map1 == null && map2 == null) return ret; + + // Entries + Set> entries1 = map1.entrySet(); + Set> entries2 = map2.entrySet(); + ret = ComparatorCollection.get().compare(entries1, entries2); + if (ret != 0) return ret; + + // Return + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorNamed.java b/src/com/massivecraft/massivecore/comparator/ComparatorNamed.java new file mode 100644 index 00000000..6c4b96a8 --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorNamed.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.comparator; + +import com.massivecraft.massivecore.Named; + +public class ComparatorNamed extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorNamed i = new ComparatorNamed(); + public static ComparatorNamed get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public int compareInner(Object object1, Object object2) + { + // Create + int ret = 0; + + // Instance Of + Named named1 = null; + Named named2 = null; + if (object1 instanceof Named) named1 = (Named)object1; + if (object2 instanceof Named) named2 = (Named)object2; + ret = ComparatorNull.get().compare(named1, named2); + if (ret != 0) return ret; + if (named1 == null && named2 == null) return ret; + + // Name + String name1 = named1.getName(); + String name2 = named2.getName(); + ret = ComparatorNaturalOrder.get().compare(name1, name2); + if (ret != 0) return ret; + + // Return + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorNaturalOrder.java b/src/com/massivecraft/massivecore/comparator/ComparatorNaturalOrder.java index ab2dd971..8ec3d5df 100644 --- a/src/com/massivecraft/massivecore/comparator/ComparatorNaturalOrder.java +++ b/src/com/massivecraft/massivecore/comparator/ComparatorNaturalOrder.java @@ -43,7 +43,7 @@ public class ComparatorNaturalOrder extends ComparatorAbstract // -------------------------------------------- // @Override - public Integer compareInner(Object object1, Object object2) + public int compareInner(Object object1, Object object2) { // Martin Pool String a = object1.toString(); diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorNull.java b/src/com/massivecraft/massivecore/comparator/ComparatorNull.java new file mode 100644 index 00000000..3c5c0745 --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorNull.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.comparator; + +public class ComparatorNull extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorNull i = new ComparatorNull(); + public static ComparatorNull get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public int compareInner(Object object1, Object object2) + { + if (object1 == null && object2 == null) return 0; + if (object1 == null) return -1; + if (object2 == null) return +1; + return 0; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorPrioritized.java b/src/com/massivecraft/massivecore/comparator/ComparatorPrioritized.java new file mode 100644 index 00000000..207b20d7 --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorPrioritized.java @@ -0,0 +1,44 @@ +package com.massivecraft.massivecore.comparator; + +import com.massivecraft.massivecore.Prioritized; + +public class ComparatorPrioritized extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorPrioritized i = new ComparatorPrioritized(); + public static ComparatorPrioritized get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public int compareInner(Object object1, Object object2) + { + // Create + int ret = 0; + + // Instance Of + Prioritized prioritized1 = null; + Prioritized prioritized2 = null; + if (object1 instanceof Prioritized) prioritized1 = (Prioritized)object1; + if (object2 instanceof Prioritized) prioritized2 = (Prioritized)object2; + ret = ComparatorNull.get().compare(prioritized1, prioritized2); + if (ret != 0) return ret; + if (prioritized1 == null && prioritized2 == null) return ret; + + // Priority + int priority1 = prioritized1.getPriority(); + int priority2 = prioritized2.getPriority(); + + ret = Integer.compare(priority1, priority2); + if (ret != 0) return ret; + + // Return + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorPriority.java b/src/com/massivecraft/massivecore/comparator/ComparatorPriority.java deleted file mode 100644 index 7ac79f0e..00000000 --- a/src/com/massivecraft/massivecore/comparator/ComparatorPriority.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.massivecraft.massivecore.comparator; - -import com.massivecraft.massivecore.Prioritized; -import com.massivecraft.massivecore.store.Entity; - -public class ComparatorPriority extends ComparatorAbstract -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static ComparatorPriority i = new ComparatorPriority(); - public static ComparatorPriority get() { return i; } - - // -------------------------------------------- // - // OVERRIDE: COMPARATOR - // -------------------------------------------- // - - @Override - public Integer compareInner(Prioritized prioritized1, Prioritized prioritized2) - { - // Equals - if (prioritized1.equals(prioritized2)) return 0; - - // Priority - Integer ret = Integer.compare(prioritized1.getPriority(), prioritized2.getPriority()); - if (ret != 0) return ret; - - // Entity Id - if (prioritized1 instanceof Entity && prioritized2 instanceof Entity) - { - Entity entity1 = (Entity)prioritized1; - Entity entity2 = (Entity)prioritized2; - return ComparatorEntityId.get().compare(entity1, entity2); - } - - // We should only return 0 if the items actually are equal. - return ComparatorIdentity.get().compare(prioritized1, prioritized2); - } - -} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorReversed.java b/src/com/massivecraft/massivecore/comparator/ComparatorReversed.java index d5ba8fb7..79fbfb42 100644 --- a/src/com/massivecraft/massivecore/comparator/ComparatorReversed.java +++ b/src/com/massivecraft/massivecore/comparator/ComparatorReversed.java @@ -12,6 +12,7 @@ public class ComparatorReversed extends ComparatorAbstractWrapper public ComparatorReversed(Comparator comparator) { super(comparator); + this.setReversed(true); } // -------------------------------------------- // @@ -19,17 +20,9 @@ public class ComparatorReversed extends ComparatorAbstractWrapper // -------------------------------------------- // @Override - public int compare(T type1, T type2) + public int compareInner(T type1, T type2) { return - this.getComparator().compare(type1, type2); } - @Override - public ComparatorAbstract getReversed() - { - Comparator comparator = this.getComparator(); - if (comparator instanceof ComparatorAbstract) return (ComparatorAbstract) comparator; - return super.getReversed(); - } - } diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorSmart.java b/src/com/massivecraft/massivecore/comparator/ComparatorSmart.java new file mode 100644 index 00000000..9097ccdb --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorSmart.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.comparator; + +public class ComparatorSmart extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ComparatorSmart i = new ComparatorSmart(); + public static ComparatorSmart get() { return i; } + public ComparatorSmart() + { + this.setSmart(true); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public int compareInner(Object type1, Object type2) + { + return 0; + } + +} diff --git a/src/com/massivecraft/massivecore/comparator/ComparatorWithList.java b/src/com/massivecraft/massivecore/comparator/ComparatorWithList.java new file mode 100644 index 00000000..68330569 --- /dev/null +++ b/src/com/massivecraft/massivecore/comparator/ComparatorWithList.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.comparator; + +import java.util.List; + +public class ComparatorWithList extends ComparatorAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static ComparatorWithList get(List list) { return new ComparatorWithList<>(list); } + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private List list = null; + public List getList() { return this.list; } + public ComparatorWithList setList(List list) { this.list = list; return this; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public ComparatorWithList(List list) + { + this.list = list; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public int compareInner(T object1, T object2) + { + int index1 = this.getList().indexOf(object1); + int index2 = this.getList().indexOf(object2); + + return Integer.compare(index1, index2); + } + +} diff --git a/src/com/massivecraft/massivecore/item/Converter.java b/src/com/massivecraft/massivecore/item/Converter.java new file mode 100644 index 00000000..cf402e97 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/Converter.java @@ -0,0 +1,11 @@ +package com.massivecraft.massivecore.item; + +public abstract class Converter +{ + // -------------------------------------------- // + // ABSTRACT + // -------------------------------------------- // + + public abstract Y convert(X x); + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterDefault.java b/src/com/massivecraft/massivecore/item/ConverterDefault.java new file mode 100644 index 00000000..60b400e7 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterDefault.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.item; + +public class ConverterDefault extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterDefault i = new ConverterDefault(); + @SuppressWarnings("unchecked") + public static ConverterDefault get() { return (ConverterDefault) i; } + @SuppressWarnings("unchecked") + public static ConverterDefault get(Class cx, Class cy) { return (ConverterDefault) i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + @Override + public Y convert(X x) + { + return (Y)x; + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromBannerPattern.java b/src/com/massivecraft/massivecore/item/ConverterFromBannerPattern.java new file mode 100644 index 00000000..73fddf7f --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromBannerPattern.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.block.banner.Pattern; + +public class ConverterFromBannerPattern extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromBannerPattern i = new ConverterFromBannerPattern(); + public static ConverterFromBannerPattern get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public DataBannerPattern convert(Pattern x) + { + if (x == null) return null; + return new DataBannerPattern(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromBannerPatternType.java b/src/com/massivecraft/massivecore/item/ConverterFromBannerPatternType.java new file mode 100644 index 00000000..b9393519 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromBannerPatternType.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.block.banner.PatternType; + +public class ConverterFromBannerPatternType extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromBannerPatternType i = new ConverterFromBannerPatternType(); + public static ConverterFromBannerPatternType get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String convert(PatternType x) + { + if (x == null) return null; + return x.getIdentifier(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromBannerPatterns.java b/src/com/massivecraft/massivecore/item/ConverterFromBannerPatterns.java new file mode 100644 index 00000000..e2de4a79 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromBannerPatterns.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.block.banner.Pattern; + +public class ConverterFromBannerPatterns extends ConverterList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromBannerPatterns i = new ConverterFromBannerPatterns(); + public static ConverterFromBannerPatterns get() { return i; } + public ConverterFromBannerPatterns() + { + super(ConverterFromBannerPattern.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromColor.java b/src/com/massivecraft/massivecore/item/ConverterFromColor.java new file mode 100644 index 00000000..f200513f --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromColor.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Color; + +public class ConverterFromColor extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromColor i = new ConverterFromColor(); + public static ConverterFromColor get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Integer convert(Color x) + { + if (x == null) return null; + return x.asRGB(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromColors.java b/src/com/massivecraft/massivecore/item/ConverterFromColors.java new file mode 100644 index 00000000..f2e9ef37 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromColors.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Color; + +public class ConverterFromColors extends ConverterList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromColors i = new ConverterFromColors(); + public static ConverterFromColors get() { return i; } + public ConverterFromColors() + { + super(ConverterFromColor.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromDyeColor.java b/src/com/massivecraft/massivecore/item/ConverterFromDyeColor.java new file mode 100644 index 00000000..c9226115 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromDyeColor.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.DyeColor; + +public class ConverterFromDyeColor extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromDyeColor i = new ConverterFromDyeColor(); + public static ConverterFromDyeColor get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("deprecation") + @Override + public Integer convert(DyeColor x) + { + if (x == null) return null; + return Integer.valueOf(x.getDyeData()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromEnchant.java b/src/com/massivecraft/massivecore/item/ConverterFromEnchant.java new file mode 100644 index 00000000..ff0ae0a9 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromEnchant.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.enchantments.Enchantment; + +public class ConverterFromEnchant extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromEnchant i = new ConverterFromEnchant(); + public static ConverterFromEnchant get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("deprecation") + @Override + public Integer convert(Enchantment x) + { + if (x == null) return null; + return x.getId(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromEnchants.java b/src/com/massivecraft/massivecore/item/ConverterFromEnchants.java new file mode 100644 index 00000000..d25bdc04 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromEnchants.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.enchantments.Enchantment; + +public class ConverterFromEnchants extends ConverterMap +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromEnchants i = new ConverterFromEnchants(); + public static ConverterFromEnchants get() { return i; } + public ConverterFromEnchants() + { + super(ConverterFromEnchant.get(), ConverterDefault.get(Integer.class, Integer.class)); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffect.java b/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffect.java new file mode 100644 index 00000000..d0da4713 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffect.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; + +public class ConverterFromFireworkEffect extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromFireworkEffect i = new ConverterFromFireworkEffect(); + public static ConverterFromFireworkEffect get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public DataFireworkEffect convert(FireworkEffect x) + { + if (x == null) return null; + return new DataFireworkEffect(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffectType.java b/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffectType.java new file mode 100644 index 00000000..b270d0f9 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffectType.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect.Type; + +public class ConverterFromFireworkEffectType extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromFireworkEffectType i = new ConverterFromFireworkEffectType(); + public static ConverterFromFireworkEffectType get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String convert(Type x) + { + if (x == null) return null; + return x.name(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffects.java b/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffects.java new file mode 100644 index 00000000..7c9c7c84 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromFireworkEffects.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; + +public class ConverterFromFireworkEffects extends ConverterList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromFireworkEffects i = new ConverterFromFireworkEffects(); + public static ConverterFromFireworkEffects get() { return i; } + public ConverterFromFireworkEffects() + { + super(ConverterFromFireworkEffect.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromItemFlag.java b/src/com/massivecraft/massivecore/item/ConverterFromItemFlag.java new file mode 100644 index 00000000..da06bade --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromItemFlag.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemFlag; + +public class ConverterFromItemFlag extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromItemFlag i = new ConverterFromItemFlag(); + public static ConverterFromItemFlag get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String convert(ItemFlag x) + { + if (x == null) return null; + return x.name(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromItemFlags.java b/src/com/massivecraft/massivecore/item/ConverterFromItemFlags.java new file mode 100644 index 00000000..2ebd2661 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromItemFlags.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemFlag; + +public class ConverterFromItemFlags extends ConverterSet +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromItemFlags i = new ConverterFromItemFlags(); + public static ConverterFromItemFlags get() { return i; } + public ConverterFromItemFlags() + { + super(ConverterFromItemFlag.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromPotionEffect.java b/src/com/massivecraft/massivecore/item/ConverterFromPotionEffect.java new file mode 100644 index 00000000..d5c7063b --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromPotionEffect.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class ConverterFromPotionEffect extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromPotionEffect i = new ConverterFromPotionEffect(); + public static ConverterFromPotionEffect get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public DataPotionEffect convert(PotionEffect x) + { + if (x == null) return null; + return new DataPotionEffect(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromPotionEffectType.java b/src/com/massivecraft/massivecore/item/ConverterFromPotionEffectType.java new file mode 100644 index 00000000..1b009e53 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromPotionEffectType.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffectType; + +public class ConverterFromPotionEffectType extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromPotionEffectType i = new ConverterFromPotionEffectType(); + public static ConverterFromPotionEffectType get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("deprecation") + @Override + public Integer convert(PotionEffectType x) + { + if (x == null) return null; + return x.getId(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterFromPotionEffects.java b/src/com/massivecraft/massivecore/item/ConverterFromPotionEffects.java new file mode 100644 index 00000000..1afd0fb1 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterFromPotionEffects.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class ConverterFromPotionEffects extends ConverterList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterFromPotionEffects i = new ConverterFromPotionEffects(); + public static ConverterFromPotionEffects get() { return i; } + public ConverterFromPotionEffects() + { + super(ConverterFromPotionEffect.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterList.java b/src/com/massivecraft/massivecore/item/ConverterList.java new file mode 100644 index 00000000..7b63fa82 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterList.java @@ -0,0 +1,59 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import com.massivecraft.massivecore.collections.MassiveList; + +public class ConverterList extends Converter, List> +{ + // -------------------------------------------- // + // FIELD + // -------------------------------------------- // + + private final Converter converterElement; + public Converter getConverterElement() { return this.converterElement; } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + public ConverterList(Converter converterElement) + { + this.converterElement = converterElement; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List convert(Iterable exs) + { + // Null + if (exs == null) return null; + + // Create + List eys = new MassiveList<>(); + + // Fill + for (EX ex : exs) + { + EY ey = null; + try + { + ey = this.getConverterElement().convert(ex); + } + catch (Throwable t) + { + t.printStackTrace(); + continue; + } + + eys.add(ey); + } + + // Return + return eys; + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterListImmutable.java b/src/com/massivecraft/massivecore/item/ConverterListImmutable.java new file mode 100644 index 00000000..ded20eeb --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterListImmutable.java @@ -0,0 +1,58 @@ +package com.massivecraft.massivecore.item; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; + +public class ConverterListImmutable extends Converter, ImmutableList> +{ + // -------------------------------------------- // + // FIELD + // -------------------------------------------- // + + private final Converter converterElement; + public Converter getConverterElement() { return this.converterElement; } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + public ConverterListImmutable(Converter converterElement) + { + this.converterElement = converterElement; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public ImmutableList convert(Iterable exs) + { + // Null + if (exs == null) return null; + + // Create + Builder eys = ImmutableList.builder(); + + // Fill + for (EX ex : exs) + { + EY ey = null; + try + { + ey = this.getConverterElement().convert(ex); + } + catch (Throwable t) + { + t.printStackTrace(); + continue; + } + + eys.add(ey); + } + + // Return + return eys.build(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterMap.java b/src/com/massivecraft/massivecore/item/ConverterMap.java new file mode 100644 index 00000000..c74e6f10 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterMap.java @@ -0,0 +1,77 @@ +package com.massivecraft.massivecore.item; + +import java.util.Map; +import java.util.Map.Entry; + +import com.massivecraft.massivecore.collections.MassiveMap; + +public class ConverterMap extends Converter, Map> +{ + // -------------------------------------------- // + // FIELD + // -------------------------------------------- // + + private final Converter converterKey; + public Converter getConverterKey() { return this.converterKey; } + + private final Converter converterValue; + public Converter getConverterValue() { return this.converterValue; } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + public ConverterMap(Converter converterKey, Converter converterValue) + { + this.converterKey = converterKey; + this.converterValue = converterValue; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Map convert(Map mapx) + { + // Null + if (mapx == null) return null; + + // Create + Map mapy = new MassiveMap<>(); + + // Fill + for (Entry entry : mapx.entrySet()) + { + KY ky = null; + KX kx = entry.getKey(); + try + { + ky = this.getConverterKey().convert(kx); + } + catch (Throwable t) + { + t.printStackTrace(); + continue; + } + + VY vy = null; + VX vx = entry.getValue(); + try + { + vy = this.getConverterValue().convert(vx); + } + catch (Throwable t) + { + t.printStackTrace(); + continue; + } + + mapy.put(ky, vy); + } + + // Return + return mapy; + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterSet.java b/src/com/massivecraft/massivecore/item/ConverterSet.java new file mode 100644 index 00000000..1033663b --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterSet.java @@ -0,0 +1,59 @@ +package com.massivecraft.massivecore.item; + +import java.util.Set; + +import com.massivecraft.massivecore.collections.MassiveSet; + +public class ConverterSet extends Converter, Set> +{ + // -------------------------------------------- // + // FIELD + // -------------------------------------------- // + + private final Converter converterElement; + public Converter getConverterElement() { return this.converterElement; } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + public ConverterSet(Converter converterElement) + { + this.converterElement = converterElement; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Set convert(Iterable exs) + { + // Null + if (exs == null) return null; + + // Create + Set eys = new MassiveSet<>(); + + // Fill + for (EX ex : exs) + { + EY ey = null; + try + { + ey = this.getConverterElement().convert(ex); + } + catch (Throwable t) + { + t.printStackTrace(); + continue; + } + + eys.add(ey); + } + + // Return + return eys; + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToBannerPattern.java b/src/com/massivecraft/massivecore/item/ConverterToBannerPattern.java new file mode 100644 index 00000000..573a8438 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToBannerPattern.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.block.banner.Pattern; + +public class ConverterToBannerPattern extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToBannerPattern i = new ConverterToBannerPattern(); + public static ConverterToBannerPattern get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Pattern convert(DataBannerPattern x) + { + if (x == null) return null; + return x.toBukkit(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToBannerPatternType.java b/src/com/massivecraft/massivecore/item/ConverterToBannerPatternType.java new file mode 100644 index 00000000..2784b94e --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToBannerPatternType.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.block.banner.PatternType; + +public class ConverterToBannerPatternType extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToBannerPatternType i = new ConverterToBannerPatternType(); + public static ConverterToBannerPatternType get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public PatternType convert(String x) + { + if (x == null) return null; + return PatternType.getByIdentifier(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToBannerPatterns.java b/src/com/massivecraft/massivecore/item/ConverterToBannerPatterns.java new file mode 100644 index 00000000..e77c1183 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToBannerPatterns.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.block.banner.Pattern; + +public class ConverterToBannerPatterns extends ConverterList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToBannerPatterns i = new ConverterToBannerPatterns(); + public static ConverterToBannerPatterns get() { return i; } + public ConverterToBannerPatterns() + { + super(ConverterToBannerPattern.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToColor.java b/src/com/massivecraft/massivecore/item/ConverterToColor.java new file mode 100644 index 00000000..6bf836a7 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToColor.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Color; + +public class ConverterToColor extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToColor i = new ConverterToColor(); + public static ConverterToColor get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Color convert(Integer x) + { + if (x == null) return null; + return Color.fromRGB(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToColors.java b/src/com/massivecraft/massivecore/item/ConverterToColors.java new file mode 100644 index 00000000..d5de6c54 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToColors.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Color; + +public class ConverterToColors extends ConverterListImmutable +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToColors i = new ConverterToColors(); + public static ConverterToColors get() { return i; } + public ConverterToColors() + { + super(ConverterToColor.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToDyeColor.java b/src/com/massivecraft/massivecore/item/ConverterToDyeColor.java new file mode 100644 index 00000000..3b1b53e5 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToDyeColor.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.DyeColor; + +public class ConverterToDyeColor extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToDyeColor i = new ConverterToDyeColor(); + public static ConverterToDyeColor get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("deprecation") + @Override + public DyeColor convert(Integer x) + { + if (x == null) return null; + return DyeColor.getByDyeData(x.byteValue()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToEnchant.java b/src/com/massivecraft/massivecore/item/ConverterToEnchant.java new file mode 100644 index 00000000..15251779 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToEnchant.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.enchantments.Enchantment; + +public class ConverterToEnchant extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToEnchant i = new ConverterToEnchant(); + public static ConverterToEnchant get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("deprecation") + @Override + public Enchantment convert(Integer x) + { + if (x == null) return null; + return Enchantment.getById(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToEnchants.java b/src/com/massivecraft/massivecore/item/ConverterToEnchants.java new file mode 100644 index 00000000..bda2c327 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToEnchants.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.enchantments.Enchantment; + +public class ConverterToEnchants extends ConverterMap +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToEnchants i = new ConverterToEnchants(); + public static ConverterToEnchants get() { return i; } + public ConverterToEnchants() + { + super(ConverterToEnchant.get(), ConverterDefault.get(Integer.class, Integer.class)); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToFireworkEffect.java b/src/com/massivecraft/massivecore/item/ConverterToFireworkEffect.java new file mode 100644 index 00000000..8c65325a --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToFireworkEffect.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; + +public class ConverterToFireworkEffect extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToFireworkEffect i = new ConverterToFireworkEffect(); + public static ConverterToFireworkEffect get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public FireworkEffect convert(DataFireworkEffect x) + { + if (x == null) return null; + return x.toBukkit(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToFireworkEffectType.java b/src/com/massivecraft/massivecore/item/ConverterToFireworkEffectType.java new file mode 100644 index 00000000..2538768b --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToFireworkEffectType.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect.Type; + +public class ConverterToFireworkEffectType extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToFireworkEffectType i = new ConverterToFireworkEffectType(); + public static ConverterToFireworkEffectType get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Type convert(String x) + { + if (x == null) return null; + return Type.valueOf(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToFireworkEffects.java b/src/com/massivecraft/massivecore/item/ConverterToFireworkEffects.java new file mode 100644 index 00000000..fb1480c0 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToFireworkEffects.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; + +public class ConverterToFireworkEffects extends ConverterList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToFireworkEffects i = new ConverterToFireworkEffects(); + public static ConverterToFireworkEffects get() { return i; } + public ConverterToFireworkEffects() + { + super(ConverterToFireworkEffect.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToItemFlag.java b/src/com/massivecraft/massivecore/item/ConverterToItemFlag.java new file mode 100644 index 00000000..7f523ec1 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToItemFlag.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemFlag; + +public class ConverterToItemFlag extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToItemFlag i = new ConverterToItemFlag(); + public static ConverterToItemFlag get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public ItemFlag convert(String x) + { + if (x == null) return null; + return ItemFlag.valueOf(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToItemFlags.java b/src/com/massivecraft/massivecore/item/ConverterToItemFlags.java new file mode 100644 index 00000000..237e45e7 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToItemFlags.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemFlag; + +public class ConverterToItemFlags extends ConverterSet +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToItemFlags i = new ConverterToItemFlags(); + public static ConverterToItemFlags get() { return i; } + public ConverterToItemFlags() + { + super(ConverterToItemFlag.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToPotionEffect.java b/src/com/massivecraft/massivecore/item/ConverterToPotionEffect.java new file mode 100644 index 00000000..dbca6a9c --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToPotionEffect.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class ConverterToPotionEffect extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToPotionEffect i = new ConverterToPotionEffect(); + public static ConverterToPotionEffect get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public PotionEffect convert(DataPotionEffect x) + { + if (x == null) return null; + return x.toBukkit(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToPotionEffectType.java b/src/com/massivecraft/massivecore/item/ConverterToPotionEffectType.java new file mode 100644 index 00000000..8d80d87f --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToPotionEffectType.java @@ -0,0 +1,26 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffectType; + +public class ConverterToPotionEffectType extends Converter +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToPotionEffectType i = new ConverterToPotionEffectType(); + public static ConverterToPotionEffectType get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("deprecation") + @Override + public PotionEffectType convert(Integer x) + { + if (x == null) return null; + return PotionEffectType.getById(x); + } + +} diff --git a/src/com/massivecraft/massivecore/item/ConverterToPotionEffects.java b/src/com/massivecraft/massivecore/item/ConverterToPotionEffects.java new file mode 100644 index 00000000..6ef30250 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/ConverterToPotionEffects.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class ConverterToPotionEffects extends ConverterList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final ConverterToPotionEffects i = new ConverterToPotionEffects(); + public static ConverterToPotionEffects get() { return i; } + public ConverterToPotionEffects() + { + super(ConverterToPotionEffect.get()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/DataBannerPattern.java b/src/com/massivecraft/massivecore/item/DataBannerPattern.java new file mode 100644 index 00000000..990119f0 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/DataBannerPattern.java @@ -0,0 +1,107 @@ +package com.massivecraft.massivecore.item; + +import static com.massivecraft.massivecore.item.DataItemStack.get; +import static com.massivecraft.massivecore.item.DataItemStack.set; + +import java.util.Objects; + +import org.bukkit.block.banner.Pattern; +import com.massivecraft.massivecore.comparator.ComparatorSmart; +import com.massivecraft.massivecore.util.MUtil; + +public class DataBannerPattern implements Comparable +{ + // -------------------------------------------- // + // DEFAULTS + // -------------------------------------------- // + + public static final transient String DEFAULT_ID = null; + public static final transient Integer DEFAULT_COLOR = null; + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private String id = null; + public String getId() { return get(this.id, DEFAULT_ID); } + public DataBannerPattern setId(String id) { this.id = set(id, DEFAULT_ID); return this; } + + private Integer color = null; + public Integer getColor() { return get(this.color, DEFAULT_COLOR); } + public DataBannerPattern setColor(Integer color) { this.color = set(color, DEFAULT_ID); return this; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public DataBannerPattern() + { + + } + + public DataBannerPattern(Pattern pattern) + { + this.write(pattern, false); + } + + // -------------------------------------------- // + // WRITE + // -------------------------------------------- // + + public void write(Pattern pattern, boolean a2b) + { + WriterBannerPattern.get().write(this, pattern, a2b); + } + + // -------------------------------------------- // + // TO BUKKIT + // -------------------------------------------- // + + public Pattern toBukkit() + { + // Create + Pattern ret = WriterBannerPattern.get().createB(); + + // Fill + this.write(ret, true); + + // Return + return ret; + } + + // -------------------------------------------- // + // COMPARE & EQUALS & HASHCODE + // -------------------------------------------- // + + @Override + public int compareTo(DataBannerPattern that) + { + return ComparatorSmart.get().compare( + this.getId(), that.getId(), + this.getColor(), that.getColor() + ); + } + + // TODO: Use compare instead to avoid bugs? + @Override + public boolean equals(Object object) + { + if ( ! (object instanceof DataBannerPattern)) return false; + DataBannerPattern that = (DataBannerPattern)object; + + return MUtil.equals( + this.getId(), that.getId(), + this.getColor(), that.getColor() + ); + } + + @Override + public int hashCode() + { + return Objects.hash( + this.getId(), + this.getColor() + ); + } + +} diff --git a/src/com/massivecraft/massivecore/item/DataFireworkEffect.java b/src/com/massivecraft/massivecore/item/DataFireworkEffect.java new file mode 100644 index 00000000..6be6dcae --- /dev/null +++ b/src/com/massivecraft/massivecore/item/DataFireworkEffect.java @@ -0,0 +1,143 @@ +package com.massivecraft.massivecore.item; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import org.bukkit.FireworkEffect; + +import static com.massivecraft.massivecore.item.DataItemStack.get; +import static com.massivecraft.massivecore.item.DataItemStack.set; + +import com.massivecraft.massivecore.collections.MassiveListDef; +import com.massivecraft.massivecore.comparator.ComparatorSmart; +import com.massivecraft.massivecore.util.MUtil; +import com.massivecraft.massivecore.xlib.gson.annotations.SerializedName; + + +public class DataFireworkEffect implements Comparable +{ + // -------------------------------------------- // + // DEFAULTS + // -------------------------------------------- // + + public static final transient Boolean DEFAULT_FLICKER = false; + public static final transient Boolean DEFAULT_TRAIL = false; + public static final transient List DEFAULT_COLORS = Collections.emptyList(); + public static final transient List DEFAULT_FADE_COLORS = Collections.emptyList(); + public static final transient String DEFAULT_TYPE = "BALL_LARGE"; + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + // According to Bukkit the colors are indeed lists with explicit order. + // I have not researched if that is true. For now I am assuming it is. + + private Boolean flicker = null; + public boolean hasFlicker() { return get(this.flicker, DEFAULT_FLICKER); } + public DataFireworkEffect setFlicker(boolean flicker) { this.flicker = set(flicker, DEFAULT_FLICKER); return this; } + + private Boolean trail = null; + public boolean hasTrail() { return get(this.trail, DEFAULT_TRAIL); } + public DataFireworkEffect setTrail(boolean trail) { this.trail = set(trail, DEFAULT_TRAIL); return this; } + + private MassiveListDef colors = null; + public List getColors() { return get(this.colors, DEFAULT_COLORS); } + public DataFireworkEffect setColors(List colors) { this.colors = set(colors, DEFAULT_COLORS); return this; } + + @SerializedName("fade-colors") + private MassiveListDef fadeColors = null; + public List getFadeColors() { return get(this.fadeColors, DEFAULT_FADE_COLORS); } + public DataFireworkEffect setFadeColors(List fadeColors) { this.fadeColors = set(fadeColors, DEFAULT_FADE_COLORS); return this; } + + private String type = null; + public String getType() { return get(this.type, DEFAULT_TYPE); } + public DataFireworkEffect setType(String type) { this.type = set(type, DEFAULT_TYPE); return this; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public DataFireworkEffect() + { + + } + + public DataFireworkEffect(FireworkEffect fireworkEffect) + { + this.write(fireworkEffect, false); + } + + // -------------------------------------------- // + // WRITE + // -------------------------------------------- // + + public void write(FireworkEffect fireworkEffect, boolean a2b) + { + WriterFireworkEffect.get().write(this, fireworkEffect, a2b); + } + + // -------------------------------------------- // + // TO BUKKIT + // -------------------------------------------- // + + public FireworkEffect toBukkit() + { + // Create + FireworkEffect ret = WriterFireworkEffect.get().createB(); + + // Fill + this.write(ret, true); + + // Return + return ret; + } + + // -------------------------------------------- // + // COMPARE & EQUALS & HASHCODE + // -------------------------------------------- // + + @Override + public int compareTo(DataFireworkEffect that) + { + return ComparatorSmart.get().compare( + this.hasFlicker(), that.hasFlicker(), + this.hasTrail(), that.hasTrail(), + this.getColors(), that.getColors(), + this.getColors(), that.getColors(), + this.getFadeColors(), that.getFadeColors(), + this.getType(), that.getType() + ); + } + + // TODO: Use compare instead to avoid bugs? + @Override + public boolean equals(Object object) + { + if ( ! (object instanceof DataFireworkEffect)) return false; + DataFireworkEffect that = (DataFireworkEffect)object; + + return MUtil.equals( + this.hasFlicker(), that.hasFlicker(), + this.hasTrail(), that.hasTrail(), + this.getColors(), that.getColors(), + this.getColors(), that.getColors(), + this.getFadeColors(), that.getFadeColors(), + this.getType(), that.getType() + ); + } + + @Override + public int hashCode() + { + return Objects.hash( + this.hasFlicker(), + this.hasTrail(), + this.getColors(), + this.getColors(), + this.getFadeColors(), + this.getType() + ); + } + +} diff --git a/src/com/massivecraft/massivecore/item/DataItemStack.java b/src/com/massivecraft/massivecore/item/DataItemStack.java new file mode 100644 index 00000000..ef158b03 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/DataItemStack.java @@ -0,0 +1,428 @@ +package com.massivecraft.massivecore.item; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.inventory.ItemStack; + +import com.massivecraft.massivecore.collections.MassiveListDef; +import com.massivecraft.massivecore.collections.MassiveTreeMapDef; +import com.massivecraft.massivecore.collections.MassiveTreeSetDef; +import com.massivecraft.massivecore.comparator.ComparatorSmart; +import com.massivecraft.massivecore.util.MUtil; +import com.massivecraft.massivecore.xlib.gson.annotations.SerializedName; + +/** + * This class makes use of primitives, collections and maps only. + * All Bukkit specific enumerations and classes are avoided. + * That means this class itself is compatible with all Bukkit server versions. + * + * We also make sure to only initialize variables with null as value. + * Null means "default" and this way we save database space as well as CPU power on class construction. + * + * This class acts as a safe intermediary for database storage. + * It is mainly used by the ItemStackAdapter and InventoryAdapter. + * It can also be used directly, for example in maps, since it provides a stable equals and hash code method (as opposed to Bukkit). + */ +public class DataItemStack implements Comparable +{ + // -------------------------------------------- // + // DEFAULTS + // -------------------------------------------- // + // The default values are used in the logic of both getters and setters. + // For that reason they are immutable. + // + // We avoid null in all locations except where Bukkit makes use of null. + // Since Bukkit doesn't NPE evade much we save ourselves a lot of trouble that way. + // Especially note how all collections default to empty immutables instead of null. + + public static final transient Integer DEFAULT_ID = 0; + public static final transient Integer DEFAULT_COUNT = 1; + public static final transient Integer DEFAULT_DAMAGE = 0; + public static final transient String DEFAULT_NAME = null; + public static final transient List DEFAULT_LORE = Collections.emptyList(); + public static final transient Map DEFAULT_ENCHANTS = Collections.emptyMap(); + public static final transient Integer DEFAULT_REPAIRCOST = 0; + public static final transient String DEFAULT_TITLE = null; + public static final transient String DEFAULT_AUTHOR = null; + public static final transient List DEFAULT_PAGES = Collections.emptyList(); + public static final transient Integer DEFAULT_COLOR = Bukkit.getItemFactory().getDefaultLeatherColor().asRGB(); + public static final transient Boolean DEFAULT_SCALING = false; + public static final transient List DEFAULT_POTION_EFFECTS = Collections.emptyList(); + public static final transient String DEFAULT_SKULL = null; + public static final transient DataFireworkEffect DEFAULT_FIREWORK_EFFECT = null; + public static final transient List DEFAULT_FIREWORK_EFFECTS = Collections.emptyList(); + public static final transient Integer DEFAULT_FIREWORK_FLIGHT = 0; + public static final transient Map DEFAULT_STORED_ENCHANTS = Collections.emptyMap(); + public static final transient Boolean DEFAULT_UNBREAKABLE = false; + public static final transient Set DEFAULT_FLAGS = Collections.emptySet(); + public static final transient Integer DEFAULT_BANNER_BASE = null; + public static final transient List DEFAULT_BANNER_PATTERNS = Collections.emptyList(); + public static final transient String DEFAULT_POTION = "water"; + + // -------------------------------------------- // + // FIELDS > BASIC + // -------------------------------------------- // + + private Integer id = null; + public int getId() { return get(this.id, DEFAULT_ID); } + public DataItemStack setId(int id) { this.id = set(id, DEFAULT_ID); return this; } + + private Integer count = null; + public int getCount() { return get(this.count, DEFAULT_COUNT); } + public DataItemStack setCount(int count) { this.count = set(count, DEFAULT_COUNT); return this; } + + private Integer damage = null; + public int getDamage() { return get(this.damage, DEFAULT_DAMAGE); } + public DataItemStack setDamage(int damage) { this.damage = set(damage, DEFAULT_DAMAGE); return this; } + + // -------------------------------------------- // + // FIELDS > UNSPECIFIC + // -------------------------------------------- // + + private String name = null; + public String getName() { return get(this.name, DEFAULT_NAME); } + public DataItemStack setName(String name) { this.name = set(name, DEFAULT_NAME); return this; } + + private MassiveListDef lore = null; + public List getLore() { return get(this.lore, DEFAULT_LORE); } + public DataItemStack setLore(List lore) { this.lore = set(lore, DEFAULT_LORE); return this; } + + // The Bukkit ItemMeta#getEnchants() is not sorted by the enchant id. + // There may be some sort of custom sorting order, I'm not sure. + // We are however enforcing sorting by the enchant id ourselves to be sure. + private MassiveTreeMapDef enchants = null; + public Map getEnchants() { return get(this.enchants, DEFAULT_ENCHANTS); } + public DataItemStack setEnchants(Map enchants) { this.enchants = set(enchants, DEFAULT_ENCHANTS); return this; } + + private Integer repaircost = null; + public int getRepaircost() { return get(this.repaircost, DEFAULT_REPAIRCOST); } + public DataItemStack setRepaircost(int repaircost) { this.repaircost = set(repaircost, DEFAULT_REPAIRCOST); return this; } + + // -------------------------------------------- // + // FIELDS > BOOK + // -------------------------------------------- // + + private String title = null; + public String getTitle() { return get(this.title, DEFAULT_TITLE); } + public DataItemStack setTitle(String title) { this.title = set(title, DEFAULT_TITLE); return this; } + + private String author = null; + public String getAuthor() { return get(this.author, DEFAULT_AUTHOR); } + public DataItemStack setAuthor(String author) { this.author = set(author, DEFAULT_AUTHOR); return this; } + + private MassiveListDef pages = null; + public List getPages() { return get(this.pages, DEFAULT_PAGES); } + public DataItemStack setPages(Collection pages) { this.pages = set(pages, DEFAULT_PAGES); return this; } + + // -------------------------------------------- // + // FIELDS > LEATHER ARMOR + // -------------------------------------------- // + + private Integer color = null; + public Integer getColor() { return get(this.color, DEFAULT_COLOR); } + public DataItemStack setColor(int color) { this.color = set(color, DEFAULT_COLOR); return this; } + + // -------------------------------------------- // + // FIELDS > MAP + // -------------------------------------------- // + + private Boolean scaling = null; + public boolean isScaling() { return get(this.scaling, DEFAULT_SCALING); } + public DataItemStack setScaling(boolean scaling) { this.scaling = set(scaling, DEFAULT_SCALING); return this; } + + // -------------------------------------------- // + // FIELDS > POTION EFFECTS + // -------------------------------------------- // + + // TODO: Sorting? + @SerializedName("potion-effects") + private MassiveListDef potionEffects = null; + public List getPotionEffects() { return get(this.potionEffects, DEFAULT_POTION_EFFECTS); } + public DataItemStack setPotionEffects(List potionEffects) { this.potionEffects = set(potionEffects, DEFAULT_POTION_EFFECTS); return this; } + + // -------------------------------------------- // + // FIELDS > SKULL + // -------------------------------------------- // + + private String skull = null; + public String getSkull() { return get(this.skull, DEFAULT_SKULL); } + public DataItemStack setSkull(String skull) { this.skull = set(skull, DEFAULT_SKULL); return this; } + + // -------------------------------------------- // + // FIELDS > FIREWORK EFFECT + // -------------------------------------------- // + + @SerializedName("firework-effect") + private DataFireworkEffect fireworkEffect = null; + public DataFireworkEffect getFireworkEffect() { return get(this.fireworkEffect, DEFAULT_FIREWORK_EFFECT); } + public DataItemStack setFireworkEffect(DataFireworkEffect fireworkEffect) { this.fireworkEffect = set(fireworkEffect, DEFAULT_FIREWORK_EFFECT); return this; } + + // -------------------------------------------- // + // FIELDS > FIREWORK + // -------------------------------------------- // + + // TODO: Sorting? + @SerializedName("firework-effects") + private MassiveListDef fireworkEffects = null; + public List getFireworkEffects() { return get(this.fireworkEffects, DEFAULT_FIREWORK_EFFECTS); } + public DataItemStack setFireworkEffects(List fireworkEffects) { this.fireworkEffects = set(fireworkEffects, DEFAULT_FIREWORK_EFFECTS); return this; } + + // NOTE: Did not have a default specified. + @SerializedName("firework-flight") + private Integer fireworkFlight = null; + public int getFireworkFlight() { return get(this.fireworkFlight, DEFAULT_FIREWORK_FLIGHT); } + public DataItemStack setFireworkFlight(int fireworkFlight) { this.fireworkFlight = set(fireworkFlight, DEFAULT_FIREWORK_FLIGHT); return this; } + + // -------------------------------------------- // + // FIELDS > STORED ENCHANTS + // -------------------------------------------- // + + @SerializedName("stored-enchants") + private MassiveTreeMapDef storedEnchants = null; + public Map getStoredEnchants() { return get(this.storedEnchants, DEFAULT_STORED_ENCHANTS); } + public DataItemStack setStoredEnchants(Map storedEnchants) { this.storedEnchants = set(storedEnchants, DEFAULT_STORED_ENCHANTS); return this; } + + // -------------------------------------------- // + // FIELDS > UNBREAKABLE + // -------------------------------------------- // + // SINCE: 1.8 + + private Boolean unbreakable = null; + public boolean isUnbreakable() { return get(this.unbreakable, DEFAULT_UNBREAKABLE); } + public DataItemStack setUnbreakable(boolean unbreakable) { this.unbreakable = set(unbreakable, DEFAULT_UNBREAKABLE); return this; } + + // -------------------------------------------- // + // FIELDS > FLAGS + // -------------------------------------------- // + // SINCE: 1.8 + + private MassiveTreeSetDef flags = null; + public Set getFlags() { return get(this.flags, DEFAULT_FLAGS); } + public DataItemStack setFlags(Set flags) { this.flags = set(flags, DEFAULT_FLAGS); return this; } + + // -------------------------------------------- // + // FIELDS > BANNER BASE + // -------------------------------------------- // + // SINCE: 1.8 + // The integer is the dye color byte representation. + // Is actually nullable in Bukkit. + + @SerializedName("banner-base") + private Integer bannerBase = null; + public Integer getBannerBase() { return get(this.bannerBase, DEFAULT_BANNER_BASE); } + public DataItemStack setBannerBase(Integer bannerBase) { this.bannerBase = set(bannerBase, DEFAULT_BANNER_BASE); return this; } + + // -------------------------------------------- // + // FIELDS > BANNER PATTERNS + // -------------------------------------------- // + // SINCE: 1.8 + // This should really be a list and not a set. + // The order matters and is explicitly assigned. + // String, Number, String, Number ... + + // TODO: Make sure the special adapter for upgrading the format is implemented! + @SerializedName("banner") + private MassiveListDef bannerPatterns = null; + public List getBannerPatterns() { return get(this.bannerPatterns, DEFAULT_BANNER_PATTERNS); } + public DataItemStack setBannerPatterns(List bannerPatterns) { this.bannerPatterns = set(bannerPatterns, DEFAULT_BANNER_PATTERNS); return this;} + + // -------------------------------------------- // + // FIELDS > POTION + // -------------------------------------------- // + // SINCE: 1.9 + + private String potion = null; + public String getPotion() { return get(this.potion, DEFAULT_POTION); } + public DataItemStack setPotion(String potion) { this.potion = set(potion, DEFAULT_POTION); return this; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public DataItemStack() + { + + } + + public DataItemStack(ItemStack itemStack) + { + this.write(itemStack, false); + } + + // -------------------------------------------- // + // WRITE + // -------------------------------------------- // + + public void write(ItemStack itemStack, boolean a2b) + { + WriterItemStack.get().write(this, itemStack, a2b); + } + + // -------------------------------------------- // + // TO BUKKIT + // -------------------------------------------- // + + public ItemStack toBukkit() + { + // Create + ItemStack ret = WriterItemStack.get().createB(); + + // Fill + this.write(ret, true); + + // Return + return ret; + } + + // -------------------------------------------- // + // COMPARE & EQUALS & HASHCODE + // -------------------------------------------- // + + @Override + public int compareTo(DataItemStack that) + { + return ComparatorSmart.get().compare( + this.getId(), that.getId(), + this.getCount(), that.getCount(), + this.getDamage(), that.getDamage(), + this.getName(), that.getName(), + this.getLore(), that.getLore(), + this.getEnchants(), that.getEnchants(), + this.getRepaircost(), that.getRepaircost(), + this.getTitle(), that.getTitle(), + this.getAuthor(), that.getAuthor(), + this.getPages(), that.getPages(), + this.getColor(), that.getColor(), + this.isScaling(), that.isScaling(), + this.getPotionEffects(), that.getPotionEffects(), + this.getSkull(), that.getSkull(), + this.getFireworkEffect(), that.getFireworkEffect(), + this.getFireworkEffects(), that.getFireworkEffects(), + this.getFireworkFlight(), that.getFireworkFlight(), + this.getStoredEnchants(), that.getStoredEnchants(), + this.isUnbreakable(), that.isUnbreakable(), + this.getFlags(), that.getFlags(), + this.getBannerBase(), that.getBannerBase(), + this.getBannerPatterns(), that.getBannerPatterns(), + this.getPotion(), that.getPotion() + ); + } + + @Override + public boolean equals(Object object) + { + if ( ! (object instanceof DataItemStack)) return false; + DataItemStack that = (DataItemStack)object; + + // TODO: Use compare instead to avoid bugs? + return MUtil.equals( + this.getId(), that.getId(), + this.getCount(), that.getCount(), + this.getDamage(), that.getDamage(), + this.getName(), that.getName(), + this.getLore(), that.getLore(), + this.getEnchants(), that.getEnchants(), + this.getRepaircost(), that.getRepaircost(), + this.getTitle(), that.getTitle(), + this.getAuthor(), that.getAuthor(), + this.getPages(), that.getPages(), + this.getColor(), that.getColor(), + this.isScaling(), that.isScaling(), + this.getPotionEffects(), that.getPotionEffects(), + this.getSkull(), that.getSkull(), + this.getFireworkEffect(), that.getFireworkEffect(), + this.getFireworkEffects(), that.getFireworkEffects(), + this.getFireworkFlight(), that.getFireworkFlight(), + this.getStoredEnchants(), that.getStoredEnchants(), + this.isUnbreakable(), that.isUnbreakable(), + this.getFlags(), that.getFlags(), + this.getBannerBase(), that.getBannerBase(), + this.getBannerPatterns(), that.getBannerPatterns(), + this.getPotion(), that.getPotion() + ); + } + + @Override + public int hashCode() + { + return Objects.hash( + this.getId(), + this.getCount(), + this.getDamage(), + this.getName(), + this.getLore(), + this.getEnchants(), + this.getRepaircost(), + this.getTitle(), + this.getAuthor(), + this.getPages(), + this.getColor(), + this.isScaling(), + this.getPotionEffects(), + this.getSkull(), + this.getFireworkEffect(), + this.getFireworkEffects(), + this.getFireworkFlight(), + this.getStoredEnchants(), + this.isUnbreakable(), + this.getFlags(), + this.getBannerBase(), + this.getBannerPatterns(), + this.getPotion() + ); + } + + // -------------------------------------------- // + // GET & SET & NOTHING + // -------------------------------------------- // + + // We treat null and empty collections the same. + public static boolean isNothing(Object object) + { + if (object == null) return true; + if (object instanceof Collection) return ((Collection)object).isEmpty(); + if (object instanceof Map) return ((Map)object).isEmpty(); + return false; + } + + // Return the value unless the value is nothing then return standard instead. + public static T get(T value, T standard) + { + if (isNothing(value)) return standard; + return value; + } + + // Return the value unless the value is nothing or standard then return null instead. + // Perform shallow copy on supported collections. + @SuppressWarnings("unchecked") + public static R set(T value, T standard) + { + if (isNothing(value)) return null; + if (value.equals(standard)) return null; + + if (value instanceof List) + { + List list = (List)value; + return (R) new MassiveListDef<>(list); + } + else if (value instanceof Set) + { + Set set = (Set)value; + return (R) new MassiveTreeSetDef<>(ComparatorSmart.get(), set); + } + else if (value instanceof Map) + { + Map map = (Map)value; + return (R) new MassiveTreeMapDef<>(ComparatorSmart.get(), map); + } + + return (R) value; + } + +} diff --git a/src/com/massivecraft/massivecore/item/DataPotionEffect.java b/src/com/massivecraft/massivecore/item/DataPotionEffect.java new file mode 100644 index 00000000..1069d6ef --- /dev/null +++ b/src/com/massivecraft/massivecore/item/DataPotionEffect.java @@ -0,0 +1,142 @@ +package com.massivecraft.massivecore.item; + +import static com.massivecraft.massivecore.item.DataItemStack.get; +import static com.massivecraft.massivecore.item.DataItemStack.set; + +import java.util.Objects; + +import org.bukkit.potion.PotionEffect; + +import com.massivecraft.massivecore.comparator.ComparatorSmart; +import com.massivecraft.massivecore.util.MUtil; + +public class DataPotionEffect implements Comparable +{ + // -------------------------------------------- // + // DEFAULTS + // -------------------------------------------- // + + public static final transient Integer DEFAULT_ID = null; + public static final transient Integer DEFAULT_DURATION = 20 * 3 * 60; + public static final transient Integer DEFAULT_AMPLIFIER = 0; + public static final transient Boolean DEFAULT_AMBIENT = false; + public static final transient Boolean DEFAULT_PARTICLES = true; + public static final transient Integer DEFAULT_COLOR = null; + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private Integer id = null; + public Integer getId() { return get(this.id, DEFAULT_ID); } + public DataPotionEffect setId(Integer id) { this.id = set(id, DEFAULT_ID); return this; } + + private Integer duration = null; + public int getDuration() { return get(this.duration, DEFAULT_DURATION); } + public DataPotionEffect setDuration(int duration) { this.duration = set(duration, DEFAULT_DURATION); return this; } + + private Integer amplifier = null; + public int getAmplifier() { return get(this.amplifier, DEFAULT_AMPLIFIER); } + public DataPotionEffect setAmplifier(int amplifier) { this.amplifier = set(amplifier, DEFAULT_AMPLIFIER); return this; } + + private Boolean ambient = null; + public boolean isAmbient() { return get(this.ambient, DEFAULT_AMBIENT); } + public DataPotionEffect setAmbient(boolean ambient) { this.ambient = set(ambient, DEFAULT_AMBIENT); return this; } + + // SINCE: 1.8 + private Boolean particles = null; + public boolean isParticles() { return get(this.particles, DEFAULT_PARTICLES); } + public DataPotionEffect setParticles(boolean particles) { this.particles = set(particles, DEFAULT_PARTICLES); return this; } + + // SINCE: 1.9 + private Integer color = null; + public Integer getColor() { return get(this.color, DEFAULT_COLOR); } + public DataPotionEffect setColor(Integer color) { this.color = set(color, DEFAULT_COLOR); return this; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public DataPotionEffect() + { + + } + + public DataPotionEffect(PotionEffect potionEffect) + { + this.write(potionEffect, false); + } + + // -------------------------------------------- // + // WRITE + // -------------------------------------------- // + + public void write(PotionEffect potionEffect, boolean a2b) + { + WriterPotionEffect.get().write(this, potionEffect, a2b); + } + + // -------------------------------------------- // + // TO BUKKIT + // -------------------------------------------- // + + public PotionEffect toBukkit() + { + // Create + PotionEffect ret = WriterPotionEffect.get().createB(); + + // Fill + this.write(ret, true); + + // Return + return ret; + } + + // -------------------------------------------- // + // COMPARE & EQUALS & HASHCODE + // -------------------------------------------- // + + @Override + public int compareTo(DataPotionEffect that) + { + return ComparatorSmart.get().compare( + this.getId(), that.getId(), + this.getDuration(), that.getDuration(), + this.getAmplifier(), that.getAmplifier(), + this.isAmbient(), that.isAmbient(), + this.isParticles(), that.isParticles(), + this.getColor(), that.getColor() + ); + } + + // TODO: Use compare instead to avoid bugs? + @Override + public boolean equals(Object object) + { + if ( ! (object instanceof DataPotionEffect)) return false; + DataPotionEffect that = (DataPotionEffect)object; + + return MUtil.equals( + this.getId(), that.getId(), + this.getDuration(), that.getDuration(), + this.getAmplifier(), that.getAmplifier(), + this.isAmbient(), that.isAmbient(), + this.isParticles(), that.isParticles(), + this.getColor(), that.getColor() + ); + } + + @Override + public int hashCode() + { + return Objects.hash( + this.getId(), + this.getDuration(), + this.getAmplifier(), + this.isAmbient(), + this.isParticles(), + this.getColor() + ); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstract.java b/src/com/massivecraft/massivecore/item/WriterAbstract.java new file mode 100644 index 00000000..dbb5ecdc --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstract.java @@ -0,0 +1,251 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import com.massivecraft.massivecore.Engine; +import com.massivecraft.massivecore.MassiveCoreMConf; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.type.primitive.TypeBoolean; +import com.massivecraft.massivecore.util.ReflectionUtil; +import com.massivecraft.massivecore.util.Txt; + +public abstract class WriterAbstract extends Engine +{ + // -------------------------------------------- // + // WRITERS + // -------------------------------------------- // + // A writer may contain subwriters. + + private List> writers = new MassiveList<>(); + + public List> getWriters() + { + return this.writers; + } + + public void clearWriters() + { + this.writers.clear(); + } + + @SuppressWarnings("unchecked") + public void addWriter(Class clazz) + { + boolean success = false; + try + { + Class> clazzInner = (Class>) clazz; + WriterAbstract writer = ReflectionUtil.getSingletonInstance(clazzInner); + writer.setActive(this.getActivePlugin()); + this.getWriters().add(writer); + success = true; + } + catch (Throwable t) + { + if (MassiveCoreMConf.get().debugWriters) + { + t.printStackTrace(); + } + } + + if (MassiveCoreMConf.get().debugWriters) + { + String message = Txt.parse("%s %s", clazz.getSimpleName(), TypeBoolean.getOn().getVisual(success)); + this.getActivePlugin().log(message); + } + } + + public void addWriters(Class... clazzs) + { + for (Class clazz : clazzs) + { + this.addWriter(clazz); + } + } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + public abstract CA createA(); + + public abstract CB createB(); + + // -------------------------------------------- // + // CLASSES + // -------------------------------------------- // + + private Class classA = null; + + public Class getClassA() + { + return this.classA; + } + + public void setClassA(Class classA) + { + this.classA = classA; + } + + private Class classB = null; + + public Class getClassB() + { + return this.classB; + } + + public void setClassB(Class classB) + { + this.classB = classB; + } + + // -------------------------------------------- // + // MORPH + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + public CA morphA(OA oa) + { + Class classA = this.getClassA(); + if (classA != null && !classA.isAssignableFrom(oa.getClass())) return null; + CA ca = (CA) oa; + return ca; + } + + @SuppressWarnings("unchecked") + public CB morphB(OB ob) + { + Class classB = this.getClassB(); + if (classB != null && !classB.isAssignableFrom(ob.getClass())) return null; + CB cb = (CB) ob; + return cb; + } + + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + @Override + public void setActive(boolean active) + { + this.provoke(); + super.setActive(active); + } + + // -------------------------------------------- // + // PROVOKE + // -------------------------------------------- // + + public Object provoke() + { + // Create Instances + CA ia = this.createA(); + CB ib = this.createB(); + + // Demand Set + if (ia == null) throw new NullPointerException("Couldn't Create A"); + if (ib == null) throw new NullPointerException("Couldn't Create B"); + + // Use Access + FA fa = this.getA(ia); + this.setA(ia, fa); + + FB fb = this.getB(ib); + this.setB(ib, fb); + + // Use To + this.toA(fb); + this.toB(fa); + + // Return + return null; + } + + // -------------------------------------------- // + // WRITE + // -------------------------------------------- // + + public void write(OA oa, OB ob, boolean a2b) + { + if (!this.isActive()) throw new IllegalStateException("not active " + this.getClass().getName()); + + if (oa == null) throw new NullPointerException("oa"); + if (ob == null) throw new NullPointerException("ob"); + + CA ca = this.morphA(oa); + if (ca == null) return; + + CB cb = this.morphB(ob); + if (cb == null) return; + + this.writeInner(oa, ob, ca, cb, a2b); + } + + public void writeInner(OA oa, OB ob, CA ca, CB cb, boolean a2b) + { + for (WriterAbstract writer : this.getWriters()) + { + writer.write(ca, cb, a2b); + } + + if (a2b) + { + FA fa = getA(ca); + FB fb = toB(fa); + setB(cb, fb); + } + else + { + FB fb = getB(cb); + FA fa = toA(fb); + setA(ca, fa); + } + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + public FA getA(CA ca) + { + return null; + } + + public void setA(CA ca, FA fa) + { + + } + + public FB getB(CB cb) + { + return null; + } + + public void setB(CB cb, FB fb) + { + + } + + // -------------------------------------------- // + // CONVERT + // -------------------------------------------- // + + private Converter converterTo = ConverterDefault.get(); + public Converter getConverterTo() { return this.converterTo; } + public void setConverterTo(Converter converterTo) { this.converterTo = converterTo; } + + private Converter converterFrom = ConverterDefault.get(); + public Converter getConverterFrom() { return this.converterFrom; } + public void setConverterFrom(Converter converterFrom) { this.converterFrom = converterFrom; } + + public FA toA(FB fb) + { + return this.getConverterFrom().convert(fb); + } + + public FB toB(FA fa) + { + return this.getConverterTo().convert(fa); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractBannerPattern.java b/src/com/massivecraft/massivecore/item/WriterAbstractBannerPattern.java new file mode 100644 index 00000000..a6324220 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractBannerPattern.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.DyeColor; +import org.bukkit.block.banner.Pattern; +import org.bukkit.block.banner.PatternType; + + +public abstract class WriterAbstractBannerPattern extends WriterAbstractReflect +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public WriterAbstractBannerPattern(String fieldName) + { + super(Pattern.class, fieldName); + } + + public WriterAbstractBannerPattern() + { + this(null); + } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + @Override + public DataBannerPattern createA() + { + return new DataBannerPattern(); + } + + @Override + public Pattern createB() + { + return new Pattern(DyeColor.WHITE, PatternType.BASE); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractFireworkEffect.java b/src/com/massivecraft/massivecore/item/WriterAbstractFireworkEffect.java new file mode 100644 index 00000000..75472647 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractFireworkEffect.java @@ -0,0 +1,39 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Color; +import org.bukkit.FireworkEffect; + + +public abstract class WriterAbstractFireworkEffect extends WriterAbstractReflect +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public WriterAbstractFireworkEffect(String fieldName) + { + super(FireworkEffect.class, fieldName); + } + + public WriterAbstractFireworkEffect() + { + this(null); + } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + @Override + public DataFireworkEffect createA() + { + return new DataFireworkEffect(); + } + + @Override + public FireworkEffect createB() + { + return FireworkEffect.builder().withColor(Color.GREEN).build(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractItemMeta.java b/src/com/massivecraft/massivecore/item/WriterAbstractItemMeta.java new file mode 100644 index 00000000..7af12dfb --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractItemMeta.java @@ -0,0 +1,8 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.meta.ItemMeta; + +public abstract class WriterAbstractItemMeta extends WriterAbstractMeta +{ + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractItemStack.java b/src/com/massivecraft/massivecore/item/WriterAbstractItemStack.java new file mode 100644 index 00000000..b7b5f9c1 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractItemStack.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + + +public abstract class WriterAbstractItemStack extends WriterAbstract +{ + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + @Override + public DataItemStack createA() + { + return new DataItemStack(); + } + + @Override + public ItemStack createB() + { + return new ItemStack(Material.AIR); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java b/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java new file mode 100644 index 00000000..a43f8d7a --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java @@ -0,0 +1,31 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public abstract class WriterAbstractItemStackMeta extends WriterAbstractMeta +{ + // -------------------------------------------- // + // MORPH + // -------------------------------------------- // + + @Override + public ItemMeta morphB(ItemStack ob) + { + return ob.getItemMeta(); + } + + // -------------------------------------------- // + // WRITE + // -------------------------------------------- // + + @Override + public void writeInner(DataItemStack oa, ItemStack ob, DataItemStack ca, ItemMeta cb, boolean a2b) + { + super.writeInner(oa, ob, ca, cb, a2b); + + // Write back the meta + if (a2b) ob.setItemMeta(cb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractMeta.java b/src/com/massivecraft/massivecore/item/WriterAbstractMeta.java new file mode 100644 index 00000000..78368986 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractMeta.java @@ -0,0 +1,39 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public abstract class WriterAbstractMeta extends WriterAbstract +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private Material material = Material.STONE; + public Material getMaterial() { return this.material; } + @SuppressWarnings("unchecked") + public void setMaterial(Material material) + { + this.material = material; + CB cb = this.createB(); + this.setClassB((Class) cb.getClass()); + } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + @Override + public DataItemStack createA() + { + return new DataItemStack(); + } + + @SuppressWarnings("unchecked") + @Override + public CB createB() + { + return (CB) new ItemStack(this.getMaterial()).getItemMeta(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractPotionEffect.java b/src/com/massivecraft/massivecore/item/WriterAbstractPotionEffect.java new file mode 100644 index 00000000..42c6e170 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractPotionEffect.java @@ -0,0 +1,38 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public abstract class WriterAbstractPotionEffect extends WriterAbstractReflect +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public WriterAbstractPotionEffect(String fieldName) + { + super(PotionEffect.class, fieldName); + } + + public WriterAbstractPotionEffect() + { + this(null); + } + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + @Override + public DataPotionEffect createA() + { + return new DataPotionEffect(); + } + + @Override + public PotionEffect createB() + { + return new PotionEffect(PotionEffectType.SPEED, 1, 1); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractReflect.java b/src/com/massivecraft/massivecore/item/WriterAbstractReflect.java new file mode 100644 index 00000000..a1b5f94d --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterAbstractReflect.java @@ -0,0 +1,35 @@ +package com.massivecraft.massivecore.item; + +import java.lang.reflect.Field; + +import com.massivecraft.massivecore.util.ReflectionUtil; + +public abstract class WriterAbstractReflect extends WriterAbstract +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private final Field field; + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public WriterAbstractReflect(Class clazz, String fieldName) + { + this.field = (fieldName == null ? null : ReflectionUtil.getField(clazz, fieldName)); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public void setB(CB cb, FB fb) + { + if (this.field == null) return; + ReflectionUtil.setField(this.field, cb, fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterBannerPattern.java b/src/com/massivecraft/massivecore/item/WriterBannerPattern.java new file mode 100644 index 00000000..d263110c --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterBannerPattern.java @@ -0,0 +1,29 @@ +package com.massivecraft.massivecore.item; + +public class WriterBannerPattern extends WriterAbstractBannerPattern +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterBannerPattern i = new WriterBannerPattern(); + public static WriterBannerPattern get() { return i; } + + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + @Override + public void setActiveInner(boolean active) + { + if ( ! active) return; + this.clearWriters(); + + this.addWriters( + WriterBannerPatternId.class, + WriterBannerPatternColor.class + ); + + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterBannerPatternColor.java b/src/com/massivecraft/massivecore/item/WriterBannerPatternColor.java new file mode 100644 index 00000000..08950d0b --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterBannerPatternColor.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.DyeColor; +import org.bukkit.block.banner.Pattern; + +public class WriterBannerPatternColor extends WriterAbstractBannerPattern +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterBannerPatternColor i = new WriterBannerPatternColor(); + public static WriterBannerPatternColor get() { return i; } + public WriterBannerPatternColor() + { + super("color"); + this.setConverterTo(ConverterToDyeColor.get()); + this.setConverterFrom(ConverterFromDyeColor.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataBannerPattern ca) + { + return ca.getColor(); + } + + @Override + public void setA(DataBannerPattern ca, Integer fa) + { + ca.setColor(fa); + } + + @Override + public DyeColor getB(Pattern cb) + { + return cb.getColor(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterBannerPatternId.java b/src/com/massivecraft/massivecore/item/WriterBannerPatternId.java new file mode 100644 index 00000000..58ac91d4 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterBannerPatternId.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.block.banner.Pattern; +import org.bukkit.block.banner.PatternType; + +public class WriterBannerPatternId extends WriterAbstractBannerPattern +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterBannerPatternId i = new WriterBannerPatternId(); + public static WriterBannerPatternId get() { return i; } + public WriterBannerPatternId() + { + super("pattern"); + this.setConverterTo(ConverterToBannerPatternType.get()); + this.setConverterFrom(ConverterFromBannerPatternType.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public String getA(DataBannerPattern ca) + { + return ca.getId(); + } + + @Override + public void setA(DataBannerPattern ca, String fa) + { + ca.setId(fa); + } + + @Override + public PatternType getB(Pattern cb) + { + return cb.getPattern(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterFireworkEffect.java b/src/com/massivecraft/massivecore/item/WriterFireworkEffect.java new file mode 100644 index 00000000..3e26dc2c --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterFireworkEffect.java @@ -0,0 +1,32 @@ +package com.massivecraft.massivecore.item; + +public class WriterFireworkEffect extends WriterAbstractFireworkEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterFireworkEffect i = new WriterFireworkEffect(); + public static WriterFireworkEffect get() { return i; } + + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + @Override + public void setActiveInner(boolean active) + { + if ( ! active) return; + this.clearWriters(); + + this.addWriters( + WriterFireworkEffectFlicker.class, + WriterFireworkEffectTrail.class, + WriterFireworkEffectColors.class, + WriterFireworkEffectFadeColors.class, + WriterFireworkEffectType.class + ); + + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterFireworkEffectColors.java b/src/com/massivecraft/massivecore/item/WriterFireworkEffectColors.java new file mode 100644 index 00000000..97b42534 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterFireworkEffectColors.java @@ -0,0 +1,47 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.Color; +import org.bukkit.FireworkEffect; + +import com.google.common.collect.ImmutableList; + +public class WriterFireworkEffectColors extends WriterAbstractFireworkEffect, ImmutableList> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterFireworkEffectColors i = new WriterFireworkEffectColors(); + public static WriterFireworkEffectColors get() { return i; } + public WriterFireworkEffectColors() + { + super("colors"); + this.setConverterTo(ConverterToColors.get()); + this.setConverterFrom(ConverterFromColors.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataFireworkEffect ca) + { + return ca.getColors(); + } + + @Override + public void setA(DataFireworkEffect ca, List fa) + { + ca.setColors(fa); + } + + @Override + public ImmutableList getB(FireworkEffect cb) + { + return (ImmutableList) cb.getColors(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterFireworkEffectFadeColors.java b/src/com/massivecraft/massivecore/item/WriterFireworkEffectFadeColors.java new file mode 100644 index 00000000..6ce5cb70 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterFireworkEffectFadeColors.java @@ -0,0 +1,47 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.Color; +import org.bukkit.FireworkEffect; + +import com.google.common.collect.ImmutableList; + +public class WriterFireworkEffectFadeColors extends WriterAbstractFireworkEffect, ImmutableList> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterFireworkEffectFadeColors i = new WriterFireworkEffectFadeColors(); + public static WriterFireworkEffectFadeColors get() { return i; } + public WriterFireworkEffectFadeColors() + { + super("fadeColors"); + this.setConverterTo(ConverterToColors.get()); + this.setConverterFrom(ConverterFromColors.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataFireworkEffect ca) + { + return ca.getFadeColors(); + } + + @Override + public void setA(DataFireworkEffect ca, List fa) + { + ca.setFadeColors(fa); + } + + @Override + public ImmutableList getB(FireworkEffect cb) + { + return (ImmutableList) cb.getFadeColors(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterFireworkEffectFlicker.java b/src/com/massivecraft/massivecore/item/WriterFireworkEffectFlicker.java new file mode 100644 index 00000000..35bfa222 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterFireworkEffectFlicker.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; + +public class WriterFireworkEffectFlicker extends WriterAbstractFireworkEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterFireworkEffectFlicker i = new WriterFireworkEffectFlicker(); + public static WriterFireworkEffectFlicker get() { return i; } + public WriterFireworkEffectFlicker() + { + super("flicker"); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Boolean getA(DataFireworkEffect ca) + { + return ca.hasFlicker(); + } + + @Override + public void setA(DataFireworkEffect ca, Boolean fa) + { + ca.setFlicker(fa); + } + + @Override + public Boolean getB(FireworkEffect cb) + { + return cb.hasFlicker(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterFireworkEffectTrail.java b/src/com/massivecraft/massivecore/item/WriterFireworkEffectTrail.java new file mode 100644 index 00000000..ceb6dfb2 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterFireworkEffectTrail.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; + +public class WriterFireworkEffectTrail extends WriterAbstractFireworkEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterFireworkEffectTrail i = new WriterFireworkEffectTrail(); + public static WriterFireworkEffectTrail get() { return i; } + public WriterFireworkEffectTrail() + { + super("trail"); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Boolean getA(DataFireworkEffect ca) + { + return ca.hasTrail(); + } + + @Override + public void setA(DataFireworkEffect ca, Boolean fa) + { + ca.setTrail(fa); + } + + @Override + public Boolean getB(FireworkEffect cb) + { + return cb.hasTrail(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterFireworkEffectType.java b/src/com/massivecraft/massivecore/item/WriterFireworkEffectType.java new file mode 100644 index 00000000..82fedf67 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterFireworkEffectType.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; +import org.bukkit.FireworkEffect.Type; + +public class WriterFireworkEffectType extends WriterAbstractFireworkEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterFireworkEffectType i = new WriterFireworkEffectType(); + public static WriterFireworkEffectType get() { return i; } + public WriterFireworkEffectType() + { + super("type"); + this.setConverterTo(ConverterToFireworkEffectType.get()); + this.setConverterFrom(ConverterFromFireworkEffectType.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public String getA(DataFireworkEffect ca) + { + return ca.getType(); + } + + @Override + public void setA(DataFireworkEffect ca, String fa) + { + ca.setType(fa); + } + + @Override + public Type getB(FireworkEffect cb) + { + return cb.getType(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStack.java b/src/com/massivecraft/massivecore/item/WriterItemStack.java new file mode 100644 index 00000000..ca784de7 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStack.java @@ -0,0 +1,34 @@ +package com.massivecraft.massivecore.item; + +public class WriterItemStack extends WriterAbstractItemStack +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStack i = new WriterItemStack(); + public static WriterItemStack get() { return i; } + + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + @Override + public void setActiveInner(boolean active) + { + if ( ! active) return; + this.clearWriters(); + + this.addWriters( + // BASIC + WriterItemStackId.class, + WriterItemStackCount.class, + WriterItemStackDamage.class, + + // META + WriterItemStackMeta.class + ); + } + + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackCount.java b/src/com/massivecraft/massivecore/item/WriterItemStackCount.java new file mode 100644 index 00000000..1994326a --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackCount.java @@ -0,0 +1,42 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemStack; + +public class WriterItemStackCount extends WriterAbstractItemStack +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackCount i = new WriterItemStackCount(); + public static WriterItemStackCount get() { return i; } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca) + { + return ca.getCount(); + } + + @Override + public void setA(DataItemStack ca, Integer fa) + { + ca.setCount(fa); + } + + @Override + public Integer getB(ItemStack cb) + { + return cb.getAmount(); + } + + @Override + public void setB(ItemStack cb, Integer fb) + { + cb.setAmount(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackDamage.java b/src/com/massivecraft/massivecore/item/WriterItemStackDamage.java new file mode 100644 index 00000000..a89b90c6 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackDamage.java @@ -0,0 +1,42 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemStack; + +public class WriterItemStackDamage extends WriterAbstractItemStack +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackDamage i = new WriterItemStackDamage(); + public static WriterItemStackDamage get() { return i; } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca) + { + return ca.getDamage(); + } + + @Override + public void setA(DataItemStack ca, Integer fa) + { + ca.setDamage(fa); + } + + @Override + public Integer getB(ItemStack cb) + { + return Integer.valueOf(cb.getDurability()); + } + + @Override + public void setB(ItemStack cb, Integer fb) + { + cb.setDurability(fb.shortValue()); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackId.java b/src/com/massivecraft/massivecore/item/WriterItemStackId.java new file mode 100644 index 00000000..d09af003 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackId.java @@ -0,0 +1,44 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.ItemStack; + +public class WriterItemStackId extends WriterAbstractItemStack +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackId i = new WriterItemStackId(); + public static WriterItemStackId get() { return i; } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca) + { + return ca.getId(); + } + + @Override + public void setA(DataItemStack ca, Integer fa) + { + ca.setId(fa); + } + + @SuppressWarnings("deprecation") + @Override + public Integer getB(ItemStack cb) + { + return cb.getTypeId(); + } + + @SuppressWarnings("deprecation") + @Override + public void setB(ItemStack cb, Integer fb) + { + cb.setTypeId(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMeta.java b/src/com/massivecraft/massivecore/item/WriterItemStackMeta.java new file mode 100644 index 00000000..47d41f33 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMeta.java @@ -0,0 +1,77 @@ +package com.massivecraft.massivecore.item; + +public class WriterItemStackMeta extends WriterAbstractItemStackMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMeta i = new WriterItemStackMeta(); + public static WriterItemStackMeta get() { return i; } + + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + @Override + public void setActiveInner(boolean active) + { + if ( ! active) return; + this.clearWriters(); + + this.addWriters( + // UNSPECIFIC + WriterItemStackMetaName.class, + WriterItemStackMetaLore.class, + WriterItemStackMetaEnchants.class, + WriterItemStackMetaRepaircost.class, + + // BOOK + WriterItemStackMetaTitle.class, + WriterItemStackMetaAuthor.class, + WriterItemStackMetaPages.class, + + // LEATHER ARMOR + WriterItemStackMetaColor.class, + + // MAP + WriterItemStackMetaScaling.class, + + // POTION EFFECTS + WriterItemStackMetaPotionEffects.class, + + // SKULL + WriterItemStackMetaSkull17.class, + WriterItemStackMetaSkull18.class, + + // FIREWORK EFFECT + WriterItemStackMetaFireworkEffect.class, + + // FIREWORK + WriterItemStackMetaFireworkEffects.class, + WriterItemStackMetaFireworkFlight.class, + + // STORED ENCHANTS + WriterItemStackMetaStoredEnchants.class, + + // UNBREAKABLE + WriterItemStackMetaUnbreakable.class, + + // FLAGS + WriterItemStackMetaFlags.class, + + // BANNER BASE + WriterItemStackMetaBannerBase.class, + // TODO: Shield? + + // BANNER PATTERNS + WriterItemStackMetaBannerPatterns.class + // TODO + // TODO: Shield? + + // POTION + // TODO + ); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaAuthor.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaAuthor.java new file mode 100644 index 00000000..041092bf --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaAuthor.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.BookMeta; + +public class WriterItemStackMetaAuthor extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaAuthor i = new WriterItemStackMetaAuthor(); + public static WriterItemStackMetaAuthor get() { return i; } + { + this.setMaterial(Material.WRITTEN_BOOK); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public String getA(DataItemStack ca) + { + return ca.getAuthor(); + } + + @Override + public void setA(DataItemStack ca, String fa) + { + ca.setAuthor(fa); + } + + @Override + public String getB(BookMeta cb) + { + return cb.getAuthor(); + } + + @Override + public void setB(BookMeta cb, String fb) + { + cb.setAuthor(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerBase.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerBase.java new file mode 100644 index 00000000..dd10a7a8 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerBase.java @@ -0,0 +1,48 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.inventory.meta.BannerMeta; + +public class WriterItemStackMetaBannerBase extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaBannerBase i = new WriterItemStackMetaBannerBase(); + public static WriterItemStackMetaBannerBase get() { return i; } + public WriterItemStackMetaBannerBase() + { + this.setMaterial(Material.BANNER); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca) + { + return ca.getBannerBase(); + } + + @Override + public void setA(DataItemStack ca, Integer fa) + { + ca.setBannerBase(fa); + } + + @Override + public DyeColor getB(BannerMeta cb) + { + return cb.getBaseColor(); + } + + @Override + public void setB(BannerMeta cb, DyeColor fb) + { + cb.setBaseColor(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerPatterns.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerPatterns.java new file mode 100644 index 00000000..dcf91b5e --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaBannerPatterns.java @@ -0,0 +1,51 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.block.banner.Pattern; +import org.bukkit.inventory.meta.BannerMeta; + +public class WriterItemStackMetaBannerPatterns extends WriterAbstractItemMeta, List> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaBannerPatterns i = new WriterItemStackMetaBannerPatterns(); + public static WriterItemStackMetaBannerPatterns get() { return i; } + { + this.setMaterial(Material.BANNER); + this.setConverterTo(ConverterToBannerPatterns.get()); + this.setConverterFrom(ConverterFromBannerPatterns.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataItemStack ca) + { + return ca.getBannerPatterns(); + } + + @Override + public void setA(DataItemStack ca, List fa) + { + ca.setBannerPatterns(fa); + } + + @Override + public List getB(BannerMeta cb) + { + return cb.getPatterns(); + } + + @Override + public void setB(BannerMeta cb, List fb) + { + cb.setPatterns(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaColor.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaColor.java new file mode 100644 index 00000000..dbc1ca0d --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaColor.java @@ -0,0 +1,49 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +public class WriterItemStackMetaColor extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaColor i = new WriterItemStackMetaColor(); + public static WriterItemStackMetaColor get() { return i; } + { + this.setMaterial(Material.LEATHER_HELMET); + this.setConverterTo(ConverterToColor.get()); + this.setConverterFrom(ConverterFromColor.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca) + { + return ca.getColor(); + } + + @Override + public void setA(DataItemStack ca, Integer fa) + { + ca.setColor(fa); + } + + @Override + public Color getB(LeatherArmorMeta cb) + { + return cb.getColor(); + } + + @Override + public void setB(LeatherArmorMeta cb, Color fb) + { + cb.setColor(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaEnchants.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaEnchants.java new file mode 100644 index 00000000..5816ccf6 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaEnchants.java @@ -0,0 +1,54 @@ +package com.massivecraft.massivecore.item; + +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.meta.ItemMeta; + +public class WriterItemStackMetaEnchants extends WriterAbstractItemMeta, Map> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaEnchants i = new WriterItemStackMetaEnchants(); + public static WriterItemStackMetaEnchants get() { return i; } + public WriterItemStackMetaEnchants() + { + this.setConverterTo(ConverterToEnchants.get()); + this.setConverterFrom(ConverterFromEnchants.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Map getA(DataItemStack ca) + { + return ca.getEnchants(); + } + + @Override + public void setA(DataItemStack ca, Map fa) + { + ca.setEnchants(fa); + } + + @Override + public Map getB(ItemMeta cb) + { + return cb.getEnchants(); + } + + @Override + public void setB(ItemMeta cb, Map fb) + { + for (Entry entry : fb.entrySet()) + { + cb.addEnchant(entry.getKey(), entry.getValue(), true); + } + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffect.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffect.java new file mode 100644 index 00000000..bb9d1e2b --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffect.java @@ -0,0 +1,49 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.FireworkEffect; +import org.bukkit.Material; +import org.bukkit.inventory.meta.FireworkEffectMeta; + +public class WriterItemStackMetaFireworkEffect extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaFireworkEffect i = new WriterItemStackMetaFireworkEffect(); + public static WriterItemStackMetaFireworkEffect get() { return i; } + { + this.setMaterial(Material.FIREWORK_CHARGE); + this.setConverterTo(ConverterToFireworkEffect.get()); + this.setConverterFrom(ConverterFromFireworkEffect.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public DataFireworkEffect getA(DataItemStack ca) + { + return ca.getFireworkEffect(); + } + + @Override + public void setA(DataItemStack ca, DataFireworkEffect fa) + { + ca.setFireworkEffect(fa); + } + + @Override + public FireworkEffect getB(FireworkEffectMeta cb) + { + return cb.getEffect(); + } + + @Override + public void setB(FireworkEffectMeta cb, FireworkEffect fb) + { + cb.setEffect(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffects.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffects.java new file mode 100644 index 00000000..6919e43c --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkEffects.java @@ -0,0 +1,51 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.FireworkEffect; +import org.bukkit.Material; +import org.bukkit.inventory.meta.FireworkMeta; + +public class WriterItemStackMetaFireworkEffects extends WriterAbstractItemMeta, List> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaFireworkEffects i = new WriterItemStackMetaFireworkEffects(); + public static WriterItemStackMetaFireworkEffects get() { return i; } + { + this.setMaterial(Material.FIREWORK); + this.setConverterTo(ConverterToFireworkEffects.get()); + this.setConverterFrom(ConverterFromFireworkEffects.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataItemStack ca) + { + return ca.getFireworkEffects(); + } + + @Override + public void setA(DataItemStack ca, List fa) + { + ca.setFireworkEffects(fa); + } + + @Override + public List getB(FireworkMeta cb) + { + return cb.getEffects(); + } + + @Override + public void setB(FireworkMeta cb, List fb) + { + cb.addEffects(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkFlight.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkFlight.java new file mode 100644 index 00000000..f9243429 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFireworkFlight.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.FireworkMeta; + +public class WriterItemStackMetaFireworkFlight extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaFireworkFlight i = new WriterItemStackMetaFireworkFlight(); + public static WriterItemStackMetaFireworkFlight get() { return i; } + { + this.setMaterial(Material.FIREWORK); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca) + { + return ca.getFireworkFlight(); + } + + @Override + public void setA(DataItemStack ca, Integer fa) + { + ca.setFireworkFlight(fa); + } + + @Override + public Integer getB(FireworkMeta cb) + { + return cb.getPower(); + } + + @Override + public void setB(FireworkMeta cb, Integer fb) + { + cb.setPower(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaFlags.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFlags.java new file mode 100644 index 00000000..6f9441fd --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaFlags.java @@ -0,0 +1,50 @@ +package com.massivecraft.massivecore.item; + +import java.util.Set; + +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.meta.ItemMeta; + +public class WriterItemStackMetaFlags extends WriterAbstractItemMeta, Set> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaFlags i = new WriterItemStackMetaFlags(); + public static WriterItemStackMetaFlags get() { return i; } + public WriterItemStackMetaFlags() + { + this.setConverterTo(ConverterToItemFlags.get()); + this.setConverterFrom(ConverterFromItemFlags.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Set getA(DataItemStack ca) + { + return ca.getFlags(); + } + + @Override + public void setA(DataItemStack ca, Set fa) + { + ca.setFlags(fa); + } + + @Override + public Set getB(ItemMeta cb) + { + return cb.getItemFlags(); + } + + @Override + public void setB(ItemMeta cb, Set fb) + { + cb.addItemFlags(fb.toArray(new ItemFlag[0])); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaLore.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaLore.java new file mode 100644 index 00000000..8dcba2ef --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaLore.java @@ -0,0 +1,44 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.inventory.meta.ItemMeta; + +public class WriterItemStackMetaLore extends WriterAbstractItemMeta, List> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaLore i = new WriterItemStackMetaLore(); + public static WriterItemStackMetaLore get() { return i; } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataItemStack ca) + { + return ca.getLore(); + } + + @Override + public void setA(DataItemStack ca, List fa) + { + ca.setLore(fa); + } + + @Override + public List getB(ItemMeta cb) + { + return cb.getLore(); + } + + @Override + public void setB(ItemMeta cb, List fb) + { + cb.setLore(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaName.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaName.java new file mode 100644 index 00000000..bc4d8bb2 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaName.java @@ -0,0 +1,42 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.meta.ItemMeta; + +public class WriterItemStackMetaName extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaName i = new WriterItemStackMetaName(); + public static WriterItemStackMetaName get() { return i; } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public String getA(DataItemStack ca) + { + return ca.getName(); + } + + @Override + public void setA(DataItemStack ca, String fa) + { + ca.setName(fa); + } + + @Override + public String getB(ItemMeta cb) + { + return cb.getDisplayName(); + } + + @Override + public void setB(ItemMeta cb, String fb) + { + cb.setDisplayName(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaPages.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaPages.java new file mode 100644 index 00000000..c245cc05 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaPages.java @@ -0,0 +1,48 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.BookMeta; + +public class WriterItemStackMetaPages extends WriterAbstractItemMeta, List> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaPages i = new WriterItemStackMetaPages(); + public static WriterItemStackMetaPages get() { return i; } + { + this.setMaterial(Material.WRITTEN_BOOK); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataItemStack ca) + { + return ca.getPages(); + } + + @Override + public void setA(DataItemStack ca, List fa) + { + ca.setPages(fa); + } + + @Override + public List getB(BookMeta cb) + { + return cb.getPages(); + } + + @Override + public void setB(BookMeta cb, List fb) + { + cb.setPages(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaPotionEffects.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaPotionEffects.java new file mode 100644 index 00000000..9f75c291 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaPotionEffects.java @@ -0,0 +1,54 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; + +public class WriterItemStackMetaPotionEffects extends WriterAbstractItemMeta, List> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaPotionEffects i = new WriterItemStackMetaPotionEffects(); + public static WriterItemStackMetaPotionEffects get() { return i; } + { + this.setMaterial(Material.POTION); + this.setConverterTo(ConverterToPotionEffects.get()); + this.setConverterFrom(ConverterFromPotionEffects.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataItemStack ca) + { + return ca.getPotionEffects(); + } + + @Override + public void setA(DataItemStack ca, List fa) + { + ca.setPotionEffects(fa); + } + + @Override + public List getB(PotionMeta cb) + { + return cb.getCustomEffects(); + } + + @Override + public void setB(PotionMeta cb, List fb) + { + for (PotionEffect potionEffect : fb) + { + cb.addCustomEffect(potionEffect, false); + } + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaRepaircost.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaRepaircost.java new file mode 100644 index 00000000..85a60d65 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaRepaircost.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.Repairable; + +public class WriterItemStackMetaRepaircost extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaRepaircost i = new WriterItemStackMetaRepaircost(); + public static WriterItemStackMetaRepaircost get() { return i; } + { + this.setMaterial(Material.IRON_CHESTPLATE); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca) + { + return ca.getRepaircost(); + } + + @Override + public void setA(DataItemStack ca, Integer fa) + { + ca.setRepaircost(fa); + } + + @Override + public Integer getB(Repairable cb) + { + return cb.getRepairCost(); + } + + @Override + public void setB(Repairable cb, Integer fb) + { + cb.setRepairCost(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaScaling.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaScaling.java new file mode 100644 index 00000000..9fba0bd7 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaScaling.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.MapMeta; + +public class WriterItemStackMetaScaling extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaScaling i = new WriterItemStackMetaScaling(); + public static WriterItemStackMetaScaling get() { return i; } + { + this.setMaterial(Material.MAP); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Boolean getA(DataItemStack ca) + { + return ca.isScaling(); + } + + @Override + public void setA(DataItemStack ca, Boolean fa) + { + ca.setScaling(fa); + } + + @Override + public Boolean getB(MapMeta cb) + { + return cb.isScaling(); + } + + @Override + public void setB(MapMeta cb, Boolean fb) + { + cb.setScaling(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull17.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull17.java new file mode 100644 index 00000000..b575a411 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull17.java @@ -0,0 +1,47 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.SkullMeta; + +public class WriterItemStackMetaSkull17 extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaSkull17 i = new WriterItemStackMetaSkull17(); + public static WriterItemStackMetaSkull17 get() { return i; } + public WriterItemStackMetaSkull17() + { + this.setMaterial(Material.SKULL_ITEM); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public String getA(DataItemStack ca) + { + return ca.getSkull(); + } + + @Override + public void setA(DataItemStack ca, String fa) + { + ca.setSkull(fa); + } + + @Override + public String getB(SkullMeta cb) + { + return cb.getOwner(); + } + + @Override + public void setB(SkullMeta cb, String fb) + { + cb.setOwner(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull18.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull18.java new file mode 100644 index 00000000..19ed7b7e --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaSkull18.java @@ -0,0 +1,64 @@ +package com.massivecraft.massivecore.item; + +import java.util.UUID; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.SkullMeta; + +import com.massivecraft.massivecore.Couple; +import com.massivecraft.massivecore.nms.NmsHead; + +public class WriterItemStackMetaSkull18 extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaSkull18 i = new WriterItemStackMetaSkull18(); + public static WriterItemStackMetaSkull18 get() { return i; } + public WriterItemStackMetaSkull18() + { + this.setMaterial(Material.SKULL_ITEM); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public String getA(DataItemStack ca) + { + return ca.getSkull(); + } + + @Override + public void setA(DataItemStack ca, String fa) + { + if (fa != null) fa = fa.toLowerCase(); + ca.setSkull(fa); + } + + @Override + public String getB(SkullMeta cb) + { + return cb.getOwner(); + } + + @Override + public void setB(SkullMeta cb, String fb) + { + String name = fb; + + UUID id = null; + + Couple resolved = NmsHead.resolve(name, id); + name = resolved.getFirst(); + id = resolved.getSecond(); + + if (name != null || id != null) + { + NmsHead.set(cb, name, id); + } + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaStoredEnchants.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaStoredEnchants.java new file mode 100644 index 00000000..8e59e2da --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaStoredEnchants.java @@ -0,0 +1,56 @@ +package com.massivecraft.massivecore.item; + +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; + +public class WriterItemStackMetaStoredEnchants extends WriterAbstractItemMeta, Map> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaStoredEnchants i = new WriterItemStackMetaStoredEnchants(); + public static WriterItemStackMetaStoredEnchants get() { return i; } + public WriterItemStackMetaStoredEnchants() + { + this.setMaterial(Material.ENCHANTED_BOOK); + this.setConverterTo(ConverterToEnchants.get()); + this.setConverterFrom(ConverterFromEnchants.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Map getA(DataItemStack ca) + { + return ca.getStoredEnchants(); + } + + @Override + public void setA(DataItemStack ca, Map fa) + { + ca.setStoredEnchants(fa); + } + + @Override + public Map getB(EnchantmentStorageMeta cb) + { + return cb.getStoredEnchants(); + } + + @Override + public void setB(EnchantmentStorageMeta cb, Map fb) + { + for (Entry entry : fb.entrySet()) + { + cb.addStoredEnchant(entry.getKey(), entry.getValue(), true); + } + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaTitle.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaTitle.java new file mode 100644 index 00000000..2d5cb586 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaTitle.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.BookMeta; + +public class WriterItemStackMetaTitle extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaTitle i = new WriterItemStackMetaTitle(); + public static WriterItemStackMetaTitle get() { return i; } + { + this.setMaterial(Material.WRITTEN_BOOK); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public String getA(DataItemStack ca) + { + return ca.getTitle(); + } + + @Override + public void setA(DataItemStack ca, String fa) + { + ca.setTitle(fa); + } + + @Override + public String getB(BookMeta cb) + { + return cb.getTitle(); + } + + @Override + public void setB(BookMeta cb, String fb) + { + cb.setTitle(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaUnbreakable.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaUnbreakable.java new file mode 100644 index 00000000..b61e0614 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaUnbreakable.java @@ -0,0 +1,42 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.inventory.meta.ItemMeta; + +public class WriterItemStackMetaUnbreakable extends WriterAbstractItemMeta +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaUnbreakable i = new WriterItemStackMetaUnbreakable(); + public static WriterItemStackMetaUnbreakable get() { return i; } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Boolean getA(DataItemStack ca) + { + return ca.isUnbreakable(); + } + + @Override + public void setA(DataItemStack ca, Boolean fa) + { + ca.setUnbreakable(fa); + } + + @Override + public Boolean getB(ItemMeta cb) + { + return cb.spigot().isUnbreakable(); + } + + @Override + public void setB(ItemMeta cb, Boolean fb) + { + cb.spigot().setUnbreakable(fb); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterPotionEffect.java b/src/com/massivecraft/massivecore/item/WriterPotionEffect.java new file mode 100644 index 00000000..b0e79044 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterPotionEffect.java @@ -0,0 +1,33 @@ +package com.massivecraft.massivecore.item; + +public class WriterPotionEffect extends WriterAbstractPotionEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterPotionEffect i = new WriterPotionEffect(); + public static WriterPotionEffect get() { return i; } + + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + @Override + public void setActiveInner(boolean active) + { + if ( ! active) return; + this.clearWriters(); + + this.addWriters( + WriterPotionEffectId.class, + WriterPotionEffectDuraction.class, + WriterPotionEffectAmplifier.class, + WriterPotionEffectAmbient.class, + WriterPotionEffectParticles.class, + WriterPotionEffectColor.class + ); + + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterPotionEffectAmbient.java b/src/com/massivecraft/massivecore/item/WriterPotionEffectAmbient.java new file mode 100644 index 00000000..c0bb71b2 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterPotionEffectAmbient.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class WriterPotionEffectAmbient extends WriterAbstractPotionEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterPotionEffectAmbient i = new WriterPotionEffectAmbient(); + public static WriterPotionEffectAmbient get() { return i; } + public WriterPotionEffectAmbient() + { + super("ambient"); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Boolean getA(DataPotionEffect ca) + { + return ca.isAmbient(); + } + + @Override + public void setA(DataPotionEffect ca, Boolean fa) + { + ca.setAmbient(fa); + } + + @Override + public Boolean getB(PotionEffect cb) + { + return cb.isAmbient(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterPotionEffectAmplifier.java b/src/com/massivecraft/massivecore/item/WriterPotionEffectAmplifier.java new file mode 100644 index 00000000..d1f52c3c --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterPotionEffectAmplifier.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class WriterPotionEffectAmplifier extends WriterAbstractPotionEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterPotionEffectAmplifier i = new WriterPotionEffectAmplifier(); + public static WriterPotionEffectAmplifier get() { return i; } + public WriterPotionEffectAmplifier() + { + super("amplifier"); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataPotionEffect ca) + { + return ca.getAmplifier(); + } + + @Override + public void setA(DataPotionEffect ca, Integer fa) + { + ca.setAmplifier(fa); + } + + @Override + public Integer getB(PotionEffect cb) + { + return cb.getAmplifier(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterPotionEffectColor.java b/src/com/massivecraft/massivecore/item/WriterPotionEffectColor.java new file mode 100644 index 00000000..81b8905d --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterPotionEffectColor.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.Color; +import org.bukkit.potion.PotionEffect; + +public class WriterPotionEffectColor extends WriterAbstractPotionEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterPotionEffectColor i = new WriterPotionEffectColor(); + public static WriterPotionEffectColor get() { return i; } + public WriterPotionEffectColor() + { + super("color"); + this.setConverterTo(ConverterToColor.get()); + this.setConverterFrom(ConverterFromColor.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataPotionEffect ca) + { + return ca.getColor(); + } + + @Override + public void setA(DataPotionEffect ca, Integer fa) + { + ca.setColor(fa); + } + + @Override + public Color getB(PotionEffect cb) + { + return cb.getColor(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterPotionEffectDuraction.java b/src/com/massivecraft/massivecore/item/WriterPotionEffectDuraction.java new file mode 100644 index 00000000..08f0cc2b --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterPotionEffectDuraction.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class WriterPotionEffectDuraction extends WriterAbstractPotionEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterPotionEffectDuraction i = new WriterPotionEffectDuraction(); + public static WriterPotionEffectDuraction get() { return i; } + public WriterPotionEffectDuraction() + { + super("duration"); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataPotionEffect ca) + { + return ca.getDuration(); + } + + @Override + public void setA(DataPotionEffect ca, Integer fa) + { + ca.setDuration(fa); + } + + @Override + public Integer getB(PotionEffect cb) + { + return cb.getDuration(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterPotionEffectId.java b/src/com/massivecraft/massivecore/item/WriterPotionEffectId.java new file mode 100644 index 00000000..0f173fa5 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterPotionEffectId.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class WriterPotionEffectId extends WriterAbstractPotionEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterPotionEffectId i = new WriterPotionEffectId(); + public static WriterPotionEffectId get() { return i; } + public WriterPotionEffectId() + { + super("type"); + this.setConverterTo(ConverterToPotionEffectType.get()); + this.setConverterFrom(ConverterFromPotionEffectType.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataPotionEffect ca) + { + return ca.getId(); + } + + @Override + public void setA(DataPotionEffect ca, Integer fa) + { + ca.setId(fa); + } + + @Override + public PotionEffectType getB(PotionEffect cb) + { + return cb.getType(); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterPotionEffectParticles.java b/src/com/massivecraft/massivecore/item/WriterPotionEffectParticles.java new file mode 100644 index 00000000..9b0afef2 --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterPotionEffectParticles.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.item; + +import org.bukkit.potion.PotionEffect; + +public class WriterPotionEffectParticles extends WriterAbstractPotionEffect +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterPotionEffectParticles i = new WriterPotionEffectParticles(); + public static WriterPotionEffectParticles get() { return i; } + public WriterPotionEffectParticles() + { + super("particles"); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Boolean getA(DataPotionEffect ca) + { + return ca.isParticles(); + } + + @Override + public void setA(DataPotionEffect ca, Boolean fa) + { + ca.setParticles(fa); + } + + @Override + public Boolean getB(PotionEffect cb) + { + return cb.hasParticles(); + } + +} diff --git a/src/com/massivecraft/massivecore/ps/PS.java b/src/com/massivecraft/massivecore/ps/PS.java index 248f63a0..6f4555c9 100644 --- a/src/com/massivecraft/massivecore/ps/PS.java +++ b/src/com/massivecraft/massivecore/ps/PS.java @@ -5,6 +5,7 @@ import java.util.Collection; import java.util.LinkedHashSet; import java.util.Set; import java.util.Map.Entry; +import java.util.Objects; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -17,6 +18,7 @@ import org.bukkit.util.Vector; import com.massivecraft.massivecore.Aspect; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.Multiverse; +import com.massivecraft.massivecore.comparator.ComparatorSmart; import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.xlib.gson.JsonElement; import com.massivecraft.massivecore.xlib.gson.JsonObject; @@ -44,7 +46,7 @@ import com.massivecraft.massivecore.xlib.gson.annotations.SerializedName; * entity: world, locationX, locationY, locationZ, pitch, yaw, velocityX, velocityY, velocityZ */ -public final class PS implements Cloneable, Serializable, Comparable +public final class PS implements Serializable, Comparable { // -------------------------------------------- // // CONSTANTS @@ -905,23 +907,22 @@ public final class PS implements Cloneable, Serializable, Comparable public static int calcHashCode(PS ps) { - final int prime = 31; - int result = 1; - result = prime * result + ((ps.blockX == null) ? 0 : ps.blockX.hashCode()); - result = prime * result + ((ps.blockY == null) ? 0 : ps.blockY.hashCode()); - result = prime * result + ((ps.blockZ == null) ? 0 : ps.blockZ.hashCode()); - result = prime * result + ((ps.chunkX == null) ? 0 : ps.chunkX.hashCode()); - result = prime * result + ((ps.chunkZ == null) ? 0 : ps.chunkZ.hashCode()); - result = prime * result + ((ps.locationX == null) ? 0 : ps.locationX.hashCode()); - result = prime * result + ((ps.locationY == null) ? 0 : ps.locationY.hashCode()); - result = prime * result + ((ps.locationZ == null) ? 0 : ps.locationZ.hashCode()); - result = prime * result + ((ps.pitch == null) ? 0 : ps.pitch.hashCode()); - result = prime * result + ((ps.velocityX == null) ? 0 : ps.velocityX.hashCode()); - result = prime * result + ((ps.velocityY == null) ? 0 : ps.velocityY.hashCode()); - result = prime * result + ((ps.velocityZ == null) ? 0 : ps.velocityZ.hashCode()); - result = prime * result + ((ps.world == null) ? 0 : ps.world.hashCode()); - result = prime * result + ((ps.yaw == null) ? 0 : ps.yaw.hashCode()); - return result; + return Objects.hash( + ps.world, + ps.blockX, + ps.blockY, + ps.blockZ, + ps.locationX, + ps.locationY, + ps.locationZ, + ps.chunkX, + ps.chunkZ, + ps.pitch, + ps.yaw, + ps.velocityX, + ps.velocityY, + ps.velocityZ + ); } // -------------------------------------------- // @@ -929,14 +930,27 @@ public final class PS implements Cloneable, Serializable, Comparable // -------------------------------------------- // @Override - public boolean equals(Object derpObject) + public boolean equals(Object object) { - return equals(this, derpObject); - } - - public static boolean equals(PS herp, Object derpObject) - { - return compareTo(herp, derpObject) == 0; + if ( ! (object instanceof PS)) return false; + PS that = (PS)object; + + return MUtil.equals( + this.world, that.world, + this.blockX, that.blockX, + this.blockY, that.blockY, + this.blockZ, that.blockZ, + this.locationX, that.locationX, + this.locationY, that.locationY, + this.locationZ, that.locationZ, + this.chunkX, that.chunkX, + this.chunkZ, that.chunkZ, + this.pitch, that.pitch, + this.yaw, that.yaw, + this.velocityX, that.velocityX, + this.velocityY, that.velocityY, + this.velocityZ, that.velocityZ + ); } // -------------------------------------------- // @@ -944,75 +958,25 @@ public final class PS implements Cloneable, Serializable, Comparable // -------------------------------------------- // @Override - public int compareTo(PS derp) + public int compareTo(PS that) { - return compareTo(this, derp); - } - - public static int compareTo(PS herp, Object derpObject) - { - if (herp == null && derpObject == null) return 0; - if (herp == null) return -1; - if (derpObject == null) return +1; - - if (!(derpObject instanceof PS)) return -1; - PS derp = (PS) derpObject; - - int ret; - - ret = MUtil.compare(herp.world, derp.world); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.chunkX, derp.chunkX); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.chunkZ, derp.chunkZ); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.blockX, derp.blockX); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.blockY, derp.blockY); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.blockZ, derp.blockZ); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.locationX, derp.locationX); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.locationX, derp.locationX); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.locationZ, derp.locationZ); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.pitch, derp.pitch); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.yaw, derp.yaw); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.velocityX, derp.velocityX); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.velocityY, derp.velocityY); - if (ret != 0) return ret; - - ret = MUtil.compare(herp.velocityZ, derp.velocityZ); - if (ret != 0) return ret; - - return 0; - } - - // -------------------------------------------- // - // CLONE - // -------------------------------------------- // - - @Override - public PS clone() - { - return this; + return ComparatorSmart.get().compare( + this.world, that.world, + this.blockX, that.blockX, + this.blockY, that.blockY, + this.blockZ, that.blockZ, + this.locationX, that.locationX, + this.locationY, that.locationY, + this.locationZ, that.locationZ, + this.chunkX, that.chunkX, + this.chunkZ, that.chunkZ, + this.pitch, that.pitch, + this.yaw, that.yaw, + this.velocityX, that.velocityX, + this.velocityY, that.velocityY, + this.velocityZ, that.velocityZ + ); } } + \ No newline at end of file diff --git a/src/com/massivecraft/massivecore/util/MUtil.java b/src/com/massivecraft/massivecore/util/MUtil.java index 0b187f54..babda48f 100644 --- a/src/com/massivecraft/massivecore/util/MUtil.java +++ b/src/com/massivecraft/massivecore/util/MUtil.java @@ -1662,39 +1662,33 @@ public class MUtil } // -------------------------------------------- // - // LE NICE EQUALS and compare + // EQUALS // -------------------------------------------- // - public static boolean equals(Object herp, Object derp) + public static boolean equals(Object object1, Object object2) { - if (herp == null) return derp == null; - if (derp == null) return false; - return herp.equals(derp); + if (object1 == null) return object2 == null; + if (object2 == null) return false; + return object1.equals(object2); } - public static int compare(Comparable herp, T derp) + public static boolean equals(Object... objects) { - Integer ret = compareNulls(herp, derp); - if (ret != null) return ret; - return herp.compareTo(derp); - } - - public static Integer compareNulls(Object one, Object two) - { - if (one == null && two == null) return 0; - if (one == null) return -1; - if (two == null) return +1; - return null; - } - - public static Integer compareWithList(Object one, Object two, List list) - { - int oneIndex = list.indexOf(one); - int twoIndex = list.indexOf(two); - if (oneIndex != -1 && twoIndex != -1) return oneIndex - twoIndex; - if (oneIndex != -1) return -1; - if (twoIndex != -1) return +1; - return null; + if (objects == null) throw new NullPointerException("objects"); + if (objects.length % 2 != 0) throw new IllegalArgumentException("objects length not even"); + + int index = 1; + while (index < objects.length) + { + Object object1 = objects[index - 1]; + Object object2 = objects[index]; + + if ( ! equals(object1, object2)) return false; + + index += 2; + } + + return true; } // -------------------------------------------- //