Skip to content

Menu examples

broken1arrow edited this page Apr 28, 2023 · 11 revisions

Make simple onepage menu

public class MainMenu extends MenuHolder {

        private final MenuButton examplebutton;
        private final MenuButton examplebutton1;
        private final MenuButton examplebutton2;

                public MainMenu() {
                super();

		setMenuSize(45);
		setTitle("menu titel");

		examplebutton = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				//stuff you want to execute here, when clicking on item.
			}

			@Override
			public ItemStack getItem() {

				//Item you want this button return.
				return null;
			}
		};

		examplebutton1 = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				//stuff you want to execute here when clicking on item.
			}

			@Override
			public ItemStack getItem() {
				//Item you want this button return.
				return null;
			}
		};

		examplebutton2 = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				//stuff you want to execute here, when clicking on item.
			}

			@Override
			public ItemStack getItem() {
				//Item you want this button return.
				return null;
			}
		};
	}

	@Override
	public MenuButton getButtonAt(int slot) {

		if (slot == 1)
			return examplebutton;
		if (slot == 5)
			return examplebutton1;
		if (slot == 7)
			return examplebutton2;

		return null;
	}
}

Make several pages menu

public class PagedMenu extends MenuHolder {

	private final MenuButton removeAllPlayers;
	private final MenuButton addPlayers;
	private final MenuButton backButton;
	private final MenuButton forward;
	private final MenuButton previous;
	private final MenuButton listOfFillObjects;
	private final MenuButton previousAndForward;


	public PagedMenu(Player player) {
		super(new ArrayList<>(Bukkit.getOnlinePlayers()));
		setMenuSize(45);
		setTitle("players in party");
		// Witch slot you want to fill with items in.
		setFillSpace("0-35");
		// add this if you want players add or remove items from slots you set with setFillSpace().
		//setSlotsYouCanAddItems();

		removeAllPlayers = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				// do something here

			}

			@Override
			public ItemStack getItem() {
				return null;
			}
		};

		addPlayers = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				// do something here
				//Two options to update, either all buttons or only this button.
				updateButton(this);
				updateButtons();
			}

			@Override
			public ItemStack getItem() {
				return null;
			}
		};
		// Open menu befor this.
		backButton = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				//example code to run.
				//new MainGuiMenu().menuOpen(player);
			}

			@Override
			public ItemStack getItem() {
				return null;
			}
		};
		previousAndForward = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				if (click.isLeftClick()) {
					previousPage();
				} else {
					nextPage();
				}

			}

			@Override
			public ItemStack getItem() {
				return null;
			}
		};
		previous = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				if (click.isLeftClick()) {
					previousPage();
				}

			}

			@Override
			public ItemStack getItem() {
				return null;
			}
		};
		forward = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				if (click.isLeftClick()) {
					nextPage();
				}
			}

			@Override
			public ItemStack getItem() {
				return null;
			}
		};

		listOfFillObjects = new MenuButton() {

			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {

				if (object instanceof UUID) {

					// your code here
				}


			}

			@Override
			public ItemStack getItem() {
				return null;
			}

			@Override
			public ItemStack getItem(Object object) {

				if (object instanceof Player) {
					return CreateItemStack.of(SkullCreator.itemFromUuid((( Player) object).getUniqueId()),
							String.valueOf(object),new ArrayList<>()).makeItemStack();
				}
				return null;
			}

		};

	}

	@Override
	public MenuButton getFillButtonAt(Object o) {
		return listOfFillObjects;
	}

	@Override
	public MenuButton getButtonAt(int slot) {

		if (slot == 36)
			return removeAllPlayers;
		if (slot == 37)
			return addPlayers;
		if (slot == 38)
			return forward;
		if (slot == 35)
			return previous;
		if (slot == 44)
			return backButton;

		return null;
	}
}

Make menu with buttons some update when have it open.

Option to update buttons while the menu is open, works on both with fill buttons and without. This example demonstrate in with fill buttons menu, but it is works same way without fill buttons is used.

public class MenuUpdateTime extends MenuHolder {

	private final MenuButton examplebutton;
	private final MenuButton examplebutton1;
	private final MenuButton exampleFillSlots;
	private final MenuButton forward;
	private final MenuButton previous;

	public MenuUpdateTime() {
		super(new ArrayList<>(Bukkit.getOnlinePlayers()));
		// Witch slot you want to fill with items in.
		setFillSpace("9-27");
		setMenuSize(45);
		setTitle("menu titel");
		setUpdateTime(5);

		examplebutton = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				//stuff you want to execute here, when clicking on item.
			}

			@Override
			public ItemStack getItem() {

				//Item you want this button return.
				return new ItemStack(Material.BLAZE_POWDER);
			}
		};

		examplebutton1 = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {
				//stuff you want to execute here when clicking on item.
			}

			@Override
			public ItemStack getItem() {
				//Item you want this button return.
				return null;
			}
		};

		exampleFillSlots = new MenuButton() {
			@Override
			public void onClickInsideMenu(Player player, Inventory menu, ClickType click, ItemStack clickedItem, Object object) {

			}

			@Override
			public long setUpdateTime() {
				return 2;
			}

			@Override
			public boolean shouldUpdateButtons() {
				return true;
			}

			@Override
			public ItemStack getItem(Object object) {
				if (object instanceof Player) {
					LocalDateTime myObj = LocalDateTime.now();
					ItemStack itemStack = CreateItemStack.of(SkullCreator.itemFromUuid(((Player) object).getUniqueId()),
							String.valueOf(object), new ArrayList<>()).makeItemStack();
					DateTimeFormatter myFormatObj = DateTimeFormatter.ofPattern("HH:mm:ss");
					String formattedDate = myObj.format(myFormatObj);
					ItemMeta meta = itemStack.getItemMeta();
					meta.setDisplayName(object + " " + formattedDate);
					itemStack.setItemMeta(meta);
					return itemStack;
				}
				return null;
			}

			@Override
			public ItemStack getItem() {
				return null;
			}
		};
		previous = new MenuButton() {
			@Override
			public void onClickInsideMenu(final Player player, final Inventory menu, final ClickType click, final ItemStack clickedItem, final Object object) {

				if (click.isLeftClick()) {
					previousPage();
				}

			}

			@Override
			public ItemStack getItem() {
				return new ItemStack(Material.ARROW);
			}
		};
		forward = new MenuButton() {
			@Override
			public void onClickInsideMenu(final Player player, final Inventory menu, final ClickType click, final ItemStack clickedItem, final Object object) {
				if (click.isLeftClick()) {
					nextPage();
				}
			}

			@Override
			public ItemStack getItem() {
				return new ItemStack(Material.ARROW);
			}
		};
	}

	@Override
	public MenuButton getFillButtonAt(Object o) {
		return exampleFillSlots;
	}

	@Override
	public MenuButton getButtonAt(int slot) {

		if (slot == 1)
			return examplebutton;
		if (slot == 5)
			return examplebutton1;
		if (slot == 42)
			return forward;
		if (slot == 38)
			return previous;
		return null;
	}
}
Clone this wiki locally