update 1.2.0
This commit is contained in:
parent
76836f680f
commit
e3f4aa888c
|
|
@ -2,6 +2,7 @@
|
||||||
This is a Minecraft forge mod using Mysql backend to make player data synchronization between different servers.
|
This is a Minecraft forge mod using Mysql backend to make player data synchronization between different servers.
|
||||||
Such as equipment,inventory,effects,experience,food level.Any other mods support is also possible.
|
Such as equipment,inventory,effects,experience,food level.Any other mods support is also possible.
|
||||||
Support version now:
|
Support version now:
|
||||||
|
1.20.1
|
||||||
1.19-1.19.3
|
1.19-1.19.3
|
||||||
1.18.2
|
1.18.2
|
||||||
1.16.5
|
1.16.5
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(17)
|
||||||
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
|
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
|
||||||
minecraft {
|
minecraft {
|
||||||
|
|
||||||
mappings channel: 'official', version: '1.18.2'
|
mappings channel: 'official', version: '1.16.5'
|
||||||
|
|
||||||
//accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default.
|
//accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default.
|
||||||
|
|
||||||
|
|
@ -116,14 +116,14 @@ repositories {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft 'net.minecraftforge:forge:1.18.2-40.1.0'
|
minecraft 'net.minecraftforge:forge:1.16.5-36.2.0'
|
||||||
|
|
||||||
jarJar("curse.maven:MySQL-561280:3685108") {
|
jarJar("curse.maven:MySQL-561280:3685108") {
|
||||||
jarJar.ranged(it, '[3685108,)')
|
jarJar.ranged(it, '[3685108,)')
|
||||||
}
|
}
|
||||||
|
|
||||||
runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.18.2-5.0.7.1")
|
runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.5-4.1.0.1")
|
||||||
compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.18.2-5.0.7.1:api")
|
compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.5-4.1.0.1:api")
|
||||||
implementation fg.deobf("curse.maven:MySQL-561280:3685108")
|
implementation fg.deobf("curse.maven:MySQL-561280:3685108")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
package vip.fubuki.playersync;
|
package vip.fubuki.playersync;
|
||||||
|
|
||||||
import com.mojang.logging.LogUtils;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.server.ServerStartingEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.ModList;
|
import net.minecraftforge.fml.ModList;
|
||||||
|
|
@ -10,8 +8,8 @@ import net.minecraftforge.fml.ModLoadingContext;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
|
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import vip.fubuki.playersync.config.JdbcConfig;
|
import vip.fubuki.playersync.config.JdbcConfig;
|
||||||
import vip.fubuki.playersync.sync.ChatSync;
|
import vip.fubuki.playersync.sync.ChatSync;
|
||||||
import vip.fubuki.playersync.sync.VanillaSync;
|
import vip.fubuki.playersync.sync.VanillaSync;
|
||||||
|
|
@ -23,7 +21,6 @@ import java.sql.SQLException;
|
||||||
public class PlayerSync
|
public class PlayerSync
|
||||||
{
|
{
|
||||||
public static final String MODID = "playersync";
|
public static final String MODID = "playersync";
|
||||||
public static final Logger LOGGER = LogUtils.getLogger();
|
|
||||||
public PlayerSync()
|
public PlayerSync()
|
||||||
{
|
{
|
||||||
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||||
|
|
@ -40,7 +37,7 @@ public class PlayerSync
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onServerStarting(ServerStartingEvent event) throws SQLException {
|
public void onServerStarting(FMLServerStartingEvent event) throws SQLException {
|
||||||
JDBCsetUp.executeUpdate("CREATE DATABASE IF NOT EXISTS "+JdbcConfig.DATABASE_NAME.get());
|
JDBCsetUp.executeUpdate("CREATE DATABASE IF NOT EXISTS "+JdbcConfig.DATABASE_NAME.get());
|
||||||
|
|
||||||
JDBCsetUp.executeUpdate("CREATE TABLE IF NOT EXISTS player_data (uuid CHAR(36) NOT NULL," +
|
JDBCsetUp.executeUpdate("CREATE TABLE IF NOT EXISTS player_data (uuid CHAR(36) NOT NULL," +
|
||||||
|
|
@ -63,7 +60,6 @@ public class PlayerSync
|
||||||
if(ModList.get().isLoaded("curios")) {
|
if(ModList.get().isLoaded("curios")) {
|
||||||
JDBCsetUp.executeUpdate("CREATE TABLE IF NOT EXISTS curios (uuid CHAR(36) NOT NULL,curios_item BLOB, PRIMARY KEY (uuid))");
|
JDBCsetUp.executeUpdate("CREATE TABLE IF NOT EXISTS curios (uuid CHAR(36) NOT NULL,curios_item BLOB, PRIMARY KEY (uuid))");
|
||||||
}
|
}
|
||||||
LOGGER.info("PlayerSync is ready!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package vip.fubuki.playersync.sync;
|
package vip.fubuki.playersync.sync;
|
||||||
|
|
||||||
import net.minecraft.network.chat.ChatType;
|
import net.minecraft.server.management.PlayerList;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.util.text.ChatType;
|
||||||
import net.minecraft.server.players.PlayerList;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
@ -54,7 +54,7 @@ public class ChatSync {
|
||||||
while(resultSet.next()) {
|
while(resultSet.next()) {
|
||||||
String player = resultSet.getString("player");
|
String player = resultSet.getString("player");
|
||||||
String message = resultSet.getString("message");
|
String message = resultSet.getString("message");
|
||||||
Component textComponents = Component.nullToEmpty(player+": "+message);
|
ITextComponent textComponents = ITextComponent.nullToEmpty(player+": "+message);
|
||||||
playerList.broadcastMessage(textComponents, ChatType.CHAT, UUID.nameUUIDFromBytes(player.getBytes()));
|
playerList.broadcastMessage(textComponents, ChatType.CHAT, UUID.nameUUIDFromBytes(player.getBytes()));
|
||||||
}
|
}
|
||||||
resultSet.close();
|
resultSet.close();
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package vip.fubuki.playersync.sync;
|
package vip.fubuki.playersync.sync;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import net.minecraft.nbt.NbtUtils;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.nbt.JsonToNBT;
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
import net.minecraftforge.fml.ModList;
|
import net.minecraftforge.fml.ModList;
|
||||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
|
|
@ -18,7 +18,7 @@ import java.util.Map;
|
||||||
|
|
||||||
public class ModsSupport {
|
public class ModsSupport {
|
||||||
|
|
||||||
public void onPlayerJoin(Player player) throws SQLException {
|
public void onPlayerJoin(PlayerEntity player) throws SQLException {
|
||||||
if (ModList.get().isLoaded("curios")) {
|
if (ModList.get().isLoaded("curios")) {
|
||||||
/*
|
/*
|
||||||
Curios Support
|
Curios Support
|
||||||
|
|
@ -34,7 +34,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) continue;
|
if (curios.get(i) == null) continue;
|
||||||
handler.setStackInSlot(i, ItemStack.of(NbtUtils.snbtToStructure(curios.get(i).replace("|", ","))));
|
handler.setStackInSlot(i, ItemStack.of(JsonToNBT.parseTag(curios.get(i).replace("|", ","))));
|
||||||
} catch (CommandSyntaxException e) {
|
} catch (CommandSyntaxException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
@ -49,13 +49,13 @@ public class ModsSupport {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onPlayerLeave(Player player) throws SQLException {
|
public void onPlayerLeave(PlayerEntity player) throws SQLException {
|
||||||
if (ModList.get().isLoaded("curios")) {
|
if (ModList.get().isLoaded("curios")) {
|
||||||
StoreCurios(player, false);
|
StoreCurios(player, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StoreCurios(Player player,boolean init) throws SQLException {
|
public void StoreCurios(PlayerEntity player,boolean init) throws SQLException {
|
||||||
LazyOptional<IItemHandlerModifiable> itemHandler = top.theillusivec4.curios.api.CuriosApi.getCuriosHelper().getEquippedCurios(player);
|
LazyOptional<IItemHandlerModifiable> itemHandler = top.theillusivec4.curios.api.CuriosApi.getCuriosHelper().getEquippedCurios(player);
|
||||||
Map<Integer, String> curios = new HashMap<>();
|
Map<Integer, String> curios = new HashMap<>();
|
||||||
itemHandler.ifPresent(handler -> {
|
itemHandler.ifPresent(handler -> {
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
package vip.fubuki.playersync.sync;
|
package vip.fubuki.playersync.sync;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.nbt.NbtUtils;
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
import net.minecraft.network.chat.TranslatableComponent;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.world.effect.MobEffect;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
import net.minecraft.nbt.JsonToNBT;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.potion.Effect;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.potion.EffectInstance;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
import net.minecraftforge.event.server.ServerStoppedEvent;
|
|
||||||
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 net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
|
||||||
import vip.fubuki.playersync.config.JdbcConfig;
|
import vip.fubuki.playersync.config.JdbcConfig;
|
||||||
import vip.fubuki.playersync.util.JDBCsetUp;
|
import vip.fubuki.playersync.util.JDBCsetUp;
|
||||||
import vip.fubuki.playersync.util.LocalJsonUtil;
|
import vip.fubuki.playersync.util.LocalJsonUtil;
|
||||||
|
|
@ -43,7 +43,7 @@ public class VanillaSync {
|
||||||
String player_uuid = event.getEntity().getUUID().toString();
|
String player_uuid = event.getEntity().getUUID().toString();
|
||||||
JDBCsetUp.QueryResult queryResult=JDBCsetUp.executeQuery("SELECT online, last_server FROM player_data WHERE uuid='"+player_uuid+"'");
|
JDBCsetUp.QueryResult queryResult=JDBCsetUp.executeQuery("SELECT online, last_server FROM player_data WHERE uuid='"+player_uuid+"'");
|
||||||
ResultSet resultSet=queryResult.getResultSet();
|
ResultSet resultSet=queryResult.getResultSet();
|
||||||
ServerPlayer serverPlayer = (ServerPlayer) event.getEntity();
|
ServerPlayerEntity serverPlayer = (ServerPlayerEntity) event.getEntity();
|
||||||
if(!resultSet.next()){
|
if(!resultSet.next()){
|
||||||
Store(event.getPlayer(),true,Dist.CLIENT.isDedicatedServer());
|
Store(event.getPlayer(),true,Dist.CLIENT.isDedicatedServer());
|
||||||
return;
|
return;
|
||||||
|
|
@ -61,7 +61,7 @@ public class VanillaSync {
|
||||||
boolean enable = getServerInfo.getBoolean("enable");
|
boolean enable = getServerInfo.getBoolean("enable");
|
||||||
if(enable && System.currentTimeMillis() < last_update + 300000.0){
|
if(enable && System.currentTimeMillis() < last_update + 300000.0){
|
||||||
event.getEntity().removeTag("player_synced");
|
event.getEntity().removeTag("player_synced");
|
||||||
serverPlayer.connection.disconnect(new TranslatableComponent("playersync.already_online"));
|
serverPlayer.connection.disconnect(new StringTextComponent("playersync.already_online"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
JDBCsetUp.executeUpdate("UPDATE server_info SET enable=false WHERE id=" + lastServer);
|
JDBCsetUp.executeUpdate("UPDATE server_info SET enable=false WHERE id=" + lastServer);
|
||||||
|
|
@ -87,13 +87,13 @@ 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.inventory.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.inventory.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"));
|
||||||
|
|
@ -106,9 +106,8 @@ public class VanillaSync {
|
||||||
serverPlayer.removeAllEffects();
|
serverPlayer.removeAllEffects();
|
||||||
Map<Integer, String> effects = LocalJsonUtil.StringToEntryMap(effectData);
|
Map<Integer, String> effects = LocalJsonUtil.StringToEntryMap(effectData);
|
||||||
for (Map.Entry<Integer, String> entry : effects.entrySet()) {
|
for (Map.Entry<Integer, String> entry : effects.entrySet()) {
|
||||||
CompoundTag effectTag = NbtUtils.snbtToStructure(entry.getValue().replace("|", ","));
|
CompoundNBT effectTag = JsonToNBT.parseTag(entry.getValue().replace("|", ","));
|
||||||
MobEffectInstance mobEffectInstance = MobEffectInstance.load(effectTag);
|
EffectInstance mobEffectInstance = EffectInstance.load(effectTag);
|
||||||
assert mobEffectInstance != null;
|
|
||||||
serverPlayer.addEffect(mobEffectInstance);
|
serverPlayer.addEffect(mobEffectInstance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -152,7 +151,7 @@ public class VanillaSync {
|
||||||
|
|
||||||
private static ItemStack Deserialize(Map.Entry<Integer, String> entry) throws CommandSyntaxException {
|
private 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);
|
CompoundNBT compoundTag = JsonToNBT.parseTag(nbt);
|
||||||
return ItemStack.of(compoundTag);
|
return ItemStack.of(compoundTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -177,7 +176,7 @@ public class VanillaSync {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onServerShutdown(ServerStoppedEvent event) throws SQLException {
|
public static void onServerShutdown(FMLServerStoppedEvent event) throws SQLException {
|
||||||
JDBCsetUp.executeUpdate("UPDATE server_info SET enable=false WHERE id=" + JdbcConfig.SERVER_ID.get());
|
JDBCsetUp.executeUpdate("UPDATE server_info SET enable=false WHERE id=" + JdbcConfig.SERVER_ID.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -204,7 +203,7 @@ public class VanillaSync {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Store(Player player, boolean init,boolean isServer) throws SQLException, IOException {
|
public static void Store(PlayerEntity 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;
|
||||||
|
|
@ -213,30 +212,30 @@ public class VanillaSync {
|
||||||
int health=(int) player.getHealth();
|
int health=(int) player.getHealth();
|
||||||
//Equipment
|
//Equipment
|
||||||
Map<Integer,String> equipment =new HashMap<>() ;
|
Map<Integer,String> equipment =new HashMap<>() ;
|
||||||
for (int i = 0; i < player.getInventory().armor.size(); i++) {
|
for (int i = 0; i < player.inventory.armor.size(); i++) {
|
||||||
ItemStack itemStack = player.getInventory().armor.get(i);
|
ItemStack itemStack = player.inventory.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,itemStack.serializeNBT().toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
||||||
}
|
}
|
||||||
//inventory
|
//inventory
|
||||||
Inventory inventory = player.getInventory();
|
PlayerInventory inventory = player.inventory;
|
||||||
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();
|
CompoundNBT itemNBT = inventory.items.get(i).serializeNBT();
|
||||||
inventoryMap.put(i,itemNBT.toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
inventoryMap.put(i,itemNBT.toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
||||||
}
|
}
|
||||||
//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();
|
CompoundNBT itemNBT = player.getEnderChestInventory().getItem(i).serializeNBT();
|
||||||
ender_chest.put(i,itemNBT.toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
ender_chest.put(i,itemNBT.toString().replace(",","|").replace("\"","^").replace("{","<").replace("}",">").replace("'","~"));
|
||||||
}
|
}
|
||||||
//Effects
|
//Effects
|
||||||
Map<MobEffect,MobEffectInstance> effects= player.getActiveEffectsMap();
|
Map<Effect, EffectInstance> effects= player.getActiveEffectsMap();
|
||||||
Map<Integer,String> effectMap=new HashMap<>();
|
Map<Integer,String> effectMap=new HashMap<>();
|
||||||
for (Map.Entry<MobEffect, MobEffectInstance> entry : effects.entrySet()) {
|
for (Map.Entry<Effect, EffectInstance> entry : effects.entrySet()) {
|
||||||
CompoundTag effectTag= entry.getValue().save(new CompoundTag());
|
CompoundNBT effectTag= entry.getValue().save(new CompoundNBT());
|
||||||
effectMap.put(MobEffect.getId(entry.getKey()),effectTag.toString().replace(",","|"));
|
effectMap.put(Effect.getId(entry.getKey()),effectTag.toString().replace(",","|"));
|
||||||
}
|
}
|
||||||
//Advancements
|
//Advancements
|
||||||
//File root = serverPlayer.getServer().getServerDirectory();
|
//File root = serverPlayer.getServer().getServerDirectory();
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package vip.fubuki.playersync.util;
|
package vip.fubuki.playersync.util;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
|
@ -14,7 +12,7 @@ public class PSThreadPoolFactory implements ThreadFactory {
|
||||||
threadNamePrefix = Prefix;
|
threadNamePrefix = Prefix;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public Thread newThread(@NotNull Runnable runnable) {
|
public Thread newThread(Runnable runnable) {
|
||||||
Thread thread = new Thread(runnable);
|
Thread thread = new Thread(runnable);
|
||||||
thread.setName(threadNamePrefix + "-thread-" + threadIdx.getAndIncrement());
|
thread.setName(threadNamePrefix + "-thread-" + threadIdx.getAndIncrement());
|
||||||
return thread;
|
return thread;
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ make multiserver players' data sync
|
||||||
# Does this dependency have to exist - if not, ordering below must be specified
|
# Does this dependency have to exist - if not, ordering below must be specified
|
||||||
mandatory=true #mandatory
|
mandatory=true #mandatory
|
||||||
# The version range of the dependency
|
# The version range of the dependency
|
||||||
versionRange="[40,)" #mandatory
|
versionRange="[36,37)" #mandatory
|
||||||
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
|
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
|
||||||
ordering="NONE"
|
ordering="NONE"
|
||||||
# Side this dependency is applied on - BOTH, CLIENT or SERVER
|
# Side this dependency is applied on - BOTH, CLIENT or SERVER
|
||||||
|
|
@ -61,6 +61,6 @@ make multiserver players' data sync
|
||||||
modId="minecraft"
|
modId="minecraft"
|
||||||
mandatory=true
|
mandatory=true
|
||||||
# This version range declares a minimum of the current minecraft version up to but not including the next major version
|
# This version range declares a minimum of the current minecraft version up to but not including the next major version
|
||||||
versionRange="[1.18.2,)"
|
versionRange="[1.16.5,1.17)"
|
||||||
ordering="NONE"
|
ordering="NONE"
|
||||||
side="BOTH"
|
side="BOTH"
|
||||||
Loading…
Reference in New Issue
Block a user