44import com .laytonsmith .abstraction .MCAttributeModifier ;
55import com .laytonsmith .abstraction .MCAxolotlBucketMeta ;
66import com .laytonsmith .abstraction .MCBannerMeta ;
7+ import com .laytonsmith .abstraction .MCBlockDataMeta ;
78import com .laytonsmith .abstraction .MCBlockStateMeta ;
89import com .laytonsmith .abstraction .MCBookMeta ;
910import com .laytonsmith .abstraction .MCBrewerInventory ;
@@ -556,6 +557,13 @@ public Construct itemMeta(MCItemStack is, Target t) {
556557 }
557558 ma .set ("inventory" , box , t );
558559 }
560+ } else if (meta instanceof MCBlockDataMeta ) {
561+ MCBlockDataMeta mcbdm = (MCBlockDataMeta ) meta ;
562+ if (mcbdm .hasBlockData ()) {
563+ ma .set ("blockdata" , blockData (mcbdm .getBlockData (is .getType ()), t ), t );
564+ } else {
565+ ma .set ("blockdata" , CNull .NULL , t );
566+ }
559567 } else if (meta instanceof MCFireworkEffectMeta ) {
560568 MCFireworkEffectMeta mcfem = (MCFireworkEffectMeta ) meta ;
561569 MCFireworkEffect effect = mcfem .getEffect ();
@@ -998,6 +1006,14 @@ public MCItemMeta itemMeta(Mixed c, MCMaterial mat, Target t) throws ConfigRunti
9981006 }
9991007 }
10001008 }
1009+ } else if (meta instanceof MCBlockDataMeta ) {
1010+ MCBlockDataMeta mcbdm = (MCBlockDataMeta ) meta ;
1011+ if (ma .containsKey ("blockdata" )) {
1012+ Mixed mBlockData = ma .get ("blockdata" , t );
1013+ if (mBlockData instanceof CArray ) {
1014+ mcbdm .setBlockData (blockData ((CArray ) mBlockData , mat , t ));
1015+ }
1016+ }
10011017 } else if (meta instanceof MCFireworkEffectMeta ) {
10021018 MCFireworkEffectMeta femeta = (MCFireworkEffectMeta ) meta ;
10031019 if (ma .containsKey ("effect" )) {
@@ -2070,16 +2086,20 @@ public MCMaterial material(Mixed name, Target t) {
20702086 }
20712087
20722088 public MCBlockData blockData (CArray ca , Target t ) {
2089+ return blockData (ca , null , t );
2090+ }
2091+
2092+ public MCBlockData blockData (CArray ca , MCMaterial blockType , Target t ) {
20732093 StringBuilder b = new StringBuilder ().append ("[" );
20742094 boolean first = true ;
2095+ String block = null ;
20752096 for (String key : ca .stringKeySet ()) {
20762097 if (key .equals ("block" )) {
2077- String block = ca .get ("block" , t ).val ();
2098+ block = ca .get ("block" , t ).val ();
20782099 if (Character .isUpperCase (block .charAt (0 ))) {
20792100 // support material enum input
20802101 block = block .toLowerCase ();
20812102 }
2082- b .insert (0 , block );
20832103 } else {
20842104 if (first ) {
20852105 first = false ;
@@ -2090,6 +2110,13 @@ public MCBlockData blockData(CArray ca, Target t) {
20902110 }
20912111 }
20922112 b .append ("]" );
2113+ if (block == null ) {
2114+ if (blockType == null ) {
2115+ throw new CREFormatException ("Missing block type for block data." , t );
2116+ }
2117+ block = blockType .name ().toLowerCase ();
2118+ }
2119+ b .insert (0 , block );
20932120 return Static .getServer ().createBlockData (b .toString ());
20942121 }
20952122
0 commit comments