1717 */
1818public class MenuButtonData implements ConfigurationSerializable {
1919
20- private final MenuButton passiveButton ;
21- private final MenuButton activeButton ;
22- private final Map <String , MenuButton > resolveCustomButtons ;
20+ private final Map <String , MenuButton > resolveButtons ;
2321 private final String actionType ;
2422 private final List <String > extra ;
2523
26- private MenuButtonData (@ Nonnull final MenuButton passiveButton , @ Nullable final MenuButton activeButton ,@ Nonnull final Map <String , MenuButton > resolveCustomButtons , @ Nullable String actionType , @ Nullable List <String > extra ) {
27- this .passiveButton = passiveButton ;
28- this .activeButton = activeButton ;
29- this .resolveCustomButtons = resolveCustomButtons ;
24+ private MenuButtonData (@ Nonnull final Map <String , MenuButton > resolveButtons , @ Nullable String actionType , @ Nullable List <String > extra ) {
25+ this .resolveButtons = resolveButtons ;
3026 this .actionType = actionType ;
3127 this .extra = extra ;
3228 }
@@ -38,7 +34,10 @@ private MenuButtonData(@Nonnull final MenuButton passiveButton, @Nullable final
3834 */
3935 @ Nonnull
4036 public MenuButton getPassiveButton () {
41- return passiveButton ;
37+ final MenuButton menuButton = this .resolveButtons .get ("passive" );
38+ if (menuButton != null )
39+ return menuButton ;
40+ return new MenuButton .Builder ("STONE" ).setDisplayName ("&4Not set a default button" ).build ();
4241 }
4342
4443 /**
@@ -48,7 +47,7 @@ public MenuButton getPassiveButton() {
4847 */
4948 @ Nullable
5049 public MenuButton getActiveButton () {
51- return activeButton ;
50+ return this . resolveButtons . get ( "active" ) ;
5251 }
5352
5453 /**
@@ -57,7 +56,7 @@ public MenuButton getActiveButton() {
5756 * @return unmodifiable map containing all custom buttons
5857 */
5958 public Map <String , MenuButton > getCustomButtons () {
60- return Collections .unmodifiableMap (resolveCustomButtons );
59+ return Collections .unmodifiableMap (resolveButtons );
6160 }
6261
6362 /**
@@ -67,8 +66,8 @@ public Map<String, MenuButton> getCustomButtons() {
6766 * @return Returns your set button or null if not find it.
6867 */
6968 @ Nullable
70- public MenuButton getCustomButton (final String name ) {
71- return resolveCustomButtons .get (name );
69+ public MenuButton getCustomButton (final String name ) {
70+ return resolveButtons .get (name );
7271 }
7372
7473 /**
@@ -82,8 +81,8 @@ public MenuButton getCustomButton(final String name) {
8281 */
8382 @ Nonnull
8483 public MenuButton resolveCustomButton (final String name ) {
85- MenuButton menuButton = resolveCustomButtons .get (name );
86- if (menuButton != null )
84+ MenuButton menuButton = resolveButtons .get (name );
85+ if (menuButton != null )
8786 return menuButton ;
8887 return this .getPassiveButton ();
8988 }
@@ -125,19 +124,18 @@ public boolean isActionTypeEqual(String actionType) {
125124 @ Override
126125 public String toString () {
127126 return "MenuButtonData{" +
128- "passive =" + passiveButton +
129- ", active= " + activeButton +
130- ", actionType =" + actionType +
127+ "resolveCustomButtons =" + resolveButtons +
128+ ", actionType=' " + actionType + '\'' +
129+ ", extra =" + extra +
131130 '}' ;
132131 }
133132
134133 @ Nonnull
135134 @ Override
136135 public Map <String , Object > serialize () {
137136 final Map <String , Object > map = new LinkedHashMap <>();
138- map .put ("passive" , this .passiveButton );
139- map .put ("active" , this .activeButton );
140137 if (actionType != null ) map .put ("action_type" , actionType );
138+ if (!resolveButtons .isEmpty ()) map .put ("buttons" , resolveButtons );
141139 return map ;
142140 }
143141
@@ -149,42 +147,33 @@ public Map<String, Object> serialize() {
149147 */
150148 public static MenuButtonData deserialize (final Map <String , Object > map ) {
151149 Map <String , Object > activeData = new LinkedHashMap <>();
152- Map < String , Object > passiveData = new LinkedHashMap <>();
153- Map <String , Map <String , Object >> custom = new HashMap <>();
150+
151+ Map <String , Map <String , Object >> buttons = new HashMap <>();
154152 for (Map .Entry <String , Object > entry : map .entrySet ()) {
155153 final String entryKey = entry .getKey ();
156- if (entryKey .startsWith ("active." )) {
157- String key = entryKey .replace ("active." , "" );
158- activeData .put (key , entry .getValue ());
159- } else if (entryKey .startsWith ("passive." )) {
160- String key = entryKey .replace ("passive." , "" );
161- passiveData .put (key , entry .getValue ());
162- } else {
163- int index = entryKey .indexOf ("." );
164- if (index > 0 ) {
165- String key = entryKey .substring (index + 1 );
166- final String substring = entryKey .substring (0 , index );
167- Map <String , Object > stringObjectMap = custom .get (substring );
168- if (stringObjectMap == null )
169- stringObjectMap = new HashMap <>();
170- stringObjectMap .put (key , entry .getValue ());
171- custom .put (substring , stringObjectMap );
172- }
154+ final int index = entryKey .indexOf ("." );
155+ if (index > 0 ) {
156+ String key = entryKey .substring (index + 1 );
157+ final String substring = entryKey .substring (0 , index );
158+ Map <String , Object > stringObjectMap = buttons .get (substring );
159+ if (stringObjectMap == null )
160+ stringObjectMap = new HashMap <>();
161+ stringObjectMap .put (key , entry .getValue ());
162+ buttons .put (substring , stringObjectMap );
173163 }
174164 }
175165
166+ final Object material = map .get ("material" );
167+ if (material != null ) {
168+ buttons .put ("passive" , map );
169+ }
170+
171+ System .out .println ("buttons keySet " + buttons .keySet ());
172+ System .out .println ("buttons values" + buttons .values ());
176173 Map <String , MenuButton > resolveCustomButton = new HashMap <>();
177- if (! custom .isEmpty ()){
178- custom .forEach ((key , value ) -> resolveCustomButton .put (key , MenuButton .deserialize (value )));
174+ if (! buttons .isEmpty ()) {
175+ buttons .forEach ((key , value ) -> resolveCustomButton .put (key , MenuButton .deserialize (value )));
179176 }
180- MenuButton deserializeActiveData = null ;
181- MenuButton deserializePassiveData ;
182- if (!activeData .isEmpty ())
183- deserializeActiveData = MenuButton .deserialize (activeData );
184- if (!passiveData .isEmpty ())
185- deserializePassiveData = MenuButton .deserialize (passiveData );
186- else
187- deserializePassiveData = MenuButton .deserialize (map );
188177 String actionType = (String ) map .get ("action_type" );
189178 Object extra = map .get ("extra" );
190179 List <String > extras ;
@@ -193,6 +182,6 @@ public static MenuButtonData deserialize(final Map<String, Object> map) {
193182 } else {
194183 extras = Collections .singletonList (extra + "" );
195184 }
196- return new MenuButtonData (deserializePassiveData , deserializeActiveData , resolveCustomButton , actionType , extras );
185+ return new MenuButtonData (resolveCustomButton , actionType , extras );
197186 }
198187}
0 commit comments