This repository has been archived on 2024-12-29. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nukkit-alphaapi/src/com/alphaae/mcpe/servers/utils/PlayerDataUtils.java
2019-05-11 16:30:23 +08:00

102 lines
3.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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置为0limit放到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;
}
}