fix #22
This commit is contained in:
parent
1ec9be4e5a
commit
bb45488186
|
|
@ -39,7 +39,7 @@ public class ModsSupport {
|
||||||
for (int i = 0; i < handler.getSlots(); i++) {
|
for (int i = 0; i < handler.getSlots(); i++) {
|
||||||
try {
|
try {
|
||||||
if (curios.get(i) != null){
|
if (curios.get(i) != null){
|
||||||
handler.getEquippedCurios().setStackInSlot(i, ItemStack.of(NbtUtils.snbtToStructure(curios.get(i).replace("|", ","))));
|
handler.getEquippedCurios().setStackInSlot(i, ItemStack.of(NbtUtils.snbtToStructure(curios.get(i).replace("|",",").replace("^","\"").replace("<","{").replace(">","}").replace("~", "'"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (CommandSyntaxException e) {
|
} catch (CommandSyntaxException e) {
|
||||||
|
|
@ -68,7 +68,7 @@ public class ModsSupport {
|
||||||
itemHandler.ifPresent(handler -> {
|
itemHandler.ifPresent(handler -> {
|
||||||
for (int i = 0; i < handler.getSlots(); i++) {
|
for (int i = 0; i < handler.getSlots(); i++) {
|
||||||
if (!handler.getEquippedCurios().getStackInSlot(i).isEmpty()) {
|
if (!handler.getEquippedCurios().getStackInSlot(i).isEmpty()) {
|
||||||
String sNBT= handler.getEquippedCurios().getStackInSlot(i).serializeNBT().toString().replace(",", "|");
|
String sNBT= VanillaSync.serialize(handler.getEquippedCurios().getStackInSlot(i).serializeNBT().toString());
|
||||||
curios.put(i, sNBT);
|
curios.put(i, sNBT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
import net.minecraftforge.event.server.ServerStoppedEvent;
|
import net.minecraftforge.event.server.ServerStoppedEvent;
|
||||||
import net.minecraftforge.eventbus.api.Event;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import vip.fubuki.playersync.config.JdbcConfig;
|
import vip.fubuki.playersync.config.JdbcConfig;
|
||||||
|
|
@ -47,7 +46,7 @@ public class VanillaSync {
|
||||||
ResultSet resultSet=queryResult.resultSet();
|
ResultSet resultSet=queryResult.resultSet();
|
||||||
ServerPlayer serverPlayer = (ServerPlayer) event.getEntity();
|
ServerPlayer serverPlayer = (ServerPlayer) event.getEntity();
|
||||||
if(!resultSet.next()){
|
if(!resultSet.next()){
|
||||||
Store(event.getEntity(),true,Dist.CLIENT.isDedicatedServer());
|
store(event.getEntity(),true,Dist.CLIENT.isDedicatedServer());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean online = resultSet.getBoolean("online");
|
boolean online = resultSet.getBoolean("online");
|
||||||
|
|
@ -89,18 +88,18 @@ public class VanillaSync {
|
||||||
if(armor_data.length()>2) {
|
if(armor_data.length()>2) {
|
||||||
Map<Integer, String> equipment = LocalJsonUtil.StringToEntryMap(armor_data);
|
Map<Integer, String> equipment = LocalJsonUtil.StringToEntryMap(armor_data);
|
||||||
for (Map.Entry<Integer, String> entry : equipment.entrySet()) {
|
for (Map.Entry<Integer, String> entry : equipment.entrySet()) {
|
||||||
serverPlayer.getInventory().armor.set(entry.getKey(), Deserialize(entry));
|
serverPlayer.getInventory().armor.set(entry.getKey(), deserialize(entry));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Inventory
|
//Inventory
|
||||||
Map<Integer,String> inventory = LocalJsonUtil.StringToEntryMap(resultSet.getString("inventory"));
|
Map<Integer,String> inventory = LocalJsonUtil.StringToEntryMap(resultSet.getString("inventory"));
|
||||||
for (Map.Entry<Integer, String> entry : inventory.entrySet()) {
|
for (Map.Entry<Integer, String> entry : inventory.entrySet()) {
|
||||||
serverPlayer.getInventory().setItem(entry.getKey(),Deserialize(entry));
|
serverPlayer.getInventory().setItem(entry.getKey(), deserialize(entry));
|
||||||
}
|
}
|
||||||
//Ender chest
|
//Ender chest
|
||||||
Map<Integer,String> ender_chest = LocalJsonUtil.StringToEntryMap(resultSet.getString("enderchest"));
|
Map<Integer,String> ender_chest = LocalJsonUtil.StringToEntryMap(resultSet.getString("enderchest"));
|
||||||
for (Map.Entry<Integer, String> entry : ender_chest.entrySet()) {
|
for (Map.Entry<Integer, String> entry : ender_chest.entrySet()) {
|
||||||
serverPlayer.getEnderChestInventory().setItem(entry.getKey(),Deserialize(entry));
|
serverPlayer.getEnderChestInventory().setItem(entry.getKey(), deserialize(entry));
|
||||||
}
|
}
|
||||||
//Effects
|
//Effects
|
||||||
String effectData=resultSet.getString("effects");
|
String effectData=resultSet.getString("effects");
|
||||||
|
|
@ -124,7 +123,7 @@ public class VanillaSync {
|
||||||
byte [] bytes=resultSet.getString("advancements").getBytes();
|
byte [] bytes=resultSet.getString("advancements").getBytes();
|
||||||
Files.write(advancements.toPath(),bytes);
|
Files.write(advancements.toPath(),bytes);
|
||||||
}else{
|
}else{
|
||||||
File[] files= ScanAdvancementsFile(player_uuid, gameDir);
|
File[] files= scanAdvancementsFile(player_uuid, gameDir);
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
if(file==null) continue;
|
if(file==null) continue;
|
||||||
byte [] bytes=resultSet.getString("advancements").getBytes();
|
byte [] bytes=resultSet.getString("advancements").getBytes();
|
||||||
|
|
@ -141,7 +140,7 @@ public class VanillaSync {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void OnPlayerJoin(PlayerEvent.PlayerLoggedInEvent event){
|
public static void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event){
|
||||||
executorService.submit(()->{
|
executorService.submit(()->{
|
||||||
try {
|
try {
|
||||||
doPlayerJoin(event);
|
doPlayerJoin(event);
|
||||||
|
|
@ -152,16 +151,20 @@ public class VanillaSync {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ItemStack Deserialize(Map.Entry<Integer, String> entry) throws CommandSyntaxException {
|
public static ItemStack deserialize(Map.Entry<Integer, String> entry) throws CommandSyntaxException {
|
||||||
String nbt= entry.getValue().replace("|",",").replace("^","\"").replace("<","{").replace(">","}").replace("~", "'");
|
String nbt= entry.getValue().replace("|",",").replace("^","\"").replace("<","{").replace(">","}").replace("~", "'");
|
||||||
CompoundTag compoundTag = NbtUtils.snbtToStructure(nbt);
|
CompoundTag compoundTag = NbtUtils.snbtToStructure(nbt);
|
||||||
return ItemStack.of(compoundTag);
|
return ItemStack.of(compoundTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String serialize(String object){
|
||||||
|
return object.replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~");
|
||||||
|
}
|
||||||
|
|
||||||
public static void doPlayerSaveToFile(PlayerEvent.SaveToFile event) throws SQLException, IOException {
|
public static void doPlayerSaveToFile(PlayerEvent.SaveToFile event) throws SQLException, IOException {
|
||||||
JDBCsetUp.executeUpdate("UPDATE server_info SET last_update=" + System.currentTimeMillis() + " WHERE id=" + JdbcConfig.SERVER_ID.get());
|
JDBCsetUp.executeUpdate("UPDATE server_info SET last_update=" + System.currentTimeMillis() + " WHERE id=" + JdbcConfig.SERVER_ID.get());
|
||||||
if(!event.getEntity().getTags().contains("player_synced")) return;
|
if(!event.getEntity().getTags().contains("player_synced")) return;
|
||||||
Store(event.getEntity(),false,Dist.CLIENT.isDedicatedServer());
|
store(event.getEntity(),false,Dist.CLIENT.isDedicatedServer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
@ -183,7 +186,7 @@ public class VanillaSync {
|
||||||
public static void doPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) throws SQLException, IOException {
|
public static void doPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) throws SQLException, IOException {
|
||||||
String player_uuid = event.getEntity().getUUID().toString();
|
String player_uuid = event.getEntity().getUUID().toString();
|
||||||
JDBCsetUp.executeUpdate("UPDATE player_data SET online= '0' WHERE uuid='"+player_uuid+"'");
|
JDBCsetUp.executeUpdate("UPDATE player_data SET online= '0' WHERE uuid='"+player_uuid+"'");
|
||||||
Store(event.getEntity(),false,Dist.CLIENT.isDedicatedServer());
|
store(event.getEntity(),false,Dist.CLIENT.isDedicatedServer());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -202,7 +205,7 @@ public class VanillaSync {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Store(Player player, boolean init,boolean isServer) throws SQLException, IOException {
|
public static void store(Player player, boolean init, boolean isServer) throws SQLException, IOException {
|
||||||
String player_uuid = player.getUUID().toString();
|
String player_uuid = player.getUUID().toString();
|
||||||
//Easy part
|
//Easy part
|
||||||
int XP = player.totalExperience;
|
int XP = player.totalExperience;
|
||||||
|
|
@ -214,20 +217,20 @@ public class VanillaSync {
|
||||||
for (int i = 0; i < player.getInventory().armor.size(); i++) {
|
for (int i = 0; i < player.getInventory().armor.size(); i++) {
|
||||||
ItemStack itemStack = player.getInventory().armor.get(i);
|
ItemStack itemStack = player.getInventory().armor.get(i);
|
||||||
if(itemStack.isEmpty()) continue;
|
if(itemStack.isEmpty()) continue;
|
||||||
equipment.put(i,itemStack.serializeNBT().toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
equipment.put(i,serialize(itemStack.serializeNBT().toString()));
|
||||||
}
|
}
|
||||||
//inventory
|
//inventory
|
||||||
Inventory inventory = player.getInventory();
|
Inventory inventory = player.getInventory();
|
||||||
Map<Integer,String> inventoryMap=new HashMap<>();
|
Map<Integer,String> inventoryMap = new HashMap<>();
|
||||||
for (int i = 0; i < inventory.items.size(); i++) {
|
for (int i = 0; i < inventory.items.size(); i++) {
|
||||||
CompoundTag itemNBT = inventory.items.get(i).serializeNBT();
|
CompoundTag itemNBT = inventory.items.get(i).serializeNBT();
|
||||||
inventoryMap.put(i,itemNBT.toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
inventoryMap.put(i,serialize(itemNBT.toString()));
|
||||||
}
|
}
|
||||||
//EnderChest
|
//EnderChest
|
||||||
Map<Integer, String> ender_chest=new HashMap<>();
|
Map<Integer, String> ender_chest = new HashMap<>();
|
||||||
for (int i=0;i< player.getEnderChestInventory().getContainerSize();i++) {
|
for (int i=0;i< player.getEnderChestInventory().getContainerSize();i++) {
|
||||||
CompoundTag itemNBT = player.getEnderChestInventory().getItem(i).serializeNBT();
|
CompoundTag itemNBT = player.getEnderChestInventory().getItem(i).serializeNBT();
|
||||||
ender_chest.put(i,itemNBT.toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
ender_chest.put(i,serialize(itemNBT.toString()));
|
||||||
}
|
}
|
||||||
//Effects
|
//Effects
|
||||||
Map<MobEffect,MobEffectInstance> effects= player.getActiveEffectsMap();
|
Map<MobEffect,MobEffectInstance> effects= player.getActiveEffectsMap();
|
||||||
|
|
@ -244,7 +247,7 @@ public class VanillaSync {
|
||||||
advancements = new File(gameDir, JdbcConfig.SYNC_WORLD.get().get(0)+"/advancements"+"/"+player_uuid+".json");
|
advancements = new File(gameDir, JdbcConfig.SYNC_WORLD.get().get(0)+"/advancements"+"/"+player_uuid+".json");
|
||||||
}else{
|
}else{
|
||||||
// File gameDir = Minecraft.getInstance().gameDirectory;
|
// File gameDir = Minecraft.getInstance().gameDirectory;
|
||||||
File[] files=ScanAdvancementsFile(player_uuid, gameDir);
|
File[] files= scanAdvancementsFile(player_uuid, gameDir);
|
||||||
//Get LastModified
|
//Get LastModified
|
||||||
long latestModifiedDate = 0;
|
long latestModifiedDate = 0;
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
|
|
@ -267,7 +270,7 @@ public class VanillaSync {
|
||||||
}else JDBCsetUp.executeUpdate("UPDATE player_data SET inventory = '"+inventoryMap+"',armor='"+equipment+"' ,xp='"+XP+"',effects='"+effectMap+"',enderchest='"+ender_chest+"',score='"+score+"',food_level='"+food_level+"',health='"+health+"',advancements='"+json+"' WHERE uuid = '"+player_uuid+"'");
|
}else JDBCsetUp.executeUpdate("UPDATE player_data SET inventory = '"+inventoryMap+"',armor='"+equipment+"' ,xp='"+XP+"',effects='"+effectMap+"',enderchest='"+ender_chest+"',score='"+score+"',food_level='"+food_level+"',health='"+health+"',advancements='"+json+"' WHERE uuid = '"+player_uuid+"'");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static File[] ScanAdvancementsFile(String player_uuid, File gameDir) {
|
private static File[] scanAdvancementsFile(String player_uuid, File gameDir) {
|
||||||
File[] files = new File[JdbcConfig.SYNC_WORLD.get().size()];
|
File[] files = new File[JdbcConfig.SYNC_WORLD.get().size()];
|
||||||
for (int i = 0; i < JdbcConfig.SYNC_WORLD.get().size(); i++) {
|
for (int i = 0; i < JdbcConfig.SYNC_WORLD.get().size(); i++) {
|
||||||
File advanceFile=new File(gameDir, "saves/"+JdbcConfig.SYNC_WORLD.get().get(i)+"/advancements"+"/"+player_uuid+".json");
|
File advanceFile=new File(gameDir, "saves/"+JdbcConfig.SYNC_WORLD.get().get(i)+"/advancements"+"/"+player_uuid+".json");
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public class JDBCsetUp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Update(String sql, String... argument) throws SQLException{
|
public static void update(String sql, String... argument) throws SQLException{
|
||||||
Connection connection = getConnection();
|
Connection connection = getConnection();
|
||||||
|
|
||||||
try (Statement useStatement = connection.createStatement()) {
|
try (Statement useStatement = connection.createStatement()) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user