Bukkit插件编码修复



我正在尝试制作插件。该插件将在第一次加入时为播放器提供一个特殊的cookie,这使他们可以单击它并在传说中查看单击。我知道,这听起来毫无用处,但我会添加。它目前不起作用,并且控制台中没有错误。当我尝试右键单击以使用它时,它简直什么都不做。请帮忙。我是Java的新手。

package me.jrneulight.cookieclicker;
import java.util.Arrays;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.HumanEntity;
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.event.player.PlayerLoginEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin implements Listener {
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
        FileConfiguration config = this.getConfig();
        config.addDefault("players.example", "1");
        config.options().copyDefaults(true);
        saveConfig();
    }
    @Override
    public void onDisable() {
    }
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("cookieclicker")) {
            ItemStack cookie = new ItemStack(Material.COOKIE);
            ItemMeta meta = cookie.getItemMeta();
            String clicked = "0";
            List<String> lore = Arrays.asList("Click me!", "Cookies Clicked: " + clicked);
            meta.setDisplayName(ChatColor.GOLD + "Cookie Clicker");
            meta.setLore(lore);
            cookie.setItemMeta(meta);
            ((HumanEntity) sender).getInventory().addItem(cookie);
            return true;
        }
        return false;
    }
    @EventHandler
    public void onPlayerLoginEvent(PlayerLoginEvent event) {
        Player player = event.getPlayer();
        String pname = player.getDisplayName();
        FileConfiguration config = this.getConfig();
        if(!event.getPlayer().hasPlayedBefore()) {
        ItemStack cookie = new ItemStack(Material.COOKIE);
        ItemMeta meta = cookie.getItemMeta();
        String clicked = "0";
        List<String> lore = Arrays.asList(ChatColor.GRAY + "Click me!", ChatColor.GRAY + "Cookies Clicked: " + clicked);
        meta.setDisplayName(ChatColor.GOLD + "Cookie Clicker");
        meta.setLore(lore);
        cookie.setItemMeta(meta);
        player.getInventory().addItem(cookie);
        config.set("players." + pname, "0");
        saveConfig();
      }
    ItemStack[] contents = player.getInventory().getContents();
    ItemStack cookiestack = null;
    for(ItemStack i: contents) {
        if(i != null) {
            if (i.getType().equals(Material.COOKIE) && i.getItemMeta().getDisplayName().equals(ChatColor.GOLD + "Cookie Clicker")) {
                cookiestack = i;
            }
        }
    }
    String clicked = config.getString("players." + pname);
    ItemMeta cookiestackmeta = cookiestack.getItemMeta();
    List<String> lorenew = Arrays.asList("Click me!", "Cookies Clicked: " + clicked);
    cookiestackmeta.setLore(lorenew);
    }
    public void onPlayerUse(PlayerInteractEvent event){
        Player p = event.getPlayer();
        String pname = p.getDisplayName();
        ItemStack inhand = p.getItemInHand();
        ItemMeta inhandmeta = inhand.getItemMeta();
        if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
            if(p.getItemInHand().getType() == Material.COOKIE && inhandmeta.getDisplayName().equals(ChatColor.GOLD + "Cookie Clicker") ){
                FileConfiguration config = this.getConfig();
                if (config.getString("players." + pname) != null ) {
                    String clicked = config.getString("players." + pname);
                    int clickedint = Integer.parseInt(clicked);
                    int clickedintnew = clickedint + 1;
                    config.set("players." + pname, Integer.toString(clickedintnew));
                    saveConfig();

                }
                }
            }
        }
    }

这是因为您没有在onPlayerUse方法上方使用@EventHandler。看起来应该这样:

@EventHandler
public void onPlayerUse(PlayerInteractEvent event){
    //code here
}

记住,所有事件都需要在他们面前拥有@EventHandler

如果上述答案不起作用,请忘记添加 plugin.yml file?

如果您不添加此plugin.yml文件,则服务器将无法识别您的插件。

要执行此操作,您只需要右键单击" SRC",然后选择" new'''然后"文件"。名称,put 'plugin.yml'。在Eclipse中打开'plugin.yml'文件,并将其用作您的'plugin.yml'格式:

main: me.<yourname>.<pluginname>.<classname>
name: <plugin name> 
version: <version number>
author: <your name> 
commands: 
    <command name>:
        description: <description here>

由于您对Java声称自己为"新",所以我认为这可能是问题。

最新更新