当前位置: 首页 > 知识库问答 >
问题:

插口无法将事件BlockPlaceEvent传递给插件v1.0

农永宁
2023-03-14

所以我一直在尝试编写一个简单的插件来删除一个块。放置后5秒或10滴答声。但我遇到了一些问题。当我放置一个块来测试它时,我得到了下面所述的错误,因为我在编程方面不是很有经验,我不知道如何修复它。我们将不胜感激。

我的错误是:

11:32:29 ERROR]: Could not pass event BlockPlaceEvent to firstPlugin v1.0
java.lang.ClassCastException: class me.chappiemwoan.firstPlugin.events.firstPluginEvents cannot be cast to class org.bukkit.plugin.Plugin (me.chappiemwoan.firstPlugin.events.firstPluginEvents is in unnamed module of loader org.bukkit.plugin.java.PluginClassLoader @1f0389ee; org.bukkit.plugin.Plugin is in unnamed module of loader 'app')
        at me.chappiemwoan.firstPlugin.events.firstPluginEvents.blockTimer(firstPluginEvents.java:40) ~[?:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor1.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.4.jar:git-Paper-276]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.4.jar:git-Paper-276]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.4.jar:git-Paper-276]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) ~[patched_1.16.4.jar:git-Paper-276]
        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callBlockPlaceEvent(CraftEventFactory.java:378) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.ItemStack.placeItem(ItemStack.java:280) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.PlayerInteractManager.a(PlayerInteractManager.java:533) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1535) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.PacketPlayInUseItem.a(PacketPlayInUseItem.java:27) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.PacketPlayInUseItem.a(PacketPlayInUseItem.java:5) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1136) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1129) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1090) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1004) ~[patched_1.16.4.jar:git-Paper-276]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.4.jar:git-Paper-276]
        at java.lang.Thread.run(Thread.java:832) [?:?]

下面是我的代码。

    package me.chappiemwoan.firstPlugin.events;

import me.chappiemwoan.firstPlugin.*;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import me.chappiemwoan.firstPlugin.Override;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.plugin.Plugin;

public class firstPluginEvents implements Listener {

    @EventHandler
    public static void onPlayerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        player.sendMessage(ChatColor.RED + "WELCOME TO THE SERVER");

    }

    @EventHandler
    public static void onItemPickUp(PlayerPickupItemEvent event1) {
        Player player1 = event1.getPlayer();
        player1.kickPlayer("haha you thought");
    }

    @EventHandler
    public void blockTimer(BlockPlaceEvent event2) {
        Block block = event2.getBlock();
        Location location = block.getLocation();

        Bukkit.getScheduler().scheduleSyncDelayedTask((Plugin) this, new Runnable() {
            @Override
            public void run() {
                location.getBlock().setType(Material.AIR);
            }
        }, 10L);

    }

}

共有2个答案

史商震
2023-03-14

我不确定你现在是否已经解决了这个问题,但我也有同样的问题,在做了一些挖掘之后,我发现“插件”部分没有在你编写代码的类中定义。如果您在主类中使用该代码,它应该可以正常工作,但由于您试图在不同的类“FirstPlugineEvents”中运行它,它不知道“plugin”是什么意思。您必须将顶部代码放在主类“on_enable”中,将底部代码放在“FirstPlugineEvents”类中。这将告诉你的插件,“插件”是指你正在编写的实际插件。这个链接更详细地介绍了这一点。

把这个放在你的主类中:

new firstPluginEvents(this);

把这个放到你的“firstPluginEvetns”课上:

private MainClass plugin;

public firstPluginEvents(MainClass plugin){
    this.plugin = plugin;
}

Minecraft插件计划SyncDelayed任务错误

司马高韵
2023-03-14

所以我现在发现计时器肯定是问题所在。没有定时器,它工作得很好。我几乎肯定知道问题出在这一部分,((plugin)this,new Runnable()但我不知道如何修复它。

 类似资料:
  • 问题内容: 我想创建一个应用程序,其中应处理某些事件,就像它们被传递到父容器一样。例如,我有一个包含的。顶部立即实现了鼠标按下和拖动。为了使事件看起来像是到达的,而不是标签本身,我需要做什么。(更改源对象很重要) 是否有比实际实现事件并在父级中复制事件更好的解决方案?(在某些对象> 5个孩子之后,这将变得乏味)。 问题答案: 在事件侦听器中,您可以将事件调度到父组件。 作为事件处理函数参数: 但是

  • 问题内容: 在Tkinter中是否可以将事件直接传递给父窗口小部件? 我有一个画布,该画布被其他画布的网格覆盖(是复数吗?),我使用方法添加了该画布。我希望某些事件(例如鼠标释放事件)由父画布处理。 如果仅将事件绑定到父方法,则和坐标相对于捕获事件的子画布而言。 问题答案: Tkinter不会将事件传递给父窗口小部件。但是,您可以通过使用绑定标签(或“ bindtags”)来模拟效果。 我能给出的

  • 我正在使用gradle liquibase插件(https://github.com/liquibase/liquibase-gradle-plugin)但我不知道如何传递参数和值。 我想基于标记和日期构建回滚,但我只能使用以下命令回滚标记: 我不明白我应该如何传递数据、标签或计数。 我的成绩。构建非常简单:

  • 本文向大家介绍怎样将事件传递给子组件?相关面试题,主要包含被问及怎样将事件传递给子组件?时的应答技巧和注意事项,需要的朋友参考一下 这道题出的有问题。 一般情况下我们父组件向子组件传递的不是事件,而是事件处理函数

  • 如果我手动生成一个带有swagger-codemen-cli的客户端API,比如: ... 然后我会得到我需要的所有课程。 但是如果从maven内部运行swagger codegen maven插件,如何传递参数——完全解析? 如果没有完全解析,我会错过几个类,比如InlineResponse200。 最好的问候Fredrik

  • 我变得非常喜欢Google Gauva的EventBus,以至于我想把它包含在我的Swing GridBagBuilder API中。我们的目标是获取一个Swing组件,在任意事件中用它做一些事情,并将其订阅到EventBus。问题是我认为EventBus完成的反射操作不喜欢我的任意事件类型的泛型。 本质上,该方法接受双消费者,其中C是Swing组件,E是订阅EventBus的任意事件类型。 事件