FirstJoinCommand.java v1.0
首次进服执行配置指令,管理员可用/testfirstjoincmd测试,指令可配置。
命令列表
- testfirstjoincmd管理员测试首次进服指令
package site.scriptirc.firstjoincmd;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* @pluginName FirstJoinCommand
* @author Scriptirc
* @version 1.0
* @description 首次进服执行配置指令,管理员可用/testfirstjoincmd测试,指令可配置。
* [command]testfirstjoincmd|管理员测试首次进服指令[/command]
* [Permission]firstjoincmd.admin|允许手动测试首次进服指令[/Permission]
*/
public class FirstJoinCommandPlugin extends JavaPlugin implements Listener {
private File configFile;
private YamlConfiguration config;
private static final String COMMANDS_KEY = "first-join-commands";
@Override
public void onEnable() {
// 注册事件监听器
Bukkit.getPluginManager().registerEvents(this, this);
// 加载或创建配置文件
loadConfig();
getLogger().info("FirstJoinCommand 插件已启用。");
}
@Override
public void onDisable() {
getLogger().info("FirstJoinCommand 插件已关闭。");
}
// 监听玩家加入事件,判断是否首次进服
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!player.hasPlayedBefore()) {
// 首次进服,执行配置指令
executeConfiguredCommands(player);
}
}
// 管理员测试命令
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("testfirstjoincmd")) {
if (!sender.hasPermission("firstjoincmd.admin")) {
sender.sendMessage("§c你没有权限执行此命令。");
return true;
}
if (args.length == 0) {
if (sender instanceof Player) {
executeConfiguredCommands((Player) sender);
sender.sendMessage("§a已为你执行首次进服配置指令(测试模式)。");
} else {
sender.sendMessage("§c控制台请指定玩家名:/testfirstjoincmd <玩家名>");
}
return true;
} else {
Player target = Bukkit.getPlayerExact(args[0]);
if (target != null && target.isOnline()) {
executeConfiguredCommands(target);
sender.sendMessage("§a已为玩家 " + target.getName() + " 执行首次进服配置指令(测试模式)。");
} else {
sender.sendMessage("§c未找到该玩家。");
}
return true;
}
}
return false;
}
// 执行配置文件中的指令(以控制台身份)
private void executeConfiguredCommands(Player player) {
List<String> commands = config.getStringList(COMMANDS_KEY);
for (String cmd : commands) {
// 支持变量替换:{player}为玩家名
String parsed = cmd.replace("{player}", player.getName());
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), parsed);
}
}
// 加载或创建配置文件
private void loadConfig() {
configFile = new File(getDataFolder(), "commands.yml");
if (!configFile.exists()) {
// 首次生成配置文件,写入默认内容
configFile.getParentFile().mkdirs();
config = new YamlConfiguration();
config.set(COMMANDS_KEY, java.util.Arrays.asList(
"say 欢迎 {player} 加入服务器!",
"give {player} minecraft:bread 5"
));
try {
config.save(configFile);
} catch (IOException e) {
getLogger().warning("无法保存默认配置文件:" + e.getMessage());
}
} else {
config = YamlConfiguration.loadConfiguration(configFile);
}
}
}