diff --git a/src/com/massivecraft/massivecore/item/DataItemStack.java b/src/com/massivecraft/massivecore/item/DataItemStack.java index 80bf8ef1..5180f2d1 100644 --- a/src/com/massivecraft/massivecore/item/DataItemStack.java +++ b/src/com/massivecraft/massivecore/item/DataItemStack.java @@ -250,7 +250,6 @@ public class DataItemStack implements Comparable // SINCE: 1.8 // This should really be a list and not a set. // The order matters and is explicitly assigned. - // String, Number, String, Number ... @SerializedName("banner") private MassiveListDef bannerPatterns = null; diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java b/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java index 963a4bf5..26513074 100644 --- a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java +++ b/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMeta.java @@ -1,6 +1,9 @@ package com.massivecraft.massivecore.item; +import org.bukkit.block.Banner; +import org.bukkit.block.BlockState; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.ItemMeta; public abstract class WriterAbstractItemStackMeta extends WriterAbstractItemStack @@ -28,4 +31,46 @@ public abstract class WriterAbstractItemStackMeta extends Writer return itemStack.getItemMeta(); } + // -------------------------------------------- // + // BANNER + // -------------------------------------------- // + + public static Banner getBanner(BlockStateMeta meta, boolean creative) + { + // Null + if (meta == null) return null; + + // Creative + if (!meta.hasBlockState() && !creative) return null; + + // Try + try + { + BlockState ret = meta.getBlockState(); + if ( ! (ret instanceof Banner)) return null; + return (Banner)ret; + } + catch (Exception e) + { + // Catch errors such as: throw new IllegalStateException("Missing blockState for " + material); + return null; + } + } + + public static void setBanner(BlockStateMeta meta, Banner banner) + { + // Null + if (meta == null) return; + if (banner == null) return; + + // Dodge Update NPE + if (banner.getBaseColor() == null) return; + + // Update with Force without Physics + banner.update(true, false); + + // Apply + meta.setBlockState(banner); + } + } diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaState.java b/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaState.java deleted file mode 100644 index 34ba5591..00000000 --- a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaState.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.massivecraft.massivecore.item; - -import org.bukkit.Material; -import org.bukkit.block.BlockState; -import org.bukkit.inventory.meta.BlockStateMeta; -import org.bukkit.inventory.meta.ItemMeta; - -public abstract class WriterAbstractItemStackMetaState extends WriterAbstractItemStackMeta -{ - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public WriterAbstractItemStackMetaState(Class classCB) - { - super(classCB); - - // For the setup to pass we must set a Material with a BlockStateMeta. - this.setMaterial(Material.SHIELD); - } - - // -------------------------------------------- // - // CREATE INNER - // -------------------------------------------- // - - public BlockState createItemMetaState() - { - return createItemMetaState(this.createItemMeta()); - } - - public static BlockState createItemMetaState(ItemMeta itemMeta) - { - if ( ! (itemMeta instanceof BlockStateMeta)) return null; - BlockStateMeta blockStateMeta = (BlockStateMeta)itemMeta; - try - { - return blockStateMeta.getBlockState(); - } - catch (Exception e) - { - // Catch errors such as: throw new IllegalStateException("Missing blockState for " + material); - return null; - } - } - -} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaStateField.java b/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaStateField.java deleted file mode 100644 index 9781fef3..00000000 --- a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaStateField.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.massivecraft.massivecore.item; - -import org.bukkit.block.BlockState; - -public abstract class WriterAbstractItemStackMetaStateField extends WriterAbstractItemStackMetaState -{ - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public WriterAbstractItemStackMetaStateField(Class classCB) - { - super(classCB); - } - - // -------------------------------------------- // - // CREATE - // -------------------------------------------- // - - @Override - public BlockState createOB() - { - return this.createItemMetaState(); - } - -} diff --git a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaStateMorph.java b/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaStateMorph.java deleted file mode 100644 index f946c83b..00000000 --- a/src/com/massivecraft/massivecore/item/WriterAbstractItemStackMetaStateMorph.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.massivecraft.massivecore.item; - -import org.bukkit.block.BlockState; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BlockStateMeta; -import org.bukkit.inventory.meta.ItemMeta; - -public abstract class WriterAbstractItemStackMetaStateMorph extends WriterAbstractItemStackMetaState -{ - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public WriterAbstractItemStackMetaStateMorph() - { - super(BlockState.class); - } - - // -------------------------------------------- // - // CREATE - // -------------------------------------------- // - - @Override - public ItemMeta createOB() - { - return this.createItemMeta(); - } - - // -------------------------------------------- // - // MORPH - // -------------------------------------------- // - - @Override - public BlockState morphB(ItemMeta ob) - { - return createItemMetaState(ob); - } - - // -------------------------------------------- // - // WRITE - // -------------------------------------------- // - - @Override - public void writeInner(DataItemStack oa, ItemMeta ob, DataItemStack ca, BlockState cb, ItemStack d, boolean a2b) - { - super.writeInner(oa, ob, ca, cb, d, a2b); - - // Write Back - if (a2b) - { - BlockStateMeta blockStateMeta = (BlockStateMeta)ob; - blockStateMeta.setBlockState(cb); - } - } - -} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMeta.java b/src/com/massivecraft/massivecore/item/WriterItemStackMeta.java index ffc8841b..a1c144c2 100644 --- a/src/com/massivecraft/massivecore/item/WriterItemStackMeta.java +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMeta.java @@ -54,8 +54,9 @@ public class WriterItemStackMeta extends WriterAbstractItemStackMetaMorph +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaShieldBase i = new WriterItemStackMetaShieldBase(); + public static WriterItemStackMetaShieldBase get() { return i; } + public WriterItemStackMetaShieldBase() + { + super(BlockStateMeta.class); + this.setMaterial(Material.SHIELD); + this.setConverterTo(ConverterToDyeColor.get()); + this.setConverterFrom(ConverterFromDyeColor.get()); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public Integer getA(DataItemStack ca, ItemStack d) + { + return ca.getBannerBase(); + } + + @Override + public void setA(DataItemStack ca, Integer fa, ItemStack d) + { + ca.setBannerBase(fa); + } + + @Override + public DyeColor getB(BlockStateMeta cb, ItemStack d) + { + // Get + boolean creative = false; + Banner banner = getBanner(cb, creative); + if (banner == null) return null; + + // Return + return banner.getBaseColor(); + } + + @Override + public void setB(BlockStateMeta cb, DyeColor fb, ItemStack d) + { + // Get + boolean creative = (fb != null); + Banner banner = getBanner(cb, creative); + if (banner == null) return; + + // Change + banner.setBaseColor(fb); + + // Set + setBanner(cb, banner); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaShieldPatterns.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaShieldPatterns.java new file mode 100644 index 00000000..537180bc --- /dev/null +++ b/src/com/massivecraft/massivecore/item/WriterItemStackMetaShieldPatterns.java @@ -0,0 +1,81 @@ +package com.massivecraft.massivecore.item; + +import java.util.List; + +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.block.Banner; +import org.bukkit.block.banner.Pattern; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BlockStateMeta; + +public class WriterItemStackMetaShieldPatterns extends WriterAbstractItemStackMetaField, List> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final WriterItemStackMetaShieldPatterns i = new WriterItemStackMetaShieldPatterns(); + public static WriterItemStackMetaShieldPatterns get() { return i; } + + public WriterItemStackMetaShieldPatterns() + { + super(BlockStateMeta.class); + this.setMaterial(Material.SHIELD); + this.setConverterTo(ConverterToBannerPatterns.get()); + this.setConverterFrom(ConverterFromBannerPatterns.get()); + this.addDependencyClasses( + WriterBannerPattern.class + ); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + @Override + public List getA(DataItemStack ca, ItemStack d) + { + return ca.getBannerPatterns(); + } + + @Override + public void setA(DataItemStack ca, List fa, ItemStack d) + { + ca.setBannerPatterns(fa); + } + + @Override + public List getB(BlockStateMeta cb, ItemStack d) + { + // Get + boolean creative = false; + Banner banner = getBanner(cb, creative); + if (banner == null) return null; + + // Return + return banner.getPatterns(); + } + + @Override + public void setB(BlockStateMeta cb, List fb, ItemStack d) + { + // Get + boolean creative = (fb != null && !fb.isEmpty()); + Banner banner = getBanner(cb, creative); + if (banner == null) return; + + // Change + banner.setPatterns(fb); + + // Ensure Base + if (banner.getBaseColor() == null && !banner.getPatterns().isEmpty()) + { + banner.setBaseColor(DyeColor.BLACK); + } + + // Set + setBanner(cb, banner); + } + +} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaState.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaState.java deleted file mode 100644 index 2760a828..00000000 --- a/src/com/massivecraft/massivecore/item/WriterItemStackMetaState.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.massivecraft.massivecore.item; - -public class WriterItemStackMetaState extends WriterAbstractItemStackMetaStateMorph -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static final WriterItemStackMetaState i = new WriterItemStackMetaState(); - public static WriterItemStackMetaState get() { return i; } - public WriterItemStackMetaState() - { - this.addWriterClasses( - // SHIELD - WriterItemStackMetaStateShieldBase.class, - WriterItemStackMetaStateShieldPatterns.class - ); - } - -} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaStateShieldBase.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaStateShieldBase.java deleted file mode 100644 index 7db0eefb..00000000 --- a/src/com/massivecraft/massivecore/item/WriterItemStackMetaStateShieldBase.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.massivecraft.massivecore.item; - -import org.bukkit.DyeColor; -import org.bukkit.Material; -import org.bukkit.block.Banner; -import org.bukkit.inventory.ItemStack; - -public class WriterItemStackMetaStateShieldBase extends WriterAbstractItemStackMetaStateField -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static final WriterItemStackMetaStateShieldBase i = new WriterItemStackMetaStateShieldBase(); - public static WriterItemStackMetaStateShieldBase get() { return i; } - public WriterItemStackMetaStateShieldBase() - { - super(Banner.class); - this.setMaterial(Material.SHIELD); - this.setConverterTo(ConverterToDyeColor.get()); - this.setConverterFrom(ConverterFromDyeColor.get()); - } - - // -------------------------------------------- // - // ACCESS - // -------------------------------------------- // - - @Override - public Integer getA(DataItemStack ca, ItemStack d) - { - return ca.getBannerBase(); - } - - @Override - public void setA(DataItemStack ca, Integer fa, ItemStack d) - { - ca.setBannerBase(fa); - } - - @Override - public DyeColor getB(Banner cb, ItemStack d) - { - return cb.getBaseColor(); - } - - @Override - public void setB(Banner cb, DyeColor fb, ItemStack d) - { - cb.setBaseColor(fb); - } - -} diff --git a/src/com/massivecraft/massivecore/item/WriterItemStackMetaStateShieldPatterns.java b/src/com/massivecraft/massivecore/item/WriterItemStackMetaStateShieldPatterns.java deleted file mode 100644 index 17ce01d8..00000000 --- a/src/com/massivecraft/massivecore/item/WriterItemStackMetaStateShieldPatterns.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.massivecraft.massivecore.item; - -import java.util.List; - -import org.bukkit.Material; -import org.bukkit.block.Banner; -import org.bukkit.block.banner.Pattern; -import org.bukkit.inventory.ItemStack; - -public class WriterItemStackMetaStateShieldPatterns extends WriterAbstractItemStackMetaStateField, List> -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static final WriterItemStackMetaStateShieldPatterns i = new WriterItemStackMetaStateShieldPatterns(); - public static WriterItemStackMetaStateShieldPatterns get() { return i; } - - public WriterItemStackMetaStateShieldPatterns() - { - super(Banner.class); - this.setMaterial(Material.SHIELD); - this.setConverterTo(ConverterToBannerPatterns.get()); - this.setConverterFrom(ConverterFromBannerPatterns.get()); - this.addDependencyClasses( - WriterBannerPattern.class - ); - } - - // -------------------------------------------- // - // ACCESS - // -------------------------------------------- // - - @Override - public List getA(DataItemStack ca, ItemStack d) - { - return ca.getBannerPatterns(); - } - - @Override - public void setA(DataItemStack ca, List fa, ItemStack d) - { - ca.setBannerPatterns(fa); - } - - @Override - public List getB(Banner cb, ItemStack d) - { - return cb.getPatterns(); - } - - @Override - public void setB(Banner cb, List fb, ItemStack d) - { - cb.setPatterns(fb); - } - -}