Spigot 1.21.4如何检测玩家点击方块(解决Material无法导入问题)
解决Spigot 1.21.4中检测玩家点击讲台的问题
一、修复Cannot resolve symbol "Material"错误
这个报错通常是项目依赖配置错误或未正确导入类导致的,按以下步骤解决:
- 确认导入语句
在事件处理类顶部添加正确的导入:
import org.bukkit.Material;
- 检查项目依赖
确保构建工具(Gradle/Maven)引入了Spigot 1.21.4的API依赖:
- Gradle配置示例:
repositories { mavenCentral() maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } } dependencies { compileOnly 'org.spigotmc:spigot-api:1.21.4-R0.1-SNAPSHOT' }
- Maven配置示例:
<repositories> <repository> <id>spigotmc-repo</id> <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot-api</artifactId> <version>1.21.4-R0.1-SNAPSHOT</version> <scope>provided</scope> </dependency> </dependencies>
二、实现玩家点击讲台的检测逻辑
Spigot 1.21.4仍可通过PlayerInteractEvent实现检测,只需将目标方块类型改为LECTERN(讲台对应的Material枚举值),同时建议增加右键动作判断(符合玩家点击讲台的常规操作):
import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.entity.Player; public class LecternClickListener implements Listener { @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); // 跳过未点击方块的情况 if (event.getClickedBlock() == null) { return; } // 仅处理右键点击动作 if (event.getAction().isRightClick()) { Material blockType = event.getClickedBlock().getType(); // 判断是否点击讲台 if (blockType == Material.LECTERN) { // 执行自定义逻辑 player.sendMessage("你点击了讲台!"); } } } }
三、确保事件注册生效
在插件主类的onEnable()方法中注册事件监听器:
import org.bukkit.plugin.java.JavaPlugin; public class YourPluginMain extends JavaPlugin { @Override public void onEnable() { getServer().getPluginManager().registerEvents(new LecternClickListener(), this); } }
内容的提问来源于stack exchange,提问作者Adrian Buder
相关产品推荐
相关产品推荐

