我正在尝试制作插件。该插件将在第一次加入时为播放器提供一个特殊的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声称自己为"新",所以我认为这可能是问题。