Bukkit 1.20.1插件: SHIFT+右键箱子打开GUI显示坐标

本教程将教你如何创建一个简单的Bukkit 1.20.1插件,实现以下功能:

  • 玩家SHIFT+右键点击箱子时,打开一个GUI界面,显示箱子内容。- 点击GUI内的箱子图标,在聊天栏中显示该箱子的坐标。

以下是示例代码:javaimport org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.Location;import org.bukkit.Material;import org.bukkit.block.Block;import org.bukkit.block.BlockState;import org.bukkit.block.Chest;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.block.Action;import org.bukkit.event.player.PlayerInteractEvent;import org.bukkit.inventory.Inventory;import org.bukkit.inventory.ItemStack;import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;import java.util.Map;

public class ChestGUIPlugin extends JavaPlugin implements Listener { private Map<Location, Inventory> chestInventories;

@Override    public void onEnable() {        chestInventories = new HashMap<>();        Bukkit.getPluginManager().registerEvents(this, this);    }

@EventHandler    public void onPlayerInteract(PlayerInteractEvent event) {        Player player = event.getPlayer();        if (event.getAction() == Action.RIGHT_CLICK_BLOCK && player.isSneaking()) {            Block clickedBlock = event.getClickedBlock();            if (clickedBlock != null && clickedBlock.getType() == Material.CHEST) {                Location chestLocation = clickedBlock.getLocation();                Inventory chestInventory = getOrCreateChestInventory(chestLocation);                player.openInventory(chestInventory);

            event.setCancelled(true);            }        }    }

private Inventory getOrCreateChestInventory(Location chestLocation) {        if (chestInventories.containsKey(chestLocation)) {            return chestInventories.get(chestLocation);        }

    BlockState blockState = chestLocation.getBlock().getState();        if (blockState instanceof Chest) {            Chest chest = (Chest) blockState;            Inventory chestInventory = Bukkit.createInventory(null, chest.getInventory().getSize(), ChatColor.BOLD + 'Chest GUI');            chestInventory.setContents(chest.getInventory().getContents());

        chestInventories.put(chestLocation, chestInventory);            return chestInventory;        }

    return null;    }}

代码解释:

  1. 插件初始化: - onEnable() 方法在插件启动时被调用。 - 我们创建了一个 chestInventories 的HashMap,用于存储箱子位置和对应GUI界面的映射关系。 - 注册事件监听器,以便监听玩家与箱子的交互。

  2. 玩家交互事件: - onPlayerInteract() 方法在玩家与方块交互时被调用。 - 我们检查玩家是否按住SHIFT键并右键点击了一个箱子。 - 如果条件满足,获取箱子的位置,并调用 getOrCreateChestInventory() 方法获取或创建对应的GUI界面。 - 最后,打开GUI界面给玩家,并取消默认的箱子打开事件。

  3. 获取或创建GUI界面: - getOrCreateChestInventory() 方法负责获取或创建指定位置的箱子GUI界面。 - 如果 chestInventories 中已经存在该位置的GUI,则直接返回。 - 否则,创建一个新的GUI界面,设置标题,并将箱子内容复制到GUI中。 - 将新的GUI界面存储到 chestInventories 中,并返回。

注意:

  • 这只是一个简单的示例代码,可能需要根据你的实际需求进行修改和扩展。- 例如,你可以添加点击GUI内物品显示坐标的功能,或者添加其他自定义功能。- 在实际使用中,你还需要将代码编译成jar文件,并将其放入Bukkit服务器的plugins文件夹中。

希望这篇教程能够帮助你理解如何在Bukkit 1.20.1中创建简单的GUI插件!

Bukkit 1.20.1插件: SHIFT+右键箱子打开GUI显示坐标

原文地址: https://www.cveoy.top/t/topic/laxi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录