Minecraft Bukkit 活动

Minecraft Bukkit Events

我正在尝试为 minecraft 进行 bukkit 编程,但由于某些原因我被事件困住了。这是我的代码:

主 class 文件:

package com.plugin1;

import java.util.logging.Logger;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginDescriptionFile;
//import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import net.md_5.bungee.api.ChatColor;

public class Plugin extends JavaPlugin {

    public int songStage;
    public static Plugin plugin;

    public void OnEnable () {
        PluginDescriptionFile pluginDesc = getDescription();
        Logger logger = getLogger();

        plugin = this;
        registerEvents(this, new BlockBreak());

        logger.info(pluginDesc.getName() + " is enabled! (V. " + pluginDesc.getVersion() + ")");
    }

    public void OnDisable () {
        PluginDescriptionFile pluginDesc = getDescription();
        Logger logger = Logger.getLogger("Plugin");

        plugin = null;
        logger.info(pluginDesc.getName() + " is disabled! (V. " + pluginDesc.getVersion() + ")");
    }

    public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) {
        for (Listener listener : listeners) {
            Bukkit.getServer().getPluginManager().registerEvents(listener, plugin);
            }
        }

    public static Plugin getPlugin() {
        return plugin;
        }
   }

事件class文件:

package com.plugin1;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;

public class BlockBreak implements Listener {

    @EventHandler(priority = EventPriority.HIGH)
    public void OnBlockBreak (BlockBreakEvent e) {  
        Player p = e.getPlayer();

        p.sendMessage("Block broken.");
    }
}

基本上这个returns没有错误。我已经通过控制台,什么也没有。当我打破一个方块时,几乎什么都没有发生!

我已经尝试了一些事情:我经历了它,尝试了多个视频教程并尝试了 minecraft 论坛上的文本教程,但仍然一无所获。我还联系了一位编写 bukkit 插件的服务器所有者,但他无法解决这个问题...

如果有人可以帮助我,请告诉我!!!

提前致谢!

我已经测试了你的代码,它确实不起作用。我认为您的 Eventregistration 不工作。对于我的插件,我在 mainClass 中使用它:

package me.Nightfighter001.GlobalSystem.Main;

import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import me.Nightfighter001.GlobalSystem.Listener.Join;

public class main extends JavaPlugin {

public static main getPlugin() {
    return plugin;
}

private static main plugin;

@Override
public void onEnable() {
    plugin = this;

    new Join(this);

    ConsoleCommandSender console = Bukkit.getConsoleSender();
    console.sendMessage(new StringBuilder("7c[76GlobalSystem7c] 7bVersion 7c")
            .append(getDescription().getVersion()).append(" 7bdes Plugins wurde aktiviert!").toString());
    console.sendMessage(
            "7c[76GlobalSystem7c] 7bDieses Plugin darf nur benutzt werden, wenn der Entwickler 7cNightfighter001 7bes erlaubt!");
    return;
}

@Override
public void onDisable() {
    ConsoleCommandSender console = Bukkit.getConsoleSender();
    console.sendMessage(new StringBuilder("7c[76GlobalSystem7c] 7bVersion 74")
            .append(getDescription().getVersion()).append(" 7bdes Plugins wurde deaktiviert!").toString());
}
}

并且在 EventClass 中:

package me.Nightfighter001.GlobalSystem.Listener;

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import me.Nightfighter001.GlobalSystem.Main.main;

public class Join implements Listener {

public Join(main main) {
    plugin = main;
    plugin.getServer().getPluginManager().registerEvents(this, main);
}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent ev) {
    ev.setJoinMessage("");
}

main plugin = main.getPlugin();
}

正如您在我的示例中所见,我使用 PlayerJoinEvent,但它也适用于 BlockBreakEvent。我希望这会有所帮助 :) 抱歉我的英语不好 ;D

如果您不将 onEnable(和 onDisable)方法的名称大写,您的代码将有效。 onEnableOnEnable 是两种不同的方法,因为 java 区分大小写,并且由于您试图覆盖 JavaPlugin super class 中的特定方法,您'需要以完全相同的方式拼写它们。

据我所知,通常的约定是无论如何您的方法都以小写字母开头。 @Override 注释在捕获这些类型的错误时非常有用,因为它让编译器知道您要覆盖现有方法,如果该方法不存在(例如,如果您拼错了名称或添加了不同的参数),它会提醒你(它还会让任何阅读代码的人立即知道你正在覆盖现有方法或实现接口)。

我认为您没有以正确的方式注册监听器...

试试这个代码,告诉我它是否有效...我真的很想帮助你

首先不要使用 "Plugin" 作为 Main Class 的名称...请改用 "Main"。

启用:

public class Main extends JavaPlugin {

    public void onEnable() {
        Bukkit.getPluginManger().registerEvents(new Join(this),this);
    }

}

听众:

public class Join implements Listener {

    private Main plugin;

    public Join(Main plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent ev) {
        ev.setJoinMessage("Just another test");
    }
}

希望它有用...

下面是在进程中启动服务器的代码示例:

package me.Nightfighter001.GlobalSystem.Listener;

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import me.Nightfighter001.GlobalSystem.Main.main;

public class Join implements Listener {

public Join(main main) {
    plugin = main;
    plugin.getServer().getPluginManager().registerEvents(this, main);
}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent ev) {
    ev.setJoinMessage("");
}

main plugin = main.getPlugin();
}