mirror of
https://github.com/libraryaddict/LibsDisguises.git
synced 2025-03-02 04:01:26 +01:00
Fix item parsing, needs to be tested in 1.18 & 1.20
This commit is contained in:
parent
dd5b9e2dc5
commit
f954b70f31
@ -9,6 +9,7 @@ import io.netty.buffer.PooledByteBufAllocator;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
@ -383,4 +384,12 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
|
|
||||||
return registry.getId(CraftArt.BukkitToNotch(type));
|
return registry.getId(CraftArt.BukkitToNotch(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDataAsString(ItemStack itemStack) {
|
||||||
|
net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
|
||||||
|
CompoundTag compoundTag = nmsItem.save(new CompoundTag());
|
||||||
|
|
||||||
|
return compoundTag.getAsString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
@ -383,4 +384,12 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
|
|
||||||
return registry.getId(CraftArt.BukkitToNotch(type));
|
return registry.getId(CraftArt.BukkitToNotch(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDataAsString(ItemStack itemStack) {
|
||||||
|
net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
|
||||||
|
CompoundTag compoundTag = nmsItem.save(new CompoundTag());
|
||||||
|
|
||||||
|
return compoundTag.getAsString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import lombok.SneakyThrows;
|
|||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
@ -386,4 +387,12 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
|
|
||||||
return registry.getId(CraftArt.BukkitToNotch(type));
|
return registry.getId(CraftArt.BukkitToNotch(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDataAsString(ItemStack itemStack) {
|
||||||
|
net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
|
||||||
|
CompoundTag compoundTag = nmsItem.save(new CompoundTag());
|
||||||
|
|
||||||
|
return compoundTag.getAsString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
|||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.registries.BuiltInRegistries;
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
@ -446,4 +447,5 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
|
|
||||||
return registry.getId(CraftArt.bukkitToMinecraft(type));
|
return registry.getId(CraftArt.bukkitToMinecraft(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
|||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.registries.BuiltInRegistries;
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
@ -3,15 +3,12 @@ package me.libraryaddict.disguise.utilities.reflection.v1_20_R4;
|
|||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.ProfileLookupCallback;
|
import com.mojang.authlib.ProfileLookupCallback;
|
||||||
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
||||||
import com.mojang.serialization.DataResult;
|
|
||||||
import com.mojang.serialization.JavaOps;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.PooledByteBufAllocator;
|
import io.netty.buffer.PooledByteBufAllocator;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.component.DataComponentPatch;
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries;
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||||
@ -460,20 +457,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object serializeComponents(ItemStack itemStack) {
|
public String getDataAsString(ItemStack itemStack) {
|
||||||
if (itemStack == null) {
|
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
net.minecraft.world.item.ItemStack item = CraftItemStack.asNMSCopy(itemStack);
|
|
||||||
DataComponentPatch comps = item.getComponentsPatch();
|
|
||||||
|
|
||||||
if (comps == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
DataResult<Object> cond = DataComponentPatch.CODEC.encodeStart(JavaOps.INSTANCE, comps);
|
|
||||||
|
|
||||||
return cond.result().orElse(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,12 @@ package me.libraryaddict.disguise.utilities.reflection.v1_21_R1;
|
|||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.ProfileLookupCallback;
|
import com.mojang.authlib.ProfileLookupCallback;
|
||||||
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
||||||
import com.mojang.serialization.DataResult;
|
|
||||||
import com.mojang.serialization.JavaOps;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.PooledByteBufAllocator;
|
import io.netty.buffer.PooledByteBufAllocator;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.component.DataComponentPatch;
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries;
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||||
@ -465,20 +462,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object serializeComponents(ItemStack itemStack) {
|
public String getDataAsString(ItemStack itemStack) {
|
||||||
if (itemStack == null) {
|
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
net.minecraft.world.item.ItemStack item = CraftItemStack.asNMSCopy(itemStack);
|
|
||||||
DataComponentPatch comps = item.getComponentsPatch();
|
|
||||||
|
|
||||||
if (comps == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
DataResult<Object> cond = DataComponentPatch.CODEC.encodeStart(JavaOps.INSTANCE, comps);
|
|
||||||
|
|
||||||
return cond.result().orElse(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,12 @@ package me.libraryaddict.disguise.utilities.reflection.v1_21_R2;
|
|||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.ProfileLookupCallback;
|
import com.mojang.authlib.ProfileLookupCallback;
|
||||||
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
||||||
import com.mojang.serialization.DataResult;
|
|
||||||
import com.mojang.serialization.JavaOps;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.PooledByteBufAllocator;
|
import io.netty.buffer.PooledByteBufAllocator;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.component.DataComponentPatch;
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries;
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||||
@ -468,20 +465,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object serializeComponents(ItemStack itemStack) {
|
public String getDataAsString(ItemStack itemStack) {
|
||||||
if (itemStack == null) {
|
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
net.minecraft.world.item.ItemStack item = CraftItemStack.asNMSCopy(itemStack);
|
|
||||||
DataComponentPatch comps = item.getComponentsPatch();
|
|
||||||
|
|
||||||
if (comps == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
DataResult<Object> cond = DataComponentPatch.CODEC.encodeStart(JavaOps.INSTANCE, comps);
|
|
||||||
|
|
||||||
return cond.result().orElse(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,12 @@ package me.libraryaddict.disguise.utilities.reflection.v1_21_R3;
|
|||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.ProfileLookupCallback;
|
import com.mojang.authlib.ProfileLookupCallback;
|
||||||
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
||||||
import com.mojang.serialization.DataResult;
|
|
||||||
import com.mojang.serialization.JavaOps;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.PooledByteBufAllocator;
|
import io.netty.buffer.PooledByteBufAllocator;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.component.DataComponentPatch;
|
|
||||||
import net.minecraft.core.registries.BuiltInRegistries;
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||||
@ -468,20 +465,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object serializeComponents(ItemStack itemStack) {
|
public String getDataAsString(ItemStack itemStack) {
|
||||||
if (itemStack == null) {
|
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
net.minecraft.world.item.ItemStack item = CraftItemStack.asNMSCopy(itemStack);
|
|
||||||
DataComponentPatch comps = item.getComponentsPatch();
|
|
||||||
|
|
||||||
if (comps == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
DataResult<Object> cond = DataComponentPatch.CODEC.encodeStart(JavaOps.INSTANCE, comps);
|
|
||||||
|
|
||||||
return cond.result().orElse(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -436,7 +436,6 @@ public class DisguiseParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return TranslateType.DISGUISE_OPTIONS_PARAMETERS.reverseGet("null");
|
return TranslateType.DISGUISE_OPTIONS_PARAMETERS.reverseGet("null");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,16 +9,12 @@ import com.github.retrooper.packetevents.protocol.nbt.NBTLongArray;
|
|||||||
import com.github.retrooper.packetevents.protocol.nbt.NBTNumber;
|
import com.github.retrooper.packetevents.protocol.nbt.NBTNumber;
|
||||||
import com.github.retrooper.packetevents.protocol.nbt.NBTString;
|
import com.github.retrooper.packetevents.protocol.nbt.NBTString;
|
||||||
import com.github.retrooper.packetevents.protocol.nbt.NBTType;
|
import com.github.retrooper.packetevents.protocol.nbt.NBTType;
|
||||||
import it.unimi.dsi.fastutil.bytes.ByteList;
|
|
||||||
import it.unimi.dsi.fastutil.ints.IntList;
|
|
||||||
import it.unimi.dsi.fastutil.longs.LongList;
|
|
||||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class ItemStackSerializer {
|
public class ItemStackSerializer {
|
||||||
|
|
||||||
@ -32,15 +28,16 @@ public class ItemStackSerializer {
|
|||||||
String type = ReflectionManager.getItemName(item.getType());
|
String type = ReflectionManager.getItemName(item.getType());
|
||||||
|
|
||||||
if (item.hasItemMeta() && NmsVersion.v1_13.isSupported()) {
|
if (item.hasItemMeta() && NmsVersion.v1_13.isSupported()) {
|
||||||
if (NmsVersion.v1_20_R4.isSupported()) {
|
if (ReflectionManager.getNmsReflection() != null) {
|
||||||
Object asJava = ReflectionManager.getNmsReflection().serializeComponents(item);
|
String asString = ReflectionManager.getNmsReflection().getDataAsString(item);
|
||||||
|
|
||||||
if (asJava != null) {
|
if (asString != null && asString.length() > 2) {
|
||||||
String asString = serializeObj(asJava);
|
// Vanilla seems to turn this into a string that contains for UUID
|
||||||
|
// : [I; 772059800,
|
||||||
|
// And there should be no space, so we must strip all spaces that are unneeded.
|
||||||
|
asString = stripSpacesFromString(asString);
|
||||||
|
|
||||||
if (asString.length() > 2) {
|
type += "[" + asString.substring(1, asString.length() - 1) + "]";
|
||||||
type += "[" + asString.substring(1, asString.length() - 1) + "]";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
NBT nbt = DisguiseUtilities.fromBukkitItemStack(item).getNBT();
|
NBT nbt = DisguiseUtilities.fromBukkitItemStack(item).getNBT();
|
||||||
@ -82,86 +79,35 @@ public class ItemStackSerializer {
|
|||||||
return mcArray;
|
return mcArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String stripSpacesFromString(String string) {
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
boolean inQuote = false;
|
||||||
|
boolean escaped = false;
|
||||||
|
|
||||||
|
for (int i = 0; i < string.length(); i++) {
|
||||||
|
char c = string.charAt(i);
|
||||||
|
|
||||||
|
if (escaped) {
|
||||||
|
result.append(c);
|
||||||
|
escaped = false;
|
||||||
|
} else if (c == '\\') {
|
||||||
|
escaped = true;
|
||||||
|
} else if (c == '"') {
|
||||||
|
inQuote = !inQuote;
|
||||||
|
} else if (!inQuote && c == ' ') {
|
||||||
|
continue; // Skip spaces outside quotes
|
||||||
|
}
|
||||||
|
|
||||||
|
result.append(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
public static String serialize(NBT base) {
|
public static String serialize(NBT base) {
|
||||||
return serialize(0, base);
|
return serialize(0, base);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String serializeObj(Object object) {
|
|
||||||
return serializeObj(0, object);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String serializeObj(int depth, Object object) {
|
|
||||||
if (object instanceof Map) {
|
|
||||||
StringBuilder builder = new StringBuilder();
|
|
||||||
|
|
||||||
builder.append("{");
|
|
||||||
|
|
||||||
for (Map.Entry<String, Object> entry : ((Map<String, Object>) object).entrySet()) {
|
|
||||||
String val = serializeObj(depth + 1, entry.getValue());
|
|
||||||
|
|
||||||
// Skip root empty values
|
|
||||||
if (depth == 0 && val.matches("0(\\.0)?")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (builder.length() > 1) {
|
|
||||||
builder.append(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.append(entry.getKey()).append("=").append(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.append("}");
|
|
||||||
|
|
||||||
return builder.toString();
|
|
||||||
} else if (object instanceof ByteList) {
|
|
||||||
ByteList byteArray = (ByteList) object;
|
|
||||||
List<String> bytes = new ArrayList<>();
|
|
||||||
|
|
||||||
for (byte b : byteArray) {
|
|
||||||
bytes.add(String.valueOf(b));
|
|
||||||
}
|
|
||||||
|
|
||||||
return "[B;" + String.join(",", bytes) + "]";
|
|
||||||
} else if (object instanceof IntList) {
|
|
||||||
IntList byteArray = (IntList) object;
|
|
||||||
List<String> bytes = new ArrayList<>();
|
|
||||||
|
|
||||||
for (int b : byteArray) {
|
|
||||||
bytes.add(String.valueOf(b));
|
|
||||||
}
|
|
||||||
|
|
||||||
return "[I;" + String.join(",", bytes) + "]";
|
|
||||||
} else if (object instanceof LongList) {
|
|
||||||
LongList byteArray = (LongList) object;
|
|
||||||
List<String> bytes = new ArrayList<>();
|
|
||||||
|
|
||||||
for (long b : byteArray) {
|
|
||||||
bytes.add(String.valueOf(b));
|
|
||||||
}
|
|
||||||
|
|
||||||
return "[L;" + String.join(",", bytes) + "]";
|
|
||||||
} else if (object instanceof List) {
|
|
||||||
List<String> serialized = new ArrayList<>();
|
|
||||||
|
|
||||||
for (Object obj : ((List) object)) {
|
|
||||||
serialized.add(serializeObj(depth + 1, obj));
|
|
||||||
}
|
|
||||||
|
|
||||||
return "[" + StringUtils.join(serialized, ",") + "]";
|
|
||||||
} else if (object instanceof Number) {
|
|
||||||
return object.toString();
|
|
||||||
} else if (object instanceof String) {
|
|
||||||
if (((String) object).contains("\"") && !((String) object).contains("'")) {
|
|
||||||
return "'" + object + "'";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "\"" + ((String) object).replace("\\", "\\\\").replace("\"", "\\\"") + "\"";
|
|
||||||
} else {
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String serialize(int depth, NBT base) {
|
private static String serialize(int depth, NBT base) {
|
||||||
if (base.getType() == NBTType.COMPOUND) {
|
if (base.getType() == NBTType.COMPOUND) {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
|
@ -154,7 +154,7 @@ public interface ReflectionManagerAbstract {
|
|||||||
throw new IllegalStateException("Not implemented");
|
throw new IllegalStateException("Not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
default Object serializeComponents(ItemStack itemStack) {
|
default String getDataAsString(ItemStack itemStack) {
|
||||||
throw new IllegalStateException("Not implemented");
|
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsString() : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user