You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spigot 1.12.2 PlayerJoinEvent新玩家欢迎功能逻辑异常问题咨询

Spigot 1.12.2 玩家加入欢迎功能异常修复方案

问题根因定位

  1. 判断逻辑完全倒置
    player.hasPlayedBefore() 方法的返回值规则为:返回true代表玩家此前已加入过服务器,返回false代表玩家是首次加入。你现有代码把两个分支的逻辑完全写反,导致老玩家加入触发了新玩家的逻辑。
  2. 分支逻辑不符合需求
    需求规定老玩家加入不发送任何消息,你现有代码在老玩家分支还会发送"You've already played !"提示。
  3. 特效生成不符合需求
    需求要求生成烟花效果,现有代码生成的是EntityType.SPLASH_POTION(溅射药水)实体。
  4. 缺少新玩家计数逻辑
    现有代码没有实现新玩家加入计数的功能。

修复后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:09:03