- Баллы
- 66
- Имя в Minecraft
- Serega007
Здравствуйте! Мне нужно телепортировать оффлайн игрока редактируя player.dat но как-то не получается. В этом коде используется библиотека JNBT
Код:
package ru.main.tpoffline;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.FileUtil;
import org.jnbt.CompoundTag;
import org.jnbt.DoubleTag;
import org.jnbt.FloatTag;
import org.jnbt.ListTag;
import org.jnbt.LongTag;
import org.jnbt.NBTInputStream;
import org.jnbt.NBTOutputStream;
import org.jnbt.Tag;
@SuppressWarnings("deprecation")
public class TpOfflineCommand implements CommandExecutor {
private CompoundTag load(String player) {
NBTInputStream nbt_input;
CompoundTag tag;
FileInputStream input_stream;
File file;
try {
file = new File(Bukkit.getWorldContainer().getCanonicalPath(), "playerdata");
file = new File(file.getAbsolutePath() + File.separator + Bukkit.getOfflinePlayer(player).getUniqueId() + ".dat");
input_stream = new FileInputStream(file);
nbt_input = new NBTInputStream(input_stream);
tag = (CompoundTag) nbt_input.readTag();
nbt_input.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
return tag;
}
private void save(CompoundTag tag, String player) {
FileOutputStream output_stream;
NBTOutputStream nbt_output;
File temp;
File file;
try {
file = new File(Bukkit.getWorldContainer().getCanonicalPath(), "playerdata");
} catch (Exception e1) {
e1.printStackTrace();
return;
}
file = new File(file.getAbsolutePath() + File.separator + Bukkit.getOfflinePlayer(player).getUniqueId() + ".dat");
if (!file.exists()) {
if (file.getParent() != null) {
file.getParentFile().mkdirs();
}
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
return;
}
}
try {
temp = File.createTempFile(player, ".dat.temp");
output_stream = new FileOutputStream(temp);
nbt_output = new NBTOutputStream(output_stream);
nbt_output.writeTag(tag);
nbt_output.close();
} catch (Exception e) {
e.printStackTrace();
return;
}
FileUtil.copy(temp, file);
temp.delete();
}
private void teleport(String player, Location loc) {
CompoundTag tag = load(player);
List<Tag> pos = ((ListTag) tag.getValue().get("Pos")).getValue();
pos.set(0, new DoubleTag("", loc.getX()));
pos.set(1, new DoubleTag("", loc.getY()));
pos.set(2, new DoubleTag("", loc.getZ()));
tag.getValue().put("Pos", new ListTag("Pos", DoubleTag.class, pos));
pos = ((ListTag) tag.getValue().get("Rotation")).getValue();
pos.set(0, new FloatTag("", loc.getYaw()));
pos.set(1, new FloatTag("", loc.getPitch()));
tag.getValue().put("Rotation", new ListTag("Rotation", FloatTag.class, pos));
tag.getValue().put("WorldUUIDLeast", new LongTag("WorldUUIDLeast", loc.getWorld().getUID().getLeastSignificantBits()));
tag.getValue().put("WorldUUIDMost", new LongTag("WorldUUIDMost", loc.getWorld().getUID().getMostSignificantBits()));
System.out.println(loc.getWorld().getEnvironment().ordinal());
save(tag, player);
}
@SuppressWarnings("unused")
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "Команда доступна только игрокам.");
return true;
}
Player pl = (Player) sender;
if (!pl.hasPermission("tpoffline.tpoffline")) {
sender.sendMessage(ChatColor.RED + "У вас недостаточно прав.");
return true;
}
if (args.length == 0) {
sender.sendMessage(ChatColor.YELLOW + "/" + label + " [игрок] - Телепортировать оффлайн игрок на свою позицию.");
return true;
}
if (args.length > 0) {
if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Укажите ник игрока.");
return true;
}
World w = pl.getWorld();
if (Bukkit.getOfflinePlayer(args[0]).isOnline()) {
sender.sendMessage(ChatColor.RED + "Игрок в сети.");
return true;
}
Location loc = new Location(w, pl.getLocation().getX(), pl.getLocation().getY(), pl.getLocation().getZ(), pl.getLocation().getYaw(), pl.getLocation().getPitch());
teleport(args[0], loc);
sender.sendMessage(ChatColor.GREEN + "Игрок " + args[0] + " телепортирован.");
return true;
}
return true;
}
}
[23:44:27] [Server thread/INFO]: Serega007 issued server command: /tpofflines TestAccount
[23:44:27] [Server thread/INFO]: 0
[23:44:27] [Server thread/WARN]: java.lang.IllegalArgumentException: Invalid tag classs (org.jnbt.IntArrayTag).
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTUtils.getTypeCode(NBTUtils.java:106)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeTag(NBTOutputStream.java:77)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeCompoundTagPayload(NBTOutputStream.java:165)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeTagPayload(NBTOutputStream.java:131)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeTag(NBTOutputStream.java:89)
[23:44:27] [Server thread/WARN]: at ru.main.tpoffline.TpOfflineCommand.save(TpOfflineCommand.java:74)
[23:44:27] [Server thread/WARN]: at ru.main.tpoffline.TpOfflineCommand.teleport(TpOfflineCommand.java:99)
[23:44:27] [Server thread/WARN]: at ru.main.tpoffline.TpOfflineCommand.onCommand(TpOfflineCommand.java:133)
[23:44:27] [Server thread/WARN]: at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[23:44:27] [Server thread/WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181)
[23:44:27] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetHandlerPlayServer.func_147361_d(NetHandlerPlayServer.java:1370)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetHandlerPlayServer.func_147354_a(NetHandlerPlayServer.java:1107)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.play.client.C01PacketChatMessage.func_148833_a(C01PacketChatMessage.java:38)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.play.client.C01PacketChatMessage.func_148833_a(C01PacketChatMessage.java:53)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:245)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:181)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:1023)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:432)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:841)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:693)
[23:44:27] [Server thread/WARN]: at java.lang.Thread.run(Unknown Source)
[23:44:27] [Server thread/INFO]: 0
[23:44:27] [Server thread/WARN]: java.lang.IllegalArgumentException: Invalid tag classs (org.jnbt.IntArrayTag).
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTUtils.getTypeCode(NBTUtils.java:106)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeTag(NBTOutputStream.java:77)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeCompoundTagPayload(NBTOutputStream.java:165)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeTagPayload(NBTOutputStream.java:131)
[23:44:27] [Server thread/WARN]: at org.jnbt.NBTOutputStream.writeTag(NBTOutputStream.java:89)
[23:44:27] [Server thread/WARN]: at ru.main.tpoffline.TpOfflineCommand.save(TpOfflineCommand.java:74)
[23:44:27] [Server thread/WARN]: at ru.main.tpoffline.TpOfflineCommand.teleport(TpOfflineCommand.java:99)
[23:44:27] [Server thread/WARN]: at ru.main.tpoffline.TpOfflineCommand.onCommand(TpOfflineCommand.java:133)
[23:44:27] [Server thread/WARN]: at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[23:44:27] [Server thread/WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181)
[23:44:27] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetHandlerPlayServer.func_147361_d(NetHandlerPlayServer.java:1370)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetHandlerPlayServer.func_147354_a(NetHandlerPlayServer.java:1107)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.play.client.C01PacketChatMessage.func_148833_a(C01PacketChatMessage.java:38)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.play.client.C01PacketChatMessage.func_148833_a(C01PacketChatMessage.java:53)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:245)
[23:44:27] [Server thread/WARN]: at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:181)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:1023)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:432)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:841)
[23:44:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:693)
[23:44:27] [Server thread/WARN]: at java.lang.Thread.run(Unknown Source)