use of com.laytonsmith.abstraction.MCEnchantmentStorageMeta in project CommandHelper by EngineHub.
the class ObjectGenerator method itemMeta.
public MCItemMeta itemMeta(Construct c, MCMaterial mat, Target t) throws ConfigRuntimeException {
MCItemFactory itemFactory = Static.getServer().getItemFactory();
if (itemFactory == null) {
throw new CRENotFoundException("Could not find the internal MCItemFactory object (are you running in cmdline mode?)", t);
}
MCItemMeta meta = itemFactory.getItemMeta(mat);
if (c instanceof CNull) {
return meta;
}
CArray ma;
if (c instanceof CArray) {
ma = (CArray) c;
try {
if (ma.containsKey("display")) {
Construct dni = ma.get("display", t);
if (!(dni instanceof CNull)) {
meta.setDisplayName(dni.val());
}
}
if (ma.containsKey("lore")) {
Construct li = ma.get("lore", t);
if (li instanceof CNull) {
// do nothing
} else if (li instanceof CString) {
List<String> ll = new ArrayList<>();
ll.add(li.val());
meta.setLore(ll);
} else if (li instanceof CArray) {
CArray la = (CArray) li;
List<String> ll = new ArrayList<>();
for (int j = 0; j < la.size(); j++) {
ll.add(la.get(j, t).val());
}
meta.setLore(ll);
} else {
throw new CREFormatException("Lore was expected to be an array or a string.", t);
}
}
if (ma.containsKey("enchants")) {
Construct enchants = ma.get("enchants", t);
if (enchants instanceof CArray) {
for (Map.Entry<MCEnchantment, Integer> ench : enchants((CArray) enchants, t).entrySet()) {
meta.addEnchant(ench.getKey(), ench.getValue(), true);
}
} else {
throw new CREFormatException("Enchants field was expected to be an array of Enchantment arrays", t);
}
}
if (ma.containsKey("repair") && !(ma.get("repair", t) instanceof CNull)) {
meta.setRepairCost(Static.getInt32(ma.get("repair", t), t));
}
// Version specific ItemMeta
if (Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_8)) {
if (ma.containsKey("flags")) {
Construct flags = ma.get("flags", t);
if (flags instanceof CArray) {
CArray flagArray = (CArray) flags;
for (int i = 0; i < flagArray.size(); i++) {
Construct flag = flagArray.get(i, t);
meta.addItemFlags(MCItemFlag.valueOf(flag.getValue().toUpperCase()));
}
} else {
throw new CREFormatException("Itemflags was expected to be an array of flags.", t);
}
}
if (Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_11)) {
if (ma.containsKey("unbreakable")) {
meta.setUnbreakable(Static.getBoolean(ma.get("unbreakable", t), t));
}
}
}
// Specific ItemMeta
if (meta instanceof MCBlockStateMeta) {
MCBlockStateMeta bsm = (MCBlockStateMeta) meta;
MCBlockState bs = bsm.getBlockState();
if (bs instanceof MCShulkerBox) {
if (ma.containsKey("inventory")) {
MCShulkerBox box = (MCShulkerBox) bs;
MCInventory inv = box.getInventory();
Construct csbm = ma.get("inventory", t);
if (csbm instanceof CArray) {
CArray cinv = (CArray) csbm;
for (String key : cinv.stringKeySet()) {
try {
int index = Integer.parseInt(key);
if (index < 0 || index >= inv.getSize()) {
ConfigRuntimeException.DoWarning("Out of range value (" + index + ") found" + " in ShulkerBox inventory array, so ignoring.");
}
MCItemStack is = ObjectGenerator.GetGenerator().item(cinv.get(key, t), t);
inv.setItem(index, is);
} catch (NumberFormatException ex) {
ConfigRuntimeException.DoWarning("Expecting integer value for key in ShulkerBox" + " inventory array, but \"" + key + "\" was found. Ignoring.");
}
}
bsm.setBlockState(bs);
} else if (!(csbm instanceof CNull)) {
throw new CREFormatException("ShulkerBox inventory expected to be an array or null.", t);
}
}
} else if (bs instanceof MCBanner) {
MCBanner banner = (MCBanner) bs;
if (ma.containsKey("basecolor")) {
banner.setBaseColor(MCDyeColor.valueOf(ma.get("basecolor", t).val().toUpperCase()));
}
if (ma.containsKey("patterns")) {
CArray array = ArgumentValidation.getArray(ma.get("patterns", t), t);
for (String key : array.stringKeySet()) {
CArray pattern = ArgumentValidation.getArray(array.get(key, t), t);
MCPatternShape shape = MCPatternShape.valueOf(pattern.get("shape", t).val().toUpperCase());
MCDyeColor color = MCDyeColor.valueOf(pattern.get("color", t).val().toUpperCase());
banner.addPattern(StaticLayer.GetConvertor().GetPattern(color, shape));
}
}
banner.update();
bsm.setBlockState(banner);
} else if (bs instanceof MCCreatureSpawner) {
if (ma.containsKey("spawntype")) {
MCCreatureSpawner mccs = (MCCreatureSpawner) bs;
MCEntityType type = MCEntityType.valueOf(ma.get("spawntype", t).val().toUpperCase());
mccs.setSpawnedType(type);
bsm.setBlockState(bs);
}
}
} else if (meta instanceof MCFireworkEffectMeta) {
MCFireworkEffectMeta femeta = (MCFireworkEffectMeta) meta;
if (ma.containsKey("effect")) {
Construct cfem = ma.get("effect", t);
if (cfem instanceof CArray) {
femeta.setEffect(fireworkEffect((CArray) cfem, t));
} else if (!(cfem instanceof CNull)) {
throw new CREFormatException("FireworkCharge effect was expected to be an array or null.", t);
}
}
} else if (meta instanceof MCFireworkMeta) {
MCFireworkMeta fmeta = (MCFireworkMeta) meta;
if (ma.containsKey("firework")) {
Construct construct = ma.get("firework", t);
if (construct instanceof CArray) {
CArray firework = (CArray) construct;
if (firework.containsKey("strength")) {
fmeta.setStrength(Static.getInt32(firework.get("strength", t), t));
}
if (firework.containsKey("effects")) {
// New style (supports multiple effects)
Construct effects = firework.get("effects", t);
if (effects instanceof CArray) {
for (Construct effect : ((CArray) effects).asList()) {
if (effect instanceof CArray) {
fmeta.addEffect(fireworkEffect((CArray) effect, t));
} else {
throw new CREFormatException("Firework effect was expected to be an array.", t);
}
}
} else {
throw new CREFormatException("Firework effects was expected to be an array.", t);
}
} else {
// Old style (supports only one effect)
fmeta.addEffect(fireworkEffect(firework, t));
}
} else {
throw new CREFormatException("Firework was expected to be an array.", t);
}
}
} else if (meta instanceof MCLeatherArmorMeta) {
if (ma.containsKey("color")) {
Construct ci = ma.get("color", t);
if (ci instanceof CNull) {
// nothing
} else if (ci instanceof CArray) {
((MCLeatherArmorMeta) meta).setColor(color((CArray) ci, t));
} else {
throw new CREFormatException("Color was expected to be an array.", t);
}
}
} else if (meta instanceof MCBookMeta) {
if (ma.containsKey("title")) {
Construct title = ma.get("title", t);
if (!(title instanceof CNull)) {
((MCBookMeta) meta).setTitle(title.val());
}
}
if (ma.containsKey("author")) {
Construct author = ma.get("author", t);
if (!(author instanceof CNull)) {
((MCBookMeta) meta).setAuthor(author.val());
}
}
if (ma.containsKey("pages")) {
Construct pages = ma.get("pages", t);
if (pages instanceof CNull) {
// nothing
} else if (pages instanceof CArray) {
CArray pa = (CArray) pages;
List<String> pl = new ArrayList<>();
for (int j = 0; j < pa.size(); j++) {
pl.add(pa.get(j, t).val());
}
((MCBookMeta) meta).setPages(pl);
} else {
throw new CREFormatException("Pages field was expected to be an array.", t);
}
}
} else if (meta instanceof MCSkullMeta) {
if (ma.containsKey("owneruuid")) {
Construct id = ma.get("owneruuid", t);
if (!(id instanceof CNull)) {
((MCSkullMeta) meta).setOwningPlayer(Static.getServer().getOfflinePlayer(Static.GetUUID(id, t)));
}
} else if (ma.containsKey("owner")) {
Construct owner = ma.get("owner", t);
if (!(owner instanceof CNull)) {
((MCSkullMeta) meta).setOwner(owner.val());
}
}
} else if (meta instanceof MCEnchantmentStorageMeta) {
if (ma.containsKey("stored")) {
Construct stored = ma.get("stored", t);
if (stored instanceof CNull) {
// Still doing nothing
} else if (stored instanceof CArray) {
for (Map.Entry<MCEnchantment, Integer> ench : enchants((CArray) stored, t).entrySet()) {
((MCEnchantmentStorageMeta) meta).addStoredEnchant(ench.getKey(), ench.getValue(), true);
}
} else {
throw new CREFormatException("Stored field was expected to be an array of Enchantment arrays", t);
}
}
} else if (meta instanceof MCPotionMeta) {
if (ma.containsKey("potions")) {
Construct effects = ma.get("potions", t);
if (effects instanceof CArray) {
for (MCLivingEntity.MCEffect e : potions((CArray) effects, t)) {
((MCPotionMeta) meta).addCustomEffect(e.getPotionID(), e.getStrength(), e.getTicksRemaining(), e.isAmbient(), true, t);
}
} else {
throw new CREFormatException("Effects was expected to be an array of potion arrays.", t);
}
}
if (Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_9)) {
if (ma.containsKey("base")) {
Construct potiondata = ma.get("base", t);
if (potiondata instanceof CArray) {
CArray pd = (CArray) potiondata;
((MCPotionMeta) meta).setBasePotionData(potionData((CArray) potiondata, t));
}
}
} else if (ma.containsKey("main")) {
((MCPotionMeta) meta).setMainEffect(Static.getInt32(ma.get("main", t), t));
}
} else if (meta instanceof MCBannerMeta) {
if (ma.containsKey("basecolor")) {
((MCBannerMeta) meta).setBaseColor(MCDyeColor.valueOf(ma.get("basecolor", t).val().toUpperCase()));
}
if (ma.containsKey("patterns")) {
CArray array = ArgumentValidation.getArray(ma.get("patterns", t), t);
for (String key : array.stringKeySet()) {
CArray pattern = ArgumentValidation.getArray(array.get(key, t), t);
MCPatternShape shape = MCPatternShape.valueOf(pattern.get("shape", t).val().toUpperCase());
MCDyeColor color = MCDyeColor.valueOf(pattern.get("color", t).val().toUpperCase());
((MCBannerMeta) meta).addPattern(StaticLayer.GetConvertor().GetPattern(color, shape));
}
}
} else if (meta instanceof MCSpawnEggMeta) {
if (ma.containsKey("spawntype")) {
Construct spawntype = ma.get("spawntype", t);
if (spawntype instanceof CString) {
((MCSpawnEggMeta) meta).setSpawnedType(MCEntityType.valueOf(spawntype.val().toUpperCase()));
}
}
} else if (meta instanceof MCMapMeta && Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_11)) {
if (ma.containsKey("color")) {
Construct ci = ma.get("color", t);
if (ci instanceof CArray) {
((MCMapMeta) meta).setColor(color((CArray) ci, t));
} else if (!(ci instanceof CNull)) {
throw new CREFormatException("Color was expected to be an array.", t);
}
}
}
} catch (Exception ex) {
throw new CREFormatException(ex.getMessage(), t, ex);
}
} else {
throw new CREFormatException("An array was expected but recieved " + c + " instead.", t);
}
return meta;
}
use of com.laytonsmith.abstraction.MCEnchantmentStorageMeta in project CommandHelper by EngineHub.
the class ObjectGenerator method itemMeta.
public Construct itemMeta(MCItemStack is, Target t) {
if (!is.hasItemMeta()) {
return CNull.NULL;
} else {
Construct display, lore;
CArray ma = CArray.GetAssociativeArray(t);
MCItemMeta meta = is.getItemMeta();
if (meta.hasDisplayName()) {
display = new CString(meta.getDisplayName(), t);
} else {
display = CNull.NULL;
}
if (meta.hasLore()) {
lore = new CArray(t);
for (String l : meta.getLore()) {
((CArray) lore).push(new CString(l, t), t);
}
} else {
lore = CNull.NULL;
}
ma.set("display", display, t);
ma.set("lore", lore, t);
ma.set("enchants", enchants(meta.getEnchants(), t), t);
ma.set("repair", new CInt(meta.getRepairCost(), t), t);
// Version specific ItemMeta
if (Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_8)) {
Set<MCItemFlag> itemFlags = meta.getItemFlags();
CArray flagArray = new CArray(t);
if (itemFlags.size() > 0) {
for (MCItemFlag flag : itemFlags) {
flagArray.push(new CString(flag.name(), t), t);
}
}
ma.set("flags", flagArray, t);
if (Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_11)) {
ma.set("unbreakable", CBoolean.get(meta.isUnbreakable()), t);
}
}
// Specific ItemMeta
if (meta instanceof MCBlockStateMeta) {
MCBlockState bs = ((MCBlockStateMeta) meta).getBlockState();
if (bs instanceof MCShulkerBox) {
MCShulkerBox mcsb = (MCShulkerBox) bs;
MCInventory inv = mcsb.getInventory();
CArray box = CArray.GetAssociativeArray(t);
for (int i = 0; i < inv.getSize(); i++) {
Construct item = ObjectGenerator.GetGenerator().item(inv.getItem(i), t);
if (!(item instanceof CNull)) {
box.set(i, item, t);
}
}
ma.set("inventory", box, t);
} else if (bs instanceof MCBanner) {
MCBanner banner = (MCBanner) bs;
CArray patterns = new CArray(t, banner.numberOfPatterns());
for (MCPattern p : banner.getPatterns()) {
CArray pattern = CArray.GetAssociativeArray(t);
pattern.set("shape", new CString(p.getShape().toString(), t), t);
pattern.set("color", new CString(p.getColor().toString(), t), t);
patterns.push(pattern, t);
}
ma.set("patterns", patterns, t);
MCDyeColor dyeColor = banner.getBaseColor();
if (dyeColor != null) {
ma.set("basecolor", new CString(dyeColor.toString(), t), t);
}
} else if (bs instanceof MCCreatureSpawner) {
MCCreatureSpawner mccs = (MCCreatureSpawner) bs;
ma.set("spawntype", mccs.getSpawnedType().name());
}
} else if (meta instanceof MCFireworkEffectMeta) {
MCFireworkEffectMeta mcfem = (MCFireworkEffectMeta) meta;
MCFireworkEffect effect = mcfem.getEffect();
if (effect == null) {
ma.set("effect", CNull.NULL, t);
} else {
ma.set("effect", fireworkEffect(effect, t), t);
}
} else if (meta instanceof MCFireworkMeta) {
MCFireworkMeta mcfm = (MCFireworkMeta) meta;
CArray firework = CArray.GetAssociativeArray(t);
firework.set("strength", new CInt(mcfm.getStrength(), t), t);
CArray fe = new CArray(t);
for (MCFireworkEffect effect : mcfm.getEffects()) {
fe.push(fireworkEffect(effect, t), t);
}
firework.set("effects", fe, t);
ma.set("firework", firework, t);
} else if (meta instanceof MCLeatherArmorMeta) {
CArray color = color(((MCLeatherArmorMeta) meta).getColor(), t);
ma.set("color", color, t);
} else if (meta instanceof MCBookMeta) {
Construct title, author, pages;
if (((MCBookMeta) meta).hasTitle()) {
title = new CString(((MCBookMeta) meta).getTitle(), t);
} else {
title = CNull.NULL;
}
if (((MCBookMeta) meta).hasAuthor()) {
author = new CString(((MCBookMeta) meta).getAuthor(), t);
} else {
author = CNull.NULL;
}
if (((MCBookMeta) meta).hasPages()) {
pages = new CArray(t);
for (String p : ((MCBookMeta) meta).getPages()) {
((CArray) pages).push(new CString(p, t), t);
}
} else {
pages = CNull.NULL;
}
ma.set("title", title, t);
ma.set("author", author, t);
ma.set("pages", pages, t);
} else if (meta instanceof MCSkullMeta) {
if (Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_12_X)) {
if (((MCSkullMeta) meta).hasOwner()) {
MCOfflinePlayer player = ((MCSkullMeta) meta).getOwningPlayer();
ma.set("owner", new CString(player.getName(), t), t);
ma.set("owneruuid", new CString(player.getUniqueID().toString(), t), t);
} else {
ma.set("owner", CNull.NULL, t);
ma.set("owneruuid", CNull.NULL, t);
}
} else {
if (((MCSkullMeta) meta).hasOwner()) {
ma.set("owner", new CString(((MCSkullMeta) meta).getOwner(), t), t);
} else {
ma.set("owner", CNull.NULL, t);
}
}
} else if (meta instanceof MCEnchantmentStorageMeta) {
Construct stored;
if (((MCEnchantmentStorageMeta) meta).hasStoredEnchants()) {
stored = enchants(((MCEnchantmentStorageMeta) meta).getStoredEnchants(), t);
} else {
stored = CNull.NULL;
}
ma.set("stored", stored, t);
} else if (meta instanceof MCPotionMeta) {
MCPotionMeta potionmeta = (MCPotionMeta) meta;
CArray effects = potions(potionmeta.getCustomEffects(), t);
ma.set("potions", effects, t);
if (Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_9)) {
MCPotionData potiondata = potionmeta.getBasePotionData();
if (potiondata != null) {
ma.set("base", potionData(potiondata, t), t);
}
} else if (effects.size() > 0) {
ma.set("main", ((CArray) effects.get(0, t)).get("id", t), t);
}
} else if (meta instanceof MCBannerMeta) {
MCBannerMeta bannermeta = (MCBannerMeta) meta;
CArray patterns = new CArray(t, bannermeta.numberOfPatterns());
for (MCPattern p : bannermeta.getPatterns()) {
CArray pattern = CArray.GetAssociativeArray(t);
pattern.set("shape", new CString(p.getShape().toString(), t), t);
pattern.set("color", new CString(p.getColor().toString(), t), t);
patterns.push(pattern, t);
}
ma.set("patterns", patterns, t);
MCDyeColor dyeColor = bannermeta.getBaseColor();
if (dyeColor != null) {
ma.set("basecolor", new CString(dyeColor.toString(), t), t);
}
} else if (meta instanceof MCSpawnEggMeta) {
MCEntityType spawntype = ((MCSpawnEggMeta) meta).getSpawnedType();
if (spawntype == null) {
ma.set("spawntype", CNull.NULL, t);
} else {
ma.set("spawntype", new CString(spawntype.name(), t), t);
}
} else if (meta instanceof MCMapMeta && Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_11)) {
MCColor mapcolor = ((MCMapMeta) meta).getColor();
Construct color;
if (mapcolor == null) {
color = CNull.NULL;
} else {
color = color(mapcolor, t);
}
ma.set("color", color, t);
}
return ma;
}
}
Aggregations