updata tp 1
This commit is contained in:
@ -8,6 +8,7 @@ import cn.nukkit.utils.TextFormat;
|
||||
import com.alphaae.mcpe.servers.MainPlugin;
|
||||
import com.alphaae.mcpe.servers.StaticData;
|
||||
import com.alphaae.mcpe.servers.model.RePlayer;
|
||||
import com.alphaae.mcpe.servers.model.UserLocation;
|
||||
import com.alphaae.mcpe.servers.utils.ChangePlayerCoinUtils;
|
||||
|
||||
import java.util.UUID;
|
||||
@ -34,8 +35,7 @@ public class HiCommand extends Command {
|
||||
//测试指令
|
||||
RePlayer rePlayer = StaticData.rePlayerMap.get(uuid);
|
||||
ChangePlayerCoinUtils.ReduceIcon(rePlayer, 100);
|
||||
|
||||
player.dropItem(new Item(347));
|
||||
rePlayer.putUserLocation("坐标1", new UserLocation(player.getX(), player.getY(), player.getZ(), player.getLevel().getName()));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -8,6 +8,8 @@ import com.alphaae.mcpe.servers.StaticData;
|
||||
import com.alphaae.mcpe.servers.model.RePlayer;
|
||||
import com.alphaae.mcpe.servers.utils.PlayerDataUtils;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class LoadPlayerDataBlock implements JoinQuitEventBlock {
|
||||
|
||||
@Override
|
||||
@ -16,18 +18,21 @@ public class LoadPlayerDataBlock implements JoinQuitEventBlock {
|
||||
|
||||
//读取数据
|
||||
RePlayer rePlayer = PlayerDataUtils.LoadData(player);
|
||||
StaticData.rePlayerMap.put(player.getUniqueId(), rePlayer);
|
||||
|
||||
//设置玩家部分属性
|
||||
String title = rePlayer.getTitle();
|
||||
|
||||
player.setNameTag(TextFormat.colorize("&e[" + title + "] &b" + player.getName() + "&f"));
|
||||
player.setDisplayName(TextFormat.colorize("&e[" + title + "] &b" + player.getName() + "&f"));
|
||||
StaticData.rePlayerMap.put(player.getUniqueId(), rePlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
StaticData.rePlayerMap.remove(player.getUniqueId());
|
||||
UUID uuid = player.getUniqueId();
|
||||
RePlayer rePlayer = StaticData.rePlayerMap.get(uuid);
|
||||
PlayerDataUtils.SaveData(rePlayer);
|
||||
StaticData.rePlayerMap.remove(uuid);
|
||||
}
|
||||
|
||||
|
||||
|
@ -14,14 +14,18 @@ import com.sun.istack.internal.NotNull;
|
||||
|
||||
public class FormWindowMeun extends FormWindowSimple implements FormEvent {
|
||||
|
||||
private transient Player player;
|
||||
private transient RePlayer rePlayer;
|
||||
|
||||
public FormWindowMeun(@NotNull Player player) {
|
||||
super("我", "");
|
||||
RePlayer rePlayer = StaticData.rePlayerMap.get(player.getUniqueId());
|
||||
createContents(player, rePlayer);
|
||||
createButtons(player, rePlayer);
|
||||
this.player = player;
|
||||
this.rePlayer = StaticData.rePlayerMap.get(player.getUniqueId());
|
||||
createContents();
|
||||
initButtons();
|
||||
}
|
||||
|
||||
private void createContents(Player player, RePlayer rePlayer) {
|
||||
private void createContents() {
|
||||
String name = player.getName();
|
||||
String content = TextFormat.colorize("&b" + name + "&f\n" +
|
||||
"---------------------------------\n" +
|
||||
@ -32,7 +36,7 @@ public class FormWindowMeun extends FormWindowSimple implements FormEvent {
|
||||
setContent(content);
|
||||
}
|
||||
|
||||
private void createButtons(Player player, RePlayer rePlayer) {
|
||||
private void initButtons() {
|
||||
addButton(new ElementButton("传送", new ElementButtonImageData(ElementButtonImageData.IMAGE_DATA_TYPE_PATH, "textures/items/ender_pearl.png")));
|
||||
addButton(new ElementButton("任务", new ElementButtonImageData(ElementButtonImageData.IMAGE_DATA_TYPE_PATH, "textures/items/book_writable.png")));
|
||||
addButton(new ElementButton("升级", new ElementButtonImageData(ElementButtonImageData.IMAGE_DATA_TYPE_PATH, "textures/items/iron_pickaxe.png")));
|
||||
|
@ -6,34 +6,52 @@ import cn.nukkit.form.element.ElementButton;
|
||||
import cn.nukkit.form.element.ElementButtonImageData;
|
||||
import cn.nukkit.form.response.FormResponseSimple;
|
||||
import cn.nukkit.form.window.FormWindowSimple;
|
||||
import cn.nukkit.level.Level;
|
||||
import cn.nukkit.level.Location;
|
||||
import cn.nukkit.level.Position;
|
||||
import cn.nukkit.utils.TextFormat;
|
||||
import com.alphaae.mcpe.servers.MainPlugin;
|
||||
import com.alphaae.mcpe.servers.StaticData;
|
||||
import com.alphaae.mcpe.servers.event.block.form.FormEvent;
|
||||
import com.alphaae.mcpe.servers.model.RePlayer;
|
||||
import com.alphaae.mcpe.servers.model.UserLocation;
|
||||
import com.sun.istack.internal.NotNull;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
public class FormWindowTeleport extends FormWindowSimple implements FormEvent {
|
||||
|
||||
private transient Player player;
|
||||
private transient RePlayer rePlayer;
|
||||
|
||||
public FormWindowTeleport(@NotNull Player player) {
|
||||
super("传送地点", "");
|
||||
RePlayer rePlayer = StaticData.rePlayerMap.get(player.getUniqueId());
|
||||
createContents(player, rePlayer);
|
||||
createButtons(player, rePlayer);
|
||||
this.player = player;
|
||||
this.rePlayer = StaticData.rePlayerMap.get(player.getUniqueId());
|
||||
createContents();
|
||||
initButtons();
|
||||
}
|
||||
|
||||
private void createContents(Player player, RePlayer rePlayer) {
|
||||
private void createContents() {
|
||||
}
|
||||
|
||||
private void createButtons(Player player, RePlayer rePlayer) {
|
||||
private void initButtons() {
|
||||
addButton(new ElementButton("返回"));
|
||||
addButton(new ElementButton("上次死亡地点"));
|
||||
addButton(new ElementButton("主城"));
|
||||
addButton(new ElementButton(""));
|
||||
Map<String, UserLocation> userLocationMap = rePlayer.getUserLocationMap();
|
||||
Iterator iterator = userLocationMap.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry) iterator.next();
|
||||
String key = (String) entry.getKey();
|
||||
UserLocation value = (UserLocation) entry.getValue();
|
||||
addButton(new ElementButton(key + " ( " + value.getLevelName() + " )"));
|
||||
}
|
||||
}
|
||||
|
||||
public void RespondedEvent(PlayerFormRespondedEvent event) {
|
||||
// long begin = System.currentTimeMillis();
|
||||
String clickedText = ((FormResponseSimple) event.getResponse()).getClickedButton().getText();
|
||||
Player player = event.getPlayer();
|
||||
if (!event.wasClosed()) {
|
||||
@ -41,16 +59,32 @@ public class FormWindowTeleport extends FormWindowSimple implements FormEvent {
|
||||
case "返回":
|
||||
FormWindowMeun formWindowMeun = new FormWindowMeun(player);
|
||||
player.showFormWindow(formWindowMeun);
|
||||
break;
|
||||
return;
|
||||
case "上次死亡地点":
|
||||
player.sendMessage("" + player.getLevel().getName());
|
||||
break;
|
||||
return;
|
||||
case "主城":
|
||||
Position spawnLocation = player.getLevel().getSpawnLocation();
|
||||
player.teleport(spawnLocation);
|
||||
break;
|
||||
|
||||
return;
|
||||
}
|
||||
Map<String, UserLocation> userLocationMap = rePlayer.getUserLocationMap();
|
||||
Iterator iterator = userLocationMap.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry) iterator.next();
|
||||
String key = (String) entry.getKey();
|
||||
UserLocation value = (UserLocation) entry.getValue();
|
||||
if (clickedText.equals(key + " ( " + value.getLevelName() + " )")) {
|
||||
Level level = MainPlugin.getPlugin().getServer().getLevelByName(value.getLevelName());
|
||||
Position position = new Position(value.getX(), value.getY(), value.getZ(), level);
|
||||
player.teleport(position);
|
||||
// long time = System.currentTimeMillis() - begin;
|
||||
// MainPlugin.getPlugin().getServer().getLogger().info("耗时:" + time + " ms");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,12 @@
|
||||
package com.alphaae.mcpe.servers.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class RePlayer implements Serializable {
|
||||
public class RePlayer {
|
||||
private UUID uuid;
|
||||
//称号
|
||||
private String title;
|
||||
@ -66,5 +67,12 @@ public class RePlayer implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
public String getJSONData() {
|
||||
return (new Gson()).toJson(this);
|
||||
}
|
||||
|
||||
public static RePlayer decodeObject(String json) {
|
||||
return (new Gson()).fromJson(json, RePlayer.class);
|
||||
}
|
||||
|
||||
}
|
@ -2,6 +2,32 @@ package com.alphaae.mcpe.servers.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class UserLocation implements Serializable {
|
||||
public class UserLocation {
|
||||
private double x;
|
||||
private double y;
|
||||
private double z;
|
||||
private String levelName;
|
||||
|
||||
public UserLocation(double x, double y, double z, String levelName) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.levelName = levelName;
|
||||
}
|
||||
|
||||
public double getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public double getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public double getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public String getLevelName() {
|
||||
return levelName;
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ public class ChangePlayerCoinUtils {
|
||||
int userCoin = rePlayer.getCoin();
|
||||
int newCoin = userCoin + count;
|
||||
rePlayer.setCoin(newCoin);
|
||||
return PlayerDataUtils.ChangeData(rePlayer);
|
||||
return PlayerDataUtils.SaveData(rePlayer);
|
||||
}
|
||||
|
||||
public static boolean ReduceIcon(RePlayer rePlayer, int count) {
|
||||
@ -19,7 +19,7 @@ public class ChangePlayerCoinUtils {
|
||||
int newCoin = userCoin - count;
|
||||
if (newCoin >= 0) {
|
||||
rePlayer.setCoin(newCoin);
|
||||
return PlayerDataUtils.ChangeData(rePlayer);
|
||||
return PlayerDataUtils.SaveData(rePlayer);
|
||||
}
|
||||
Player player = MainPlugin.getPlugin().getServer().getPlayer(rePlayer.getUuid()).get();
|
||||
player.sendMessage(TextFormat.colorize("&4硬币不足"));
|
||||
@ -34,7 +34,7 @@ public class ChangePlayerCoinUtils {
|
||||
if (newCoin1 >= 0) {
|
||||
rePlayer1.setCoin(newCoin1);
|
||||
rePlayer2.setCoin(newCoin2);
|
||||
return PlayerDataUtils.ChangeData(rePlayer1) & PlayerDataUtils.ChangeData(rePlayer2);
|
||||
return PlayerDataUtils.SaveData(rePlayer1) & PlayerDataUtils.SaveData(rePlayer2);
|
||||
}
|
||||
Player player = MainPlugin.getPlugin().getServer().getPlayer(rePlayer1.getUuid()).get();
|
||||
player.sendMessage(TextFormat.colorize("&4硬币不足"));
|
||||
|
@ -4,8 +4,14 @@ 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 {
|
||||
@ -23,12 +29,34 @@ public class PlayerDataUtils {
|
||||
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()) {
|
||||
CreateNewPlayerData(player);
|
||||
if (!CreateNewPlayerData(player))
|
||||
return null;
|
||||
}
|
||||
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(playerDataFile));
|
||||
RePlayer rePlayer = (RePlayer) inputStream.readObject();
|
||||
//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();
|
||||
@ -36,12 +64,16 @@ public class PlayerDataUtils {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean ChangeData(RePlayer rePlayer) {
|
||||
public static boolean SaveData(RePlayer rePlayer) {
|
||||
|
||||
File playerDataFile = new File(PLAYER_DATA_FOLDER, rePlayer.getUuid().toString() + FILE_TYPE);
|
||||
try {
|
||||
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(playerDataFile, false));
|
||||
outputStream.writeObject(rePlayer);
|
||||
//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) {
|
||||
@ -57,12 +89,10 @@ public class PlayerDataUtils {
|
||||
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();
|
||||
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(playerDataFile));
|
||||
outputStream.writeObject(rePlayer);
|
||||
outputStream.close();
|
||||
return true;
|
||||
return SaveData(rePlayer);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
Reference in New Issue
Block a user