我想将Minecraft游戏的输出(玩家坐标)保存到名为player.log的文件中。
如果我的玩家用户名是“abc”,则文件名应为“abce.log”。
然而,我找不到这个文件在我的服务器上的存储位置-它不在我希望它在的插件文件夹中。
我已经附上了下面的截图,我想在哪里保存文件(这是远程在外部shock-byte服务器插件文件夹)。
下面的代码:
package newestfile.here.newestplugin;
import java.util.UUID;
import java.nio.charset.StandardCharsets;
import java.nio.file.StandardOpenOption;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.io.File;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.entity.Player;
import org.bukkit.Location;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;
import java.nio.file.Files;
public class Main extends JavaPlugin implements Listener
{
boolean stopRepeater;
HashMap<UUID, BukkitTask> tasks = new HashMap<>();
private File dataFolder;
public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(this,this);
getLogger().info("HELLO! WELCOME TO THE TRACKER PLUGIN");
dataFolder = new File(getDataFolder(), "data");
dataFolder.mkdirs();
}
@EventHandler
public void onLogin(final PlayerJoinEvent event) {
final Player thePlayer = event.getPlayer();
this.stopRepeater = true;
final Location playerSpawnLocation = thePlayer.getLocation();
getLogger().info("Welcome " + thePlayer.getName() + ". Your current position is: " + playerSpawnLocation);
BukkitTask task = getServer().getScheduler().runTaskTimer(this, () -> {
if(this.stopRepeater) {
this.logToFile(thePlayer, thePlayer.getLocation());
}
}, 0L, 20L);
tasks.put(thePlayer.getUniqueId(),task);}
@EventHandler
public void onQuit(final PlayerQuitEvent event) {
Player thePlayer = event.getPlayer();
if(!thePlayer.isOnline()) {
this.stopRepeater = false;
getLogger().info(String.valueOf(event.getPlayer().getName()) + " has left the game");
BukkitTask task = tasks.remove(thePlayer.getUniqueId());
if(task != null) {
task.cancel();
}
}
}
public void logToFile(final Player currentPlayer, final Location playerCurrentLocation) {
try {
String content = String.valueOf(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(new Date())) + " CurrentLocation(x,y,z): " + playerCurrentLocation.getBlockX() + " " + playerCurrentLocation.getBlockY() + " " + playerCurrentLocation.getBlockZ() + "\n";
final File file = new File(dataFolder, currentPlayer.getName() + ".log");
if (!file.exists()) {
file.createNewFile();
}
Files.write(file.toPath(),content.getBytes(StandardCharsets.UTF_8),StandardOpenOption.APPEND);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- *“latest.log”**文件的输出:
2条答案
按热度按时间rqqzpn5f1#
事实上,你的插件是由server.jar执行的,所以文件在与spigot.jar相同的目录下产生
Example
cgvd09ve2#
我的代码最后当我的**'plugin.yml'和' pom.xml'**文件包含以下信息时。
我现在可以在我的plugins文件夹中找到一个嵌套的“player.log”文件,它可以打印出播放器坐标,如下所示:
插件.yml:
pom.xml文件: