StaticComponent - ParzivalExe/guiapi GitHub Wiki

From Overview

StaticComponents are the easiest as they have no features. They are simply a component that, when clicked, doesn't do anything, meaning that it instantly cancels the interaction.

Therefore StaticComponents can be used either for decorations like creating a border around important components with different colored glass or for transferring information to the player by it's Title and Description.

There is however also a different use for StaticComponents you first wouldn't think of as you can add a clickAction with usage of a ClickListener and use a StaticComponent as an easy Button without messing around with Bukkit-Events as using no Bukkit-Events is actually easier in many instances.

Implementation

When you simply need a StaticComponent without any Logic behind it, then implementing a StaticComponent is easier than implementing any other Component. Simply write:

ComponentMeta staticMeta = new ComponentMeta("StaticComponent", new ItemStack(Material.RED_STAINED_GLASS_PANE));
//manipulate staticMeta here
StaticComponent staticComponent = new StaticComponent(staticMeta);
//manipulate staticComponent here
gui.addComponent(staticComponent);

Of course, you can also set a specific place this StaticComponent should be placed at in the Gui by writing: staticComponent.setPlace(4);

That's basically all for the easy implementation of StaticComponent. Now we come to the implementation where we let StaticComponent basically function like a Button

Button-Implementation

Here we can use the exact same code as before, but at the point where we manipulate StaticComponent, we add a ClickListener by calling staticComponent.addClickListener(clickListener); The clickListener here could either be a specific instance/class like the class we are in right now (staticComponent.addClickListener(this);) when we implement ComponentClickAction in this class or we could simply implement all the logic directly by writing:

staticComponent.addClickListener(new ComponentClickAction() {
    @Override
    public boolean onClick(Component component, Player player, Gui gui, InventoryAction action, ClickType clickType) {
        //implement what should happen when StaticComponent is clicked
        return true;
    }
});

The complete explanation on how this works is in chapter Events.

Events

ComponentClickedEvent = fired, when the StaticComponent (or any other Component) is clicked

StaticComponentClickedEvent = fired, when the StaticComponent is clicked

XML-Attributes

title="{Component-Title}" = sets the Title of this Component (example: title="Hello World")

look="{AMOUNT}xID:{DATA}{[DURABILITY]}" = sets the Look of this Component (example: look="3x322:1" or look="3xGOLDEN_APPLE")

description="[{line1}, {line2}...]" = sets the description of this Component (example: description="[This is a Description, with a \,]")

place="{PLACE}" = sets the place this Component should be placed at in the Gui (example: place="4")

Resources

Component-Code: io.github.parzivalExe.guiApi.components.StaticComponent


Great, now you know how to implement a StaticComponent with a few lines. Next Component on the List is FreeSpaceComponent