Spigot 1.12.2 PlayerJoinEvent新玩家欢迎功能逻辑异常问题咨询
Spigot 1.12.2 玩家加入欢迎功能异常修复方案
问题根因定位
- 判断逻辑完全倒置
player.hasPlayedBefore()方法的返回值规则为:返回true代表玩家此前已加入过服务器,返回false代表玩家是首次加入。你现有代码把两个分支的逻辑完全写反,导致老玩家加入触发了新玩家的逻辑。 - 分支逻辑不符合需求
需求规定老玩家加入不发送任何消息,你现有代码在老玩家分支还会发送"You've already played !"提示。 - 特效生成不符合需求
需求要求生成烟花效果,现有代码生成的是EntityType.SPLASH_POTION(溅射药水)实体。 - 缺少新玩家计数逻辑
现有代码没有实现新玩家加入计数的功能。
修复后的完整代码
1. Main类
package fr.antyss77.pandowelcome; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin { // 新增新玩家计数变量 public int newPlayerCount = 0; private String color(String arg) { return ChatColor.translateAlternateColorCodes('&', arg); } public void onEnable() { Bukkit.getConsoleSender().sendMessage(color("&6[&ePandoWelcomer&6] &ehas just started.")); // 把Main实例传入Commands,方便调用计数变量 getServer().getPluginManager().registerEvents(new Commands(this), this); } public void onDisable() { Bukkit.getConsoleSender().sendMessage(color("&6[&cPandoWelcomer&6] &ehas been shut down.")); } }
2. Commands类
package fr.antyss77.pandowelcome; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; public class Commands implements Listener { private Main main; // 构造方法接收Main实例 public Commands(Main main) { this.main = main; } @EventHandler public void PlayerJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); Location loc = player.getLocation(); boolean hasPlayed = player.hasPlayedBefore(); // 老玩家直接返回,不执行任何操作 if (hasPlayed) { return; } // 以下为首次加入的新玩家逻辑 player.sendMessage("欢迎首次加入服务器!"); player.getInventory().addItem(new ItemStack(Material.SAND, 12)); // 生成烟花实体 loc.getWorld().spawnEntity(loc, EntityType.FIREWORK); // 新玩家计数+1 main.newPlayerCount++; } }
补充说明
如果需要自定义烟花的颜色、爆炸效果等属性,可以在生成烟花实体后获取FireworkMeta进行配置,再赋值回烟花实体即可实现定制化效果。
内容的提问来源于stack exchange,提问作者user16386411
相关产品推荐
相关产品推荐

