ItzIsonn
@ItzIsonn
Type something...

Как создать GUI в плагине Minecraft?

Облазил весь интернет, но не смог найти. Всё либо устаревшее, либо не понятное
Подскажите, пожалуйста, как можно сделать GUI, чтобы из него нельзя было вытаскивать вещи и с поддержкой HEX цветов.
Также, как можно изменять/получать NBT у сущности?

Заготовка:
package org.ison.bmarmorstand;

import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent;

public class EventListener implements Listener {

    @EventHandler
    public void ShiftRCArmorStand(PlayerInteractEntityEvent e) {
        if (e.getPlayer().isSneaking() && e.getRightClicked().getType() == EntityType.ARMOR_STAND) {
                //здесь GUI
        }
    }
}
  • Вопрос задан
  • 838 просмотров
Пригласить эксперта
Ответы на вопрос 1
twobomb
@twobomb
Время чат гпт...
Возможно дальше написана дичь, но это не я писал.
Для создания GUI в плагине Minecraft вам понадобится использовать API Bukkit/Spigot, который предоставляет необходимые инструменты для работы с интерфейсами пользователя.

Пример создания GUI без возможности вытаскивания вещей и с поддержкой HEX цветов:
public class ExampleGUI implements InventoryHolder {

    private Inventory inventory;

    public ExampleGUI() {
        // Создаем GUI с 27 ячейками и заголовком "Пример GUI"
        this.inventory = Bukkit.createInventory(this, 27, ChatColor.translateAlternateColorCodes('&', "Пример GUI"));
        // Добавляем предметы в инвентарь
        inventory.addItem(new ItemStack(Material.DIAMOND), new ItemStack(Material.GOLD_INGOT), new ItemStack(Material.IRON_INGOT));
    }

    @Override
    public Inventory getInventory() {
        return inventory;
    }

    public void openGUI(Player player) {
        // Открываем GUI для игрока
        player.openInventory(inventory);
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        // Отменяем возможность вытаскивания предметов из GUI
        if (event.getInventory().getHolder() instanceof ExampleGUI) {
            event.setCancelled(true);
        }
    }
}

Тута сломался чат пришло перегенрить и он выдал еще один альтернативный код...

public class MyPlugin extends JavaPlugin implements Listener {

    private Inventory myGui;

    @Override
    public void onEnable() {
        // создание GUI
        myGui = Bukkit.createInventory(null, 9, "My GUI");

        // добавление предметов в GUI
        ItemStack item = new ItemStack(Material.DIAMOND);
        ItemMeta meta = item.getItemMeta();
        meta.setDisplayName(ChatColor.GREEN + "Diamond");
        item.setItemMeta(meta);
        myGui.addItem(item);

        // регистрация обработчика событий
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
            // открытие GUI при нажатии правой кнопки мыши на блоке
            event.getPlayer().openInventory(myGui);
        }
    }
}

В этом примере создается GUI, содержащий один предмет - алмаз, и открывается при нажатии правой кнопки мыши на блоке. Обратите внимание, что в примере не предусмотрено перемещение предметов в инвентаре.


Чтобы изменять/получать NBT у сущности, можно использовать классы NBTTagCompound и NBTTagList из библиотеки NBT. Например, чтобы установить NBT тэг "MyTag" у сущности "entity", можно использовать следующий код:
NBTTagCompound nbt = new NBTTagCompound();
nbt.setString("MyTag", "Hello world!");
((CraftEntity) entity).getHandle().load(nbt);

А чтобы получить значение NBT тэга "MyTag" у сущности "entity":
NBTTagCompound nbt = ((CraftEntity) entity).getHandle().save(new NBTTagCompound());
String myTagValue = nbt.getString("MyTag");
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы