Properly Support Shield Banners
This commit is contained in:
parent
9312bf860f
commit
4200155719
@ -250,7 +250,6 @@ public class DataItemStack implements Comparable<DataItemStack>
|
|||||||
// SINCE: 1.8
|
// SINCE: 1.8
|
||||||
// This should really be a list and not a set.
|
// This should really be a list and not a set.
|
||||||
// The order matters and is explicitly assigned.
|
// The order matters and is explicitly assigned.
|
||||||
// String, Number, String, Number ...
|
|
||||||
|
|
||||||
@SerializedName("banner")
|
@SerializedName("banner")
|
||||||
private MassiveListDef<DataBannerPattern> bannerPatterns = null;
|
private MassiveListDef<DataBannerPattern> bannerPatterns = null;
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package com.massivecraft.massivecore.item;
|
package com.massivecraft.massivecore.item;
|
||||||
|
|
||||||
|
import org.bukkit.block.Banner;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
public abstract class WriterAbstractItemStackMeta<OB, CB, FA, FB> extends WriterAbstractItemStack<OB, CB, FA, FB>
|
public abstract class WriterAbstractItemStackMeta<OB, CB, FA, FB> extends WriterAbstractItemStack<OB, CB, FA, FB>
|
||||||
@ -28,4 +31,46 @@ public abstract class WriterAbstractItemStackMeta<OB, CB, FA, FB> extends Writer
|
|||||||
return itemStack.getItemMeta();
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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<OB, CB, FA, FB> extends WriterAbstractItemStackMeta<OB, CB, FA, FB>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public WriterAbstractItemStackMetaState(Class<CB> 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
package com.massivecraft.massivecore.item;
|
|
||||||
|
|
||||||
import org.bukkit.block.BlockState;
|
|
||||||
|
|
||||||
public abstract class WriterAbstractItemStackMetaStateField<CB, FA, FB> extends WriterAbstractItemStackMetaState<BlockState, CB, FA, FB>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public WriterAbstractItemStackMetaStateField(Class<CB> classCB)
|
|
||||||
{
|
|
||||||
super(classCB);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CREATE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState createOB()
|
|
||||||
{
|
|
||||||
return this.createItemMetaState();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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<FA, FB> extends WriterAbstractItemStackMetaState<ItemMeta, BlockState, FA, FB>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -54,8 +54,9 @@ public class WriterItemStackMeta extends WriterAbstractItemStackMetaMorph<Object
|
|||||||
WriterItemStackMetaBannerBase.class,
|
WriterItemStackMetaBannerBase.class,
|
||||||
WriterItemStackMetaBannerPatterns.class,
|
WriterItemStackMetaBannerPatterns.class,
|
||||||
|
|
||||||
// STATE
|
// SHIELD
|
||||||
WriterItemStackMetaState.class,
|
WriterItemStackMetaShieldBase.class,
|
||||||
|
WriterItemStackMetaShieldPatterns.class,
|
||||||
|
|
||||||
// POTION
|
// POTION
|
||||||
WriterItemStackMetaPotion.class
|
WriterItemStackMetaPotion.class
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
package com.massivecraft.massivecore.item;
|
||||||
|
|
||||||
|
import org.bukkit.DyeColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Banner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||||
|
|
||||||
|
public class WriterItemStackMetaShieldBase extends WriterAbstractItemStackMetaField<BlockStateMeta, Integer, DyeColor>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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<BlockStateMeta, List<DataBannerPattern>, List<Pattern>>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// 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<DataBannerPattern> getA(DataItemStack ca, ItemStack d)
|
||||||
|
{
|
||||||
|
return ca.getBannerPatterns();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setA(DataItemStack ca, List<DataBannerPattern> fa, ItemStack d)
|
||||||
|
{
|
||||||
|
ca.setBannerPatterns(fa);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Pattern> 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<Pattern> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,20 +0,0 @@
|
|||||||
package com.massivecraft.massivecore.item;
|
|
||||||
|
|
||||||
public class WriterItemStackMetaState extends WriterAbstractItemStackMetaStateMorph<Object, Object>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE & CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static final WriterItemStackMetaState i = new WriterItemStackMetaState();
|
|
||||||
public static WriterItemStackMetaState get() { return i; }
|
|
||||||
public WriterItemStackMetaState()
|
|
||||||
{
|
|
||||||
this.addWriterClasses(
|
|
||||||
// SHIELD
|
|
||||||
WriterItemStackMetaStateShieldBase.class,
|
|
||||||
WriterItemStackMetaStateShieldPatterns.class
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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<Banner, Integer, DyeColor>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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<Banner, List<DataBannerPattern>, List<Pattern>>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// 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<DataBannerPattern> getA(DataItemStack ca, ItemStack d)
|
|
||||||
{
|
|
||||||
return ca.getBannerPatterns();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setA(DataItemStack ca, List<DataBannerPattern> fa, ItemStack d)
|
|
||||||
{
|
|
||||||
ca.setBannerPatterns(fa);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Pattern> getB(Banner cb, ItemStack d)
|
|
||||||
{
|
|
||||||
return cb.getPatterns();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setB(Banner cb, List<Pattern> fb, ItemStack d)
|
|
||||||
{
|
|
||||||
cb.setPatterns(fb);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user