102 lines
3.9 KiB
Java
102 lines
3.9 KiB
Java
package com.alphaae.mcpe.servers.utils;
|
||
|
||
import cn.nukkit.Player;
|
||
import cn.nukkit.item.Item;
|
||
import com.alphaae.mcpe.servers.MainPlugin;
|
||
import com.alphaae.mcpe.servers.model.RePlayer;
|
||
import com.alphaae.mcpe.servers.model.UserLocation;
|
||
|
||
import java.io.*;
|
||
import java.nio.ByteBuffer;
|
||
import java.nio.CharBuffer;
|
||
import java.nio.channels.FileChannel;
|
||
import java.nio.charset.Charset;
|
||
import java.nio.charset.CharsetDecoder;
|
||
import java.util.UUID;
|
||
|
||
public class PlayerDataUtils {
|
||
|
||
private static final String FILE_TYPE = ".replayer";
|
||
private static final File DATA_FOLDER = MainPlugin.getPlugin().getDataFolder();
|
||
private static final File PLAYER_DATA_FOLDER = new File(DATA_FOLDER, "PlayerData");
|
||
|
||
static {
|
||
if (!PLAYER_DATA_FOLDER.exists()) {
|
||
PLAYER_DATA_FOLDER.mkdirs();
|
||
}
|
||
}
|
||
|
||
public static RePlayer LoadData(Player player) {
|
||
UUID uuid = player.getUniqueId();
|
||
try {
|
||
// long begin = System.currentTimeMillis();
|
||
File playerDataFile = new File(PLAYER_DATA_FOLDER, uuid.toString() + FILE_TYPE);
|
||
if (!playerDataFile.exists()) {
|
||
if (!CreateNewPlayerData(player))
|
||
return null;
|
||
}
|
||
//NIOs
|
||
StringBuilder json = new StringBuilder();
|
||
Charset charset = Charset.forName("UTF-8");
|
||
CharsetDecoder decoder = charset.newDecoder();
|
||
FileInputStream inputStream = new FileInputStream(playerDataFile);
|
||
FileChannel channel = inputStream.getChannel();
|
||
ByteBuffer byteBuffer = ByteBuffer.allocate(1024); //初始化缓冲区大小
|
||
CharBuffer charBuffer = CharBuffer.allocate(1024);
|
||
channel.read(byteBuffer); //将文件通道里面的字节读到缓冲区中
|
||
byteBuffer.flip(); //将position置为0,limit放到position位置
|
||
decoder.decode(byteBuffer, charBuffer, false); //解码
|
||
charBuffer.flip();
|
||
while (charBuffer.hasRemaining()) {
|
||
json.append(charBuffer.get());
|
||
}
|
||
channel.close();
|
||
inputStream.close();
|
||
|
||
RePlayer rePlayer = RePlayer.decodeObject(json.toString()); //解码对象
|
||
MainPlugin.getPlugin().getServer().getLogger().info("" + rePlayer.getJSONData());
|
||
// long time = System.currentTimeMillis() - begin;
|
||
// MainPlugin.getPlugin().getServer().getLogger().info("角色数据载入耗时:" + time + " ms");
|
||
return rePlayer;
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
return null;
|
||
}
|
||
|
||
public static boolean SaveData(RePlayer rePlayer) {
|
||
|
||
File playerDataFile = new File(PLAYER_DATA_FOLDER, rePlayer.getUuid().toString() + FILE_TYPE);
|
||
try {
|
||
//NIO
|
||
FileOutputStream outputStream = new FileOutputStream(playerDataFile);
|
||
FileChannel channel = outputStream.getChannel();
|
||
ByteBuffer buffer = ByteBuffer.wrap(rePlayer.getJSONData().getBytes("UTF-8"));
|
||
channel.write(buffer);
|
||
channel.close();
|
||
outputStream.close();
|
||
return true;
|
||
} catch (IOException e) {
|
||
e.printStackTrace();
|
||
}
|
||
return false;
|
||
}
|
||
|
||
private static boolean CreateNewPlayerData(Player player) {
|
||
try {
|
||
UUID uuid = player.getUniqueId();
|
||
//给予初始玩家的操作
|
||
player.getInventory().addItem(new Item(347));
|
||
|
||
RePlayer rePlayer = new RePlayer(uuid, "新火", 2000);
|
||
|
||
File playerDataFile = new File(PLAYER_DATA_FOLDER, uuid.toString() + FILE_TYPE);
|
||
playerDataFile.createNewFile();
|
||
return SaveData(rePlayer);
|
||
} catch (IOException e) {
|
||
e.printStackTrace();
|
||
}
|
||
return false;
|
||
}
|
||
}
|