标签: bukkit

为什么这个对象不能被序列化?

好吧,对于我的Bukkit插件,我需要以下java类(NewItem.java)可序列化,但事实并非如此.当我的插件试图保存它时,它给我错误:


16:33:23 [SEVERE] java.io.NotSerializableException: org.bukkit.inventory.ItemSta
ck
16:33:23 [SEVERE]       at java.io.ObjectOutputStream.writeObject0(Unknown Sourc
e)
16:33:23 [SEVERE]       at java.io.ObjectOutputStream.writeObject(Unknown Source
)
16:33:23 [SEVERE]       at java.util.ArrayList.writeObject(Unknown Source)
16:33:23 [SEVERE]       at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown
Source)
16:33:23 [SEVERE]       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unkno
wn Source)
16:33:23 [SEVERE]       at java.lang.reflect.Method.invoke(Unknown Source)
16:33:23 [SEVERE]       at java.io.ObjectStreamClass.invokeWriteObject(Unknown S
ource)
16:33:23 [SEVERE]       at java.io.ObjectOutputStream.writeSerialData(Unknown So
urce)
16:33:23 [SEVERE]       at java.io.ObjectOutputStream.writeOrdinaryObject(Unknow
n Source)
16:33:23 [SEVERE]       at java.io.ObjectOutputStream.writeObject0(Unknown Sourc
e)
16:33:23 [SEVERE]       at java.io.ObjectOutputStream.writeObject(Unknown Source
)
16:33:23 [SEVERE]       at java.util.HashMap.writeObject(Unknown Source)
16:33:23 [SEVERE]       at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown
Source)
16:33:23 …
Run Code Online (Sandbox Code Playgroud)

java plugins serialization minecraft bukkit

1
推荐指数
1
解决办法
5269
查看次数

NullPointer除了没有明显的原因

我正在开发一个Bukkit插件(错误与bukkit或它的api无关,但我包括了这个事实,我使用它是为了完整性,如果你不知道它是什么/没有听说过你应该仍然能够回答这个问题).我正在处理的插件是一个反聊天垃圾邮件插件.我没有明显的理由得到nullpointerexception.这是一些代码:

public class SpamListener implements Listener{
private HashMap<String, Long> lastMessage;
private HashMap<String, Integer> spamScore;

public void init(){
    lastMessage = new HashMap<String, Long>();
    spamScore = new HashMap<String, Integer>(); 
}

@EventHandler
public void playerChatEvent(AsyncPlayerChatEvent e){
    if(AntiGrief.instance.config.getBoolean("antispam.enabled") && (!e.getPlayer().hasPermission("antigrief.spam.bypass"))){
        Player player = e.getPlayer();
        String name = player.getName();
        int startingScore = spamScore.get(name); // <-- NullPointerException occurs here

        //More spam checking code here

    }
}
Run Code Online (Sandbox Code Playgroud)

JavaPlugin类(主类,对于那些不熟悉bukkit的人):

    spamListener = new SpamListener();
    spamListener.init(); // <-- yes the method is being called, same error occurs if the hashmap …
Run Code Online (Sandbox Code Playgroud)

java nullpointerexception minecraft bukkit

1
推荐指数
1
解决办法
140
查看次数

为什么该方法不返回该区域是否大于参数cubed?

我正在使用Minecraft插件来保护一个区域.我有一个区域类,它是在玩家选择3个区块后创建的,这个区域类有一个名为" tooBig" 的方法,它用于检测区域是否大于" block^3".问题是这个方法总是返回false.

public boolean tooBig(int i) {
    boolean bo1, bo2, bo3;
    bo1 = Math.abs(b1.getX() - b2.getX()) > i;
    bo2 = Math.abs(b1.getZ() - b2.getZ()) > i;
    bo3 = Math.abs(b1.getY() - b3.getY()) > i;
    return bo1 && bo2 && bo3;
}
Run Code Online (Sandbox Code Playgroud)

b1,b2b3Block对象.

java minecraft bukkit

1
推荐指数
1
解决办法
65
查看次数

与http请求通信Java-Javascript

最近我一直试图在minecraft服务器(用Java运行)和scratch(用JavaScript运行)之间进行通信.我已经用java编写了代码:

package me.yotam180;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;


public class HttpProcessor {
     public MainClass plugin;
    public HttpProcessor (MainClass plug) throws IOException {
        plugin = plug;
        plugin.getLogger().info("CREATED HTTTP PROCESSOR");
        HttpServer server = HttpServer.create(new InetSocketAddress(9090), 0);
        server.createContext("/pollplayer", new PollPlayerHandler());
        server.createContext("/killplayer", new KillPlayerHandler());
        plugin.getLogger().info("STARTED HTTTP SERVER");
        server.setExecutor(null); // creates a default executor
        server.start();
    }

    static class PollPlayerHandler implements HttpHandler {

