首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spigot插件-无法构建1.10

Spigot插件-无法构建1.10
EN

Stack Overflow用户
提问于 2016-06-10 11:35:21
回答 1查看 207关注 0票数 1

我在1.10中创建了一个Spigot插件。它主要是必备的,但我添加了一个指南针库存GUI,当你第一次登录时,你会收到它。出于某种奇怪的原因,在我实现此功能后,您无法从库存中获取物品,它们会立即消失。GUI的类如下所示

代码语言:javascript
复制
package me.Roofah.Essentials;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
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.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Essentials extends JavaPlugin implements Listener{
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);

        this.getCommand("teleport").setExecutor(new Teleport(this));;
        this.getCommand("vanish").setExecutor(new Vanish(this));;
        this.getCommand("unvanish").setExecutor(new Vanish(this));;


        Bukkit.getServer().getLogger().info("Teleport Plugin Enabled!");
    }

        public Player getPlayer(String name) {
            for(Player p : Bukkit.getOnlinePlayers()) {
                if(p.getName().equalsIgnoreCase(name))
                    return p;
            }
            return null;

    }

    public void onDisable() {

        Bukkit.getServer().getLogger().info("Teleport Plugin Disabled!");

    }

    private void teleportInWord(Player player, int x, int y, int z) {
        player.teleport(new Location(player.getWorld(), x, y, z));
    }

    private void openGUI(Player player) {
        Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_RED + "Warp Selector || By Roofah");

        ItemStack Spawn = new ItemStack(Material.DIAMOND_AXE);
        ItemMeta SpawnMeta = Spawn.getItemMeta();
        ItemStack Build = new ItemStack(Material.DIAMOND_PICKAXE);
        ItemMeta BuildMeta = Build.getItemMeta();

        SpawnMeta.setDisplayName(ChatColor.DARK_RED + "Spawn");
        Spawn.setItemMeta(SpawnMeta);

        BuildMeta.setDisplayName(ChatColor.GREEN + "Build");
        Build.setItemMeta(BuildMeta);

        // 35
        inv.setItem(3, Spawn);
        inv.setItem(5, Build);

        player.openInventory(inv);
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        if (ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Warp Selector")) {
            return;
        }
        Player player = (Player) event.getWhoClicked();
        event.setCancelled(true);

        if (event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR
                || !event.getCurrentItem().hasItemMeta()) {
            player.closeInventory();
            return;
        }

        switch(event.getCurrentItem().getType()){
        case DIAMOND_AXE:
            teleportInWord(player, 967, 90, 484);
            player.closeInventory();
            player.sendMessage(String.format("%sTeleported to %sSpawn%s!", ChatColor.GOLD, ChatColor.DARK_RED, ChatColor.GOLD));
            break;
        case DIAMOND_PICKAXE:
            teleportInWord(player, 906, 96, 428);
            player.closeInventory();
            player.sendMessage(String.format("%sTeleported to %sBUILD%s!", ChatColor.GOLD, ChatColor.GREEN, ChatColor.GOLD));
            break;

            default:
                player.closeInventory();
                break;
        }
    }

    @EventHandler
    public void onPlayerKoin(PlayerJoinEvent event) {
        event.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS));
    }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Action a = event.getAction();
        ItemStack is = event.getItem();
        if (a == Action.PHYSICAL || is == null || is.getType() == Material.AIR) {
            return;
        }
        if (is.getType() == Material.COMPASS) {
            openGUI(event.getPlayer());
        }

    }

}

还有另外两个类,但我仍然可以在不添加GUI的情况下获得块。

EN

回答 1

Stack Overflow用户

发布于 2016-07-23 01:31:30

您的情况是代码中第73行的逻辑错误。

您拥有以下内容:

代码语言:javascript
复制
 if (ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Warp Selector")) //Line 73 {
        return;
    }

情况是这样的:

只要库存名称是Warp Selector,就返回。因此,您的代码仅在库存名称不是"Warp Selector“时执行。

您可能想要反转此逻辑,以便在库存名称为"Warp Selector“时执行代码。

代码语言:javascript
复制
if (!ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Warp Selector") {
return;
}
//Code continues
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37739469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档