Crossfire JXClient, Trunk  R20561
CommandParser.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff.
19  * Copyright (C) 2006-2011 Andreas Kirschbaum.
20  */
21 
22 package com.realtime.crossfire.jxclient.skin.io;
23 
74 import java.awt.Component;
75 import java.io.IOException;
76 import java.io.LineNumberReader;
77 import org.jetbrains.annotations.NotNull;
78 import org.jetbrains.annotations.Nullable;
79 
85 public class CommandParser {
86 
90  @NotNull
91  private final Dialogs dialogs;
92 
96  @NotNull
97  private final FloorView floorView;
98 
102  @NotNull
104 
111  public CommandParser(@NotNull final Dialogs dialogs, @NotNull final FloorView floorView, @NotNull final JXCSkinCache<AbstractGUIElement> definedGUIElements) {
112  this.dialogs = dialogs;
113  this.floorView = floorView;
114  this.definedGUIElements = definedGUIElements;
115  }
116 
133  @NotNull
134  public GUICommand parseCommandArgs(@NotNull final Args args, @Nullable final AbstractGUIElement element, @NotNull final String command, @NotNull final GuiStateManager guiStateManager, @NotNull final CommandExecutor commandExecutor, @NotNull final LineNumberReader lnr, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros) throws IOException, JXCSkinException {
135  if (command.equals("SHOW")) {
136  return parseShow(element);
137  }
138  if (command.equals("HIDE")) {
139  return parseHide(element);
140  }
141  if (command.equals("TOGGLE")) {
142  return parseToggle(element);
143  }
144  if (command.equals("PRINT")) {
145  return parsePrint(element);
146  }
147  if (command.equals("QUIT")) {
148  return parseQuit(element, commandCallback);
149  }
150  if (command.equals("CONNECT")) {
151  return parseConnect(element, guiStateManager);
152  }
153  if (command.equals("DISCONNECT")) {
154  return parseDisconnect(element, guiStateManager);
155  }
156  if (command.equals("GUI_META")) {
157  return parseGuiMeta(element, guiStateManager);
158  }
159  if (command.equals("GUI_START")) {
160  return parseGuiStart(element, guiStateManager);
161  }
162  if (command.equals("GUI_EXECUTE_ELEMENT")) {
163  return parseGuiExecuteElement(element);
164  }
165  if (command.equals("DIALOG_OPEN")) {
166  return parseDialogOpen(args, element, commandCallback);
167  }
168  if (command.equals("DIALOG_TOGGLE")) {
169  return parseDialogToggle(args, element, commandCallback);
170  }
171  if (command.equals("DIALOG_CLOSE")) {
172  return parseDialogClose(args, element, commandCallback);
173  }
174  if (command.equals("GUI_EXECUTE_COMMAND")) {
175  return parseGuiExecuteCommand(args, element, commandExecutor, lnr, macros);
176  }
177  if (command.equals("EXEC_SELECTION")) {
178  return parseExecSelection(args, element, commandQueue, crossfireServerConnection);
179  }
180  if (command.equals("MOVE_SELECTION")) {
181  return parseMoveSelection(args, element);
182  }
183  if (command.equals("SCROLL_LIST")) {
184  return parseScrollList(args, element);
185  }
186  if (command.equals("SCROLL") || command.equals("SCROLL_NEVER")) {
187  return parseScroll(args, element, command.equals("SCROLL"));
188  }
189  if (command.equals("SCROLL_RESET")) {
190  return parseScrollReset(element);
191  }
192  if (command.equals("MOVE_FOCUS")) {
193  return parseMoveFocus(args, element);
194  }
195  if (command.equals("ACCOUNT_LOGIN")) {
196  return parseAccountLogin(element, commandCallback);
197  }
198  if (command.equals("ACCOUNT_CREATE")) {
199  return parseAccountCreate(element, commandCallback);
200  }
201  if (command.equals("ACCOUNT_PLAY")) {
202  return parseAccountPlay(element, commandCallback);
203  }
204  if (command.equals("ACCOUNT_LINK")) {
205  return parseAccountLink(element, commandCallback);
206  }
207  if (command.equals("ACCOUNT_CREATE_CHARACTER")) {
208  return parseAccountCreateCharacter(element, commandCallback);
209  }
210  if (command.equals("ACCOUNT_PASSWORD")) {
211  return parseAccountPassword(element, commandCallback);
212  }
213  if (command.equals("SELECT")) {
214  return parseSelect(args, element);
215  }
216  throw new JXCSkinException("unknown command '"+command+"'");
217  }
218 
225  @NotNull
226  private static GUICommand parseShow(@Nullable final Component element) throws IOException {
227  if (element == null) {
228  throw new IOException("<element> is required");
229  }
230 
231  return new ShowCommand(element);
232  }
233 
240  @NotNull
241  private static GUICommand parseHide(@Nullable final Component element) throws IOException {
242  if (element == null) {
243  throw new IOException("<element> is required");
244  }
245 
246  return new HideCommand(element);
247  }
248 
255  @NotNull
256  private static GUICommand parseToggle(@Nullable final Component element) throws IOException {
257  if (element == null) {
258  throw new IOException("<element> is required");
259  }
260 
261  return new ToggleCommand(element);
262  }
263 
270  @NotNull
271  private static GUICommand parsePrint(@Nullable final GUIElement element) throws IOException {
272  //noinspection VariableNotUsedInsideIf
273  if (element != null) {
274  throw new IOException("<element> is not allowed");
275  }
276 
277  return new PrintCommand();
278  }
279 
287  @NotNull
288  private static GUICommand parseQuit(@Nullable final GUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
289  //noinspection VariableNotUsedInsideIf
290  if (element != null) {
291  throw new IOException("<element> is not allowed");
292  }
293 
294  return new QuitCommand(commandCallback);
295  }
296 
304  @NotNull
305  private static GUICommand parseConnect(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager) throws IOException {
306  if (element == null) {
307  throw new IOException("<element> is required");
308  }
309 
310  if (!(element instanceof GUIText)) {
311  throw new IOException("'"+element+"' must be an input field");
312  }
313 
314  return new ConnectCommand(guiStateManager, (GUIText)element);
315  }
316 
324  @NotNull
325  private static GUICommand parseDisconnect(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager) throws IOException {
326  //noinspection VariableNotUsedInsideIf
327  if (element != null) {
328  throw new IOException("<element> is not allowed");
329  }
330 
331  return new DisconnectCommand(guiStateManager);
332  }
333 
341  @NotNull
342  private static GUICommand parseGuiMeta(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager) throws IOException {
343  //noinspection VariableNotUsedInsideIf
344  if (element != null) {
345  throw new IOException("<element> is not allowed");
346  }
347 
348  return new MetaCommand(guiStateManager);
349  }
350 
358  @NotNull
359  private static GUICommand parseGuiStart(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager) throws IOException {
360  //noinspection VariableNotUsedInsideIf
361  if (element != null) {
362  throw new IOException("<element> is not allowed");
363  }
364 
365  return new StartCommand(guiStateManager);
366  }
367 
374  @NotNull
375  private static GUICommand parseGuiExecuteElement(@Nullable final GUIElement element) throws IOException {
376  if (element == null) {
377  throw new IOException("<element> is required");
378  }
379 
380  if (!(element instanceof GUIItem)) {
381  throw new IOException("'"+element+"' must be an item element");
382  }
383 
384  return new ExecuteElementCommand((GUIItem)element);
385  }
386 
395  @NotNull
396  private GUICommand parseDialogOpen(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
397  //noinspection VariableNotUsedInsideIf
398  if (element != null) {
399  throw new IOException("<element> is not allowed");
400  }
401 
402  final String name = args.get();
403  dialogs.addDialog(name);
404  return new DialogOpenCommand(commandCallback, name);
405  }
406 
415  @NotNull
416  private GUICommand parseDialogToggle(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
417  //noinspection VariableNotUsedInsideIf
418  if (element != null) {
419  throw new IOException("<element> is not allowed");
420  }
421 
422  final String name = args.get();
423  dialogs.addDialog(name);
424  return new DialogToggleCommand(commandCallback, name);
425  }
426 
435  @NotNull
436  private GUICommand parseDialogClose(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
437  //noinspection VariableNotUsedInsideIf
438  if (element != null) {
439  throw new IOException("<element> is not allowed");
440  }
441 
442  final String name = args.get();
443  dialogs.addDialog(name);
444  return new DialogCloseCommand(commandCallback, name);
445  }
446 
457  @NotNull
458  private static GUICommand parseGuiExecuteCommand(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandExecutor commandExecutor, @NotNull final LineNumberReader lnr, @NotNull final Macros macros) throws IOException {
459  //noinspection VariableNotUsedInsideIf
460  if (element != null) {
461  throw new IOException("<element> is not allowed");
462  }
463 
464  final String commandString = ParseUtils.parseText(args, lnr);
465  return new ExecuteCommandCommand(commandExecutor, commandString, macros);
466  }
467 
477  @NotNull
478  private GUICommand parseExecSelection(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection crossfireServerConnection) throws IOException {
479  final CommandType commandType = NumberParser.parseEnum(CommandType.class, args.get(), "command name");
480 
481  if (element == null) {
482  throw new IOException("<element> is required");
483  }
484 
485  if (!(element instanceof GUIItemList)) {
486  throw new IOException("'"+element+"' must be an item list");
487  }
488 
489  return new ExecSelectionCommand((GUIItemList<?>)element, commandType, crossfireServerConnection, floorView, commandQueue);
490  }
491 
499  @NotNull
500  private static GUICommand parseMoveSelection(@NotNull final Args args, @Nullable final GUIElement element) throws IOException {
501  final int diffLines = ExpressionParser.parseInt(args.get());
502  final int diffElements = ExpressionParser.parseInt(args.get());
503  if (diffLines == 0 && diffElements == 0) {
504  throw new IOException("Invalid zero scroll distance");
505  }
506 
507  if (element == null) {
508  throw new IOException("<element> is required");
509  }
510 
511  if (!(element instanceof GUIList)) {
512  throw new IOException("'"+element+"' must be a list");
513  }
514 
515  return new MoveSelectionCommand((GUIList<?>)element, diffLines, diffElements);
516  }
517 
525  @NotNull
526  private static GUICommand parseScrollList(@NotNull final Args args, @Nullable final GUIElement element) throws IOException {
527  final int distance = ExpressionParser.parseInt(args.get());
528  if (distance == 0) {
529  throw new IOException("Invalid zero scroll distance");
530  }
531 
532  if (element == null) {
533  throw new IOException("<element> is required");
534  }
535 
536  if (!(element instanceof GUIScrollable)) {
537  throw new IOException("'"+element+"' must be a scrollable");
538  }
539 
540  return new ScrollListCommand((GUIScrollable)element, distance);
541  }
542 
552  @NotNull
553  private static GUICommand parseScroll(@NotNull final Args args, @Nullable final GUIElement element, final boolean isScroll) throws IOException {
554  final int distance = ExpressionParser.parseInt(args.get());
555  if (distance == 0) {
556  throw new IOException("Invalid zero scroll distance");
557  }
558 
559  if (element == null) {
560  throw new IOException("<element> is required");
561  }
562 
563  if (!(element instanceof GUIScrollable)) {
564  throw new IOException("'"+element+"' must be a scrollable element");
565  }
566 
567  return isScroll ? new ScrollCommand(distance, (GUIScrollable)element) : new ScrollNeverCommand(distance, (GUIScrollable)element);
568  }
569 
576  @NotNull
577  private static GUICommand parseScrollReset(@Nullable final GUIElement element) throws IOException {
578  if (element == null) {
579  throw new IOException("<element> is required");
580  }
581 
582  if (!(element instanceof GUIScrollable)) {
583  throw new IOException("'"+element+"' must be a scrollable element");
584  }
585 
586  return new ScrollResetCommand((GUIScrollable)element);
587  }
588 
597  @NotNull
598  private GUICommand parseMoveFocus(@NotNull final Args args, @Nullable final GUIElement element) throws IOException, JXCSkinException {
599  final Object nextElement = definedGUIElements.lookup(args.get());
600  if (!(nextElement instanceof ActivatableGUIElement)) {
601  throw new IOException("'"+args.getPrev()+"' cannot become active");
602  }
603 
604  final int apply = args.hasMore() ? ExpressionParser.parseInt(args.get()) : 0;
605  if (apply != 0 && apply != 1) {
606  throw new IOException("<apply> must be 0 or 1");
607  }
608 
609  if (element == null) {
610  throw new IOException("<element> is required");
611  }
612 
613  if (!(element instanceof ActivatableGUIElement)) {
614  throw new IOException("'"+element+"' cannot become active");
615  }
616 
617  return new ScrollNextCommand((ActivatableGUIElement)nextElement, (ActivatableGUIElement)element, apply != 0);
618  }
619 
627  @NotNull
628  private static GUICommand parseAccountLogin(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
629  if (element == null) {
630  throw new IOException("<element> is required");
631  }
632 
633  return new AccountLoginCommand(commandCallback, element);
634  }
635 
643  @NotNull
644  private static GUICommand parseAccountCreate(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
645  if (element == null) {
646  throw new IOException("<element> is required");
647  }
648 
649  return new AccountCreateCommand(commandCallback, element);
650  }
651 
659  @NotNull
660  private static GUICommand parseAccountPlay(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
661  if (element == null) {
662  throw new IOException("<element> is required");
663  }
664 
665  return new AccountPlayCharacterCommand(commandCallback, element);
666  }
667 
675  @NotNull
676  private static GUICommand parseAccountLink(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
677  if (element == null) {
678  throw new IOException("<element> is required");
679  }
680 
681  return new AccountLinkCharacterCommand(commandCallback, element);
682  }
683 
691  @NotNull
692  private static GUICommand parseAccountCreateCharacter(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
693  if (element == null) {
694  throw new IOException("<element> is required");
695  }
696 
697  return new AccountCreateCharacterCommand(commandCallback, element);
698  }
699 
707  @NotNull
708  private static GUICommand parseAccountPassword(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback) throws IOException {
709  if (element == null) {
710  throw new IOException("<element> is required");
711  }
712 
713  return new AccountPasswordCommand(commandCallback, element);
714  }
715 
723  @NotNull
724  private static GUICommand parseSelect(@NotNull final Args args, @Nullable final GUIElement element) throws IOException {
725  final boolean selected = NumberParser.parseBoolean(args.get());
726 
727  if (element == null) {
728  throw new IOException("<element> is required");
729  }
730 
731  if (!(element instanceof GUISelectable)) {
732  throw new IOException("'"+element+"' must be a selectable element");
733  }
734 
735  return new SelectCommand((GUISelectable)element, selected);
736  }
737 
738 }
static GUICommand parseSelect(@NotNull final Args args, @Nullable final GUIElement element)
Parses and builds a "SELECT" command.
static GUICommand parseGuiExecuteCommand(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandExecutor commandExecutor, @NotNull final LineNumberReader lnr, @NotNull final Macros macros)
Parses and builds a "GUI_EXECUTE_COMMAND" command.
A GUICommand which moves the selected element in a GUIList element.
A GUICommand which connects to a Crossfire server.
GUICommand parseDialogClose(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds a "DIALOG_CLOSE" command.
final FloorView floorView
The FloorView to use.
A GUICommand which executes (i.e., simulates a left-button mouse click on) an GUIItem.
static GUICommand parseMoveSelection(@NotNull final Args args, @Nullable final GUIElement element)
Parses and builds a "MOVE_SELECTION" command.
A GUICommand sending an account login request to the server.
GUICommand parseExecSelection(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection crossfireServerConnection)
Parses and builds a "" command.
static GUICommand parsePrint(@Nullable final GUIElement element)
Parses and builds a "PRINT" command.
static GUICommand parseShow(@Nullable final Component element)
Parses and builds a "SHOW" command.
GUICommand parseDialogOpen(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds a "DIALOG_OPEN" command.
GUICommand parseMoveFocus(@NotNull final Args args, @Nullable final GUIElement element)
Parses and builds a "MOVE_FOCUS" command.
Gui addDialog(@NotNull final String name)
Creates a new dialog instance.
Definition: Dialogs.java:91
static< T extends Enum< T > T parseEnum(@NotNull final Class< T > class_, @NotNull final String name, @NotNull final String ident)
Parses an enum constant.
A GUICommand which shows the start screen.
static int parseInt(@NotNull final String str)
Parses an integer constant.
A GUIElement representing an in-game object.
Definition: GUIItem.java:38
static GUICommand parseAccountLogin(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds an "ACCOUNT_LOGIN" command.
CommandParser(@NotNull final Dialogs dialogs, @NotNull final FloorView floorView, @NotNull final JXCSkinCache< AbstractGUIElement > definedGUIElements)
Creates a new instance.
Utility class for parsing string parameters into values.
Definition: ParseUtils.java:41
A GUICommand which toggles the visibility of a dialog.
A GUICommand which scrolls a GUIScrollable instance.
static GUICommand parseDisconnect(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager)
Parses and builds a "DISCONNECT" command.
static GUICommand parseGuiStart(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager)
Parses and builds a "GUI_START" command.
static GUICommand parseQuit(@Nullable final GUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds a "QUIT" command.
Interface defining an abstract GUI element.
Definition: GUIElement.java:32
Manages macro expansion in command strings.
Definition: Macros.java:37
A GUIElement that can be set to active or inactive.
final JXCSkinCache< AbstractGUIElement > definedGUIElements
The defined GUI elements.
static GUICommand parseScroll(@NotNull final Args args, @Nullable final GUIElement element, final boolean isScroll)
Parses and builds a "SCROLL" or "SCROLL_NEVER command.
A GUICommand sending a request to link a character to an account.
A GUICommand which transfers the focus between two gui elements.
static GUICommand parseGuiExecuteElement(@Nullable final GUIElement element)
Parses and builds a "GUI_EXECUTE_ELEMENT" command.
A GUICommand which shows a target GUIElement.
static GUICommand parseAccountPlay(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds an "ACCOUNT_PLAY" command.
A GUIList instance that displays GUIItemItem instances.
static boolean parseBoolean(@NotNull final String str)
Parses a boolean constant.
Interface that defines callback functions needed by commands.
A GUICommand which resets the scroll position of a GUIScrollable.
final Dialogs dialogs
The Dialogs instance to use.
static GUICommand parseConnect(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager)
Parses and builds a "CONNECT" command.
A GUICommand which toggles the visibility of a target GUIElement.
A GUICommand which scrolls a target GUIScrollable gui element if executed but always reports that scr...
A GUICommand sending an account password change request.
A GUICommand for selecting or deselecting a GUIElement.
static GUICommand parseHide(@Nullable final Component element)
Parses and builds a "HIDE" command.
Implements a cache for elements identified by name.
Utility class for parsing strings into numbers.
Exception thrown if a skin related problem occurs.
static GUICommand parseToggle(@Nullable final Component element)
Parses and builds a "TOGGLE" command.
A GUICommand that executes a command on the selected item of a GUIItemList.
A GUICommand which shows the server selection screen.
static GUICommand parseAccountLink(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds an "ACCOUNT_LINK" command.
Abstract base class for GUI elements to be shown in Guis.
Adds encoding/decoding of crossfire protocol packets to a ServerConnection.
static GUICommand parseScrollReset(@Nullable final GUIElement element)
Parses and builds a "SCROLL_RESET" command.
Maintains the pending (ncom) commands sent to the server.
A GUICommand which hides a target GUIElement.
A GUICommand sending an account creation request.
A GUICommand sending a play character request to the server.
static GUICommand parseAccountCreate(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds an "ACCOUNT_CREATE" command.
A GUICommand which disconnects from the Crossfire server.
static GUICommand parseScrollList(@NotNull final Args args, @Nullable final GUIElement element)
Parses and builds a "SCROLL_LIST" command.
static GUICommand parseAccountCreateCharacter(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds an "ACCOUNT_CREATE_CHARACTER" command.
Parser for creating GUICommand instances from string representations.
static String parseText(@NotNull final Args args, @NotNull final LineNumberReader lnr)
Concatenates trailing arguments into a string.
A GUIElement that displays a list of entries.
Definition: GUIList.java:54
GUICommand parseCommandArgs(@NotNull final Args args, @Nullable final AbstractGUIElement element, @NotNull final String command, @NotNull final GuiStateManager guiStateManager, @NotNull final CommandExecutor commandExecutor, @NotNull final LineNumberReader lnr, @NotNull final CommandQueue commandQueue, @NotNull final CrossfireServerConnection crossfireServerConnection, @NotNull final CommandCallback commandCallback, @NotNull final Macros macros)
Parses and builds command arguments.
GUICommand parseDialogToggle(@NotNull final Args args, @Nullable final GUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds a "DIALOG_TOGGLE" command.
Maintains a set of Gui instances representing dialog windows.
Definition: Dialogs.java:38
T lookup(@NotNull final String name)
Looks up an element by name.
A GUICommand which scrolls a GUIScrollable gui element by a given distance.
static GUICommand parseAccountPassword(@Nullable final AbstractGUIElement element, @NotNull final CommandCallback commandCallback)
Parses and builds an "ACCOUNT_PASSWORD" command.
Interface for GUIElements that support scrolling.
Abstract base class for text input fields.
Definition: GUIText.java:57
Provides a view to all items comprising the current floor view.
Definition: FloorView.java:35
static GUICommand parseGuiMeta(@Nullable final GUIElement element, @NotNull final GuiStateManager guiStateManager)
Parses and builds a "GUI_META" command.