Class MerchantGui

All Implemented Interfaces:
InventoryBased, InventoryHolder

public class MerchantGui extends NamedGui implements InventoryBased
Represents a gui in the form of a merchant.
Since:
0.10.0
  • Constructor Details

    • MerchantGui

      public MerchantGui(@NotNull @NotNull String title)
      Creates a merchant gui with the given title.
      Parameters:
      title - the title
      Since:
      0.10.0
    • MerchantGui

      public MerchantGui(@NotNull @NotNull com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder title)
      Creates a merchant gui with the given title.
      Parameters:
      title - the title
      Since:
      0.10.0
    • MerchantGui

      public MerchantGui(@NotNull @NotNull String title, @NotNull @NotNull Plugin plugin)
      Constructs a new merchant gui for the given plugin.
      Parameters:
      title - the title/name of this gui.
      plugin - the owning plugin of this gui
      Since:
      0.10.8
      See Also:
    • MerchantGui

      public MerchantGui(@NotNull @NotNull com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder title, @NotNull @NotNull Plugin plugin)
      Constructs a new merchant gui for the given plugin.
      Parameters:
      title - the title/name of this gui.
      plugin - the owning plugin of this gui
      Since:
      0.10.8
      See Also:
  • Method Details

    • setOnTradeSelect

      public void setOnTradeSelect(@Nullable @Nullable Consumer<? super TradeSelectEvent> onTradeSelect)
      Set the consumer that should be called whenever a trade is selected in this gui.
      Parameters:
      onTradeSelect - the consumer that gets called
    • callOnTradeSelect

      public void callOnTradeSelect(@NotNull @NotNull TradeSelectEvent event)
      Calls the consumer (if it's not null) that was specified using setOnTradeSelect(Consumer), so the consumer that should be called whenever a trade is selected in this gui. Catches and logs all exceptions the consumer might throw.
      Parameters:
      event - the event to handle
    • initializeOrThrow

      protected void initializeOrThrow(@NotNull @NotNull Object instance, @NotNull @NotNull Element element)
      Description copied from class: Gui
      Initializes standard fields from a Gui from a given input stream. Throws a RuntimeException instead of returning null in case of a failure.
      Overrides:
      initializeOrThrow in class Gui
      Parameters:
      instance - the class instance for all reflection lookups
      element - the gui element
      See Also:
    • update

      public void update()
      Description copied from class: Gui
      Update the gui for everyone
      Specified by:
      update in class Gui
    • getItems

      @NotNull @Contract(pure=true) public @NotNull Iterable<? extends GuiItem> getItems()
      Description copied from class: Gui
      Gets all the GuiItem instances in this gui.
      Specified by:
      getItems in class Gui
      Returns:
      all gui items
    • show

      public void show(@NotNull @NotNull HumanEntity humanEntity)
      Description copied from class: Gui
      Shows a gui to a player
      Specified by:
      show in class Gui
      Parameters:
      humanEntity - the human entity to show the gui to
    • copy

      @NotNull public @NotNull Gui copy()
      Description copied from class: Gui
      Makes a copy of this gui and returns it. This makes a deep copy of the gui. This entails that the underlying panes will be copied as per their Pane.copy() and miscellaneous data will be copied. The copy of this gui, will however have no viewers even if this gui currently has viewers. With this, cache data for viewers will also be non-existent for the copied gui. The original owning plugin of the gui is preserved, but the plugin will not be deeply copied. The returned gui will never be reference equal to the current gui.
      Specified by:
      copy in class Gui
      Returns:
      a copy of the gui
    • click

      public void click(@NotNull @NotNull InventoryClickEvent event)
      Description copied from class: Gui
      This should delegate the provided inventory click event to the right pane, which can then handle this click event further. This should not call any internal click handlers, since those will already have been activated.
      Specified by:
      click in class Gui
      Parameters:
      event - the event to delegate
    • getInventory

      @NotNull public @NotNull Inventory getInventory()
      Specified by:
      getInventory in interface InventoryHolder
    • createInventory

      @NotNull @Contract(pure=true) public @NotNull Inventory createInventory()
      Description copied from interface: InventoryBased
      Creates a new inventory of the type of the implementing class.
      Specified by:
      createInventory in interface InventoryBased
      Returns:
      the new inventory
    • addTrade

      public void addTrade(@NotNull @NotNull MerchantRecipe recipe, int discount)
      Adds a trade to this gui. The specified discount is the difference between the old price and the new price. For example, if a price was decreased from five to two, the discount would be three.
      Parameters:
      recipe - the recipe to add
      discount - the discount
      Since:
      0.10.1
    • setExperience

      public void setExperience(int experience)
      Sets the experience of this merchant gui. Setting the experience will make the experience bar visible, even if the amount of experience is zero. Note that if the level of this merchant gui has not been set via setLevel(int) that the experience will always show as zero even when set to something else. Experience must be greater than or equal to zero. Attempting to set the experience to below zero will throw an IllegalArgumentException.
      Parameters:
      experience - the experience to set
      Throws:
      IllegalArgumentException - when the experience is below zero
      Since:
      0.10.1
    • setLevel

      public void setLevel(int level)
      Sets the level of this merchant gui. This is a value between one and five and will visibly change the gui by appending the level of the villager to the title. These are displayed as "Novice", "Apprentice", "Journeyman", "Expert" and "Master" respectively (when the player's locale is set to English). When an argument is supplied that is not within one and five, an IllegalArgumentException will be thrown.
      Parameters:
      level - the numeric level
      Throws:
      IllegalArgumentException - when the level is not between one and five
      Since:
      0.10.1
    • addTrade

      public void addTrade(@NotNull @NotNull MerchantRecipe recipe)
      Adds a trade to this gui. This will not set a discount on the trade. For specifiying discounts, see addTrade(MerchantRecipe, int).
      Parameters:
      recipe - the recipe to add
      Since:
      0.10.0
    • isPlayerInventoryUsed

      public boolean isPlayerInventoryUsed()
      Description copied from class: Gui
      Gets whether the player inventory is currently in use. This means whether the player inventory currently has an item in it.
      Specified by:
      isPlayerInventoryUsed in class Gui
      Returns:
      true if the player inventory is occupied, false otherwise
    • getViewerCount

      @Contract(pure=true) public int getViewerCount()
      Description copied from class: Gui
      Gets the count of HumanEntity instances that are currently viewing this GUI.
      Specified by:
      getViewerCount in class Gui
      Returns:
      the count of viewers
    • getViewers

      @NotNull @Contract(pure=true) public @NotNull List<HumanEntity> getViewers()
      Description copied from class: Gui
      Gets a mutable snapshot of the current HumanEntity viewers of this GUI. This is a snapshot (copy) and not a view, therefore modifications aren't visible.
      Specified by:
      getViewers in class Gui
      Returns:
      a snapshot of the current viewers
      See Also:
    • getInputComponent

      @NotNull @Contract(pure=true) public @NotNull GuiComponent getInputComponent()
      Gets the gui component representing the input
      Returns:
      the input component
      Since:
      0.10.0
    • getPlayerGuiComponent

      @NotNull @Contract(pure=true) public @NotNull GuiComponent getPlayerGuiComponent()
      Gets the gui component representing the player inventory
      Returns:
      the player gui component
      Since:
      0.10.0
    • load

      @Nullable @Contract(pure=true) public static @Nullable MerchantGui load(@NotNull @NotNull Object instance, @NotNull @NotNull InputStream inputStream, @NotNull @NotNull Plugin plugin)
      Loads a merchant gui from an XML file.
      Parameters:
      instance - the instance on which to reference fields and methods
      inputStream - the input stream containing the XML data
      plugin - the plugin that will be the owner of the created gui
      Returns:
      the loaded merchant gui
      Since:
      0.10.8
      See Also:
    • load

      @NotNull @Contract(pure=true) public static @NotNull MerchantGui load(@NotNull @NotNull Object instance, @NotNull @NotNull Element element, @NotNull @NotNull Plugin plugin)
      Loads a merchant gui from the specified element, applying code references to the provided instance.
      Parameters:
      instance - the instance on which to reference fields and methods
      element - the element to load the gui from
      plugin - the plugin that will be the owner of the created gui
      Returns:
      the loaded merchant gui
      Since:
      0.10.8
      See Also:
    • load

      @Nullable @Contract(pure=true) public static @Nullable MerchantGui load(@NotNull @NotNull Object instance, @NotNull @NotNull InputStream inputStream)
      Loads a merchant gui from an XML file.
      Parameters:
      instance - the instance on which to reference fields and methods
      inputStream - the input stream containing the XML data
      Returns:
      the loaded merchant gui
      Since:
      0.10.0
    • load

      @NotNull @Contract(pure=true) public static @NotNull MerchantGui load(@NotNull @NotNull Object instance, @NotNull @NotNull Element element)
      Loads a merchant gui from the specified element, applying code references to the provided instance.
      Parameters:
      instance - the instance on which to reference fields and methods
      element - the element to load the gui from
      Returns:
      the loaded merchant gui
      Since:
      0.10.0