BackHome.java v1.0
允许玩家使用/return回城,回城目标可在configs.yml中指定世界和坐标。
命令列表
- return回城到指定配置
package com.yourdomain.backhomeplugin;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/**
* @pluginName BackHome
* @author ice
* @version 1.0
* @description 允许玩家使用/return回城,回城目标可在configs.yml中指定世界和坐标。
* [command]return|回城到指定配置[/command]
*/
public class BackHome extends JavaPlugin {
private File configFile;
private String targetWorld = "world";
private double targetX = 0.5, targetY = 64, targetZ = 0.5, targetYaw = 0, targetPitch = 0;
@Override
public void onEnable() {
// 确认plugins/Scriptirc/目录存在
File scriptircDir = new File(getDataFolder().getParentFile(), "Scriptirc");
File pluginDir = new File(scriptircDir, "script_src");
if (!pluginDir.exists()) {
pluginDir.mkdirs(); // 创建目录
}
// 配置文件路径
configFile = new File(pluginDir, "configs.yml");
// 初始化或读取配置
loadOrInitConfig();
getLogger().info("BackHome插件已启用。使用/return命令回城。");
}
@Override
public void onDisable() {
getLogger().info("BackHome插件已卸载。");
}
private void loadOrInitConfig() {
if (!configFile.exists()) {
// 若配置不存在,则创建默认配置文件
try (FileWriter writer = new FileWriter(configFile)) {
writer.write("world: world\n");
writer.write("x: 0.5\n");
writer.write("y: 64\n");
writer.write("z: 0.5\n");
writer.write("yaw: 0\n");
writer.write("pitch: 0\n");
targetWorld = "world";
targetX = 0.5; targetY = 64; targetZ = 0.5; targetYaw = 0; targetPitch = 0;
getLogger().info("生成默认configs.yml,请自行修改世界名与目标坐标。");
} catch (IOException e) {
getLogger().warning("无法创建默认configs.yml: " + e.getMessage());
}
} else {
// 读取配置文件
try (Scanner sc = new Scanner(configFile)) {
while (sc.hasNextLine()) {
String line = sc.nextLine().trim();
if (line.startsWith("world:")) targetWorld = line.replace("world:", "").trim();
if (line.startsWith("x:")) targetX = Double.parseDouble(line.replace("x:", "").trim());
if (line.startsWith("y:")) targetY = Double.parseDouble(line.replace("y:", "").trim());
if (line.startsWith("z:")) targetZ = Double.parseDouble(line.replace("z:", "").trim());
if (line.startsWith("yaw:")) targetYaw = Float.parseFloat(line.replace("yaw:", "").trim());
if (line.startsWith("pitch:")) targetPitch = Float.parseFloat(line.replace("pitch:", "").trim());
}
} catch (Exception e) {
getLogger().warning("读取configs.yml出错: " + e.getMessage());
}
}
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("return")) {
// 只允许玩家执行
if (!(sender instanceof Player)) {
sender.sendMessage("§c只有玩家才能使用此命令!");
return true;
}
Player player = (Player) sender;
// 再次尝试读取,以确保配置变化后有效
loadOrInitConfig();
World world = Bukkit.getWorld(targetWorld);
if (world == null) {
player.sendMessage("§c目标世界【"+ targetWorld +"】不存在!请检查configs.yml。");
return true;
}
// 传送并设置朝向
Location loc = new Location(world, targetX, targetY, targetZ, (float)targetYaw, (float)targetPitch);
player.teleport(loc);
player.sendMessage("§a你已被传送至回城点!");
return true;
}
return false;
}
}