        @SuppressWarnings("deprecation")
        @Override
        public void handle(HttpExchange httpExchange) throws IOException {
            // …
Run Code Online (Sandbox Code Playgroud)

javascript java minecraft mit-scratch bukkit

1
推荐指数
1
解决办法
2072
查看次数

Bukkit命令重复了吗?

我编写了一个没有错误的Bukkit插件,但在游戏中它有一个问题.

每当使用该命令时,它都不会执行它应该执行的操作.相反,它向我发送了一条大胆的信息,说明我打字的内容/leaving.

这是我的代码:

public class SeeYouSoon extends JavaPlugin{

// Start
@Override
public void onEnable(){
}

@Override 
public void onDisable() {
}

//Commands



public boolean onCommand(CommandSender sender, Command cmd, String[] args){
    if(cmd.getName().equalsIgnoreCase("leaving")){
        Player player = (Player) sender;
        Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!");
        Bukkit.getScheduler().runTaskLater(this, new Runnable() {
            public void run() {
                //Run your function or change stuff here.
               player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You …
Run Code Online (Sandbox Code Playgroud)

java minecraft bukkit

1
推荐指数
1
解决办法
472
查看次数

Bukkit插件:主类中的监听器

我正在尝试创建一个插件,您可以在其中键入命令/设置并切换布尔值集.如果设置为true,我想要它,所以当玩家加入它时对他们说"嗨",但如果它是'假'则它什么都不做.(顺便说一句,我是唯一可以使用该命令的人).我尝试创建两个类,一个是主要的,第二个是监听器,但我无法从监听器类访问布尔值,所以我尝试在一个类中完成所有操作.使用我提供的代码时,除了PlayerJoinEvent之外,一切都有效.我要么想弄清楚如何从另一个类访问布尔值或如何解决这个问题.

package me.jakegeyer28;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

import net.md_5.bungee.api.ChatColor;

public class Main extends JavaPlugin implements Listener{

    public boolean set = true;

    @Override
    public void onEnable() {
        getLogger().info("Done");
    }

    @Override
    public void onDisable() {
        getLogger().info("Done");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("settings")) {
            Player player = (Player) sender;
            if (player.getName().equalsIgnoreCase("jakegeyer27")) {
            if(set == true) {
                set = false;
                player.sendMessage(ChatColor.RED + "Off");
                }
            else if …
Run Code Online (Sandbox Code Playgroud)

plugins listeners class bukkit

1
推荐指数
1
解决办法
687
查看次数

在我知道不会为空的字段上使用assert可以吗?

通过阅读现有文章,我了解到“断言”不应在生产代码中使用,但是IntelliJ给我的第一个技巧是,当我使用一种我知道不会为NULL的方法时,但在其他方面还是可以为Null的,是要告诉我应该使用“断言” IntelliJ工具提示的屏幕截图

在上面的代码中,创建新的ItemStack时ItemMeta不会为null,但是如果ItemStack也为null,则可以为null,这就是为什么它没有@NotNull批注的原因。

知道这一点,处理此警告的最正确方法是什么?是因为我知道它永远不会为空而忽略它,还是仍然进行空检查。如果要执行null检查哪种类型,请断言或我已经做过的方式是

if(fillerMeta != null) 
Run Code Online (Sandbox Code Playgroud)

java minecraft bukkit

1
推荐指数
1
解决办法
73
查看次数

获取玩家库存,然后广播物品显示名称

好的,我试图在玩家登录时检查他们的库存,它说显示名称

public void onPlayerJoin(PlayerJoinEvent event) {
    Player p = event.getPlayer();

    for (int i = 0; i < p.getInventory().getSize(); i++) {
        if (p.getInventory().getItem(i).getType() != null) {
            if (!p.getInventory().getItem(i).getItemMeta().getDisplayName().equals("KITS")){
                Bukkit.broadcastMessage(i.getItemMeta().getDisplayName());
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它只是导致错误。

错误日志:

public void onPlayerJoin(PlayerJoinEvent event) {
    Player p = event.getPlayer();

    for (int i = 0; i < p.getInventory().getSize(); i++) {
        if (p.getInventory().getItem(i).getType() != null) {
            if (!p.getInventory().getItem(i).getItemMeta().getDisplayName().equals("KITS")){
                Bukkit.broadcastMessage(i.getItemMeta().getDisplayName());
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个 NullPointerException 但我不知道它怎么能这么说。我希望你明白我写的...

java module minecraft bukkit

0
推荐指数
1
解决办法
2312
查看次数

如何使用这样的 Java 接口?

我正在开发一个程序,我想使用接口。类似于 Bukkit 在他们的 Player 类中使用的方式,这里。我已经多次观看和阅读有关界面的教程,甚至尝试过自己测试但没有运气。

假设我有一个“用户”界面,带有一个返回字符串的方法占位符。该方法将命名为 getName()。

我想要做

User user = (INSTANTIATE SOMEHOW);
System.out.println(user.getName());
Run Code Online (Sandbox Code Playgroud)

这是在 Bukkit 的实现中以大致相同的方式实现的

Player player = Server.getPlayer("Jimmothy");
System.out.println(player.getName());
Run Code Online (Sandbox Code Playgroud)

我只是不知道如何让这样的事情发挥作用。为了实例化播放器类,您可以使用许多“getPlayer()”方法之一。唯一的问题是包含这些方法的类也是接口,所以我也不知道如何获取接口的实例。搜索代码也无济于事,因为我似乎无法找到这些类中的方法在哪里以及是否实际上是使用 Overrides 或其他东西构建的。(如果这就是覆盖的工作方式)。

谁知道呢,也许我只需要知道如何实例化或获取用户界面的实例,我就准备好了。我知道您不能使用“new ClassName();”创建接口实例。我从来没有真正理解他们,但我真的很想。

这似乎是一个非常愚蠢的问题,我相信答案非常简单,但帮助会很棒!:) 感谢您的阅读。

java interface bukkit

0
推荐指数
1
解决办法
667
查看次数

Ender Chest打开和关闭动画

我希望取消ender胸部打开事件,并在右键单击时显示打开和关闭动画.我目前的代码是:

public void changeChestState(Location loc, boolean open) {
    if (open) {
        for (Player p : Bukkit.getOnlinePlayers()) {
            p.playNote(loc, (byte) 1, (byte) 1);
        }
    } else {
         for (Player p : Bukkit.getOnlinePlayers()) {
             p.playNote(loc, (byte) 1, (byte) 0);
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我右键单击胸部时,我听到声音,但没有动画发生.感谢您的帮助!

java plugins minecraft bukkit

0
推荐指数
1
解决办法
1786
查看次数