optimize nbt utils
This commit is contained in:
parent
3c47b40116
commit
40bcdf6556
@ -2,6 +2,7 @@ package me.skymc.taboolib.common.nms;
|
|||||||
|
|
||||||
import me.skymc.taboolib.TabooLib;
|
import me.skymc.taboolib.TabooLib;
|
||||||
import me.skymc.taboolib.common.nms.nbt.NBTCompound;
|
import me.skymc.taboolib.common.nms.nbt.NBTCompound;
|
||||||
|
import me.skymc.taboolib.common.nms.nbt.NBTList;
|
||||||
import me.skymc.taboolib.common.packet.TPacketHandler;
|
import me.skymc.taboolib.common.packet.TPacketHandler;
|
||||||
import me.skymc.taboolib.common.util.SimpleReflection;
|
import me.skymc.taboolib.common.util.SimpleReflection;
|
||||||
import me.skymc.taboolib.nms.NMSUtils;
|
import me.skymc.taboolib.nms.NMSUtils;
|
||||||
@ -21,8 +22,7 @@ import org.bukkit.inventory.meta.PotionMeta;
|
|||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author 坏黑
|
* @Author 坏黑
|
||||||
@ -44,6 +44,7 @@ public class NMSHandlerImpl extends NMSHandler {
|
|||||||
SimpleReflection.saveField(NBTTagIntArray.class);
|
SimpleReflection.saveField(NBTTagIntArray.class);
|
||||||
SimpleReflection.saveField(NBTTagByteArray.class);
|
SimpleReflection.saveField(NBTTagByteArray.class);
|
||||||
SimpleReflection.saveField(NBTTagList.class);
|
SimpleReflection.saveField(NBTTagList.class);
|
||||||
|
SimpleReflection.saveField(NBTTagCompound.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NMSHandlerImpl() {
|
public NMSHandlerImpl() {
|
||||||
@ -218,18 +219,34 @@ public class NMSHandlerImpl extends NMSHandler {
|
|||||||
return new NBTTagString(base.asString());
|
return new NBTTagString(base.asString());
|
||||||
case 9:
|
case 9:
|
||||||
Object nmsList = new NBTTagList();
|
Object nmsList = new NBTTagList();
|
||||||
base.asList().forEach(value -> ((NBTTagList) nmsList).add((net.minecraft.server.v1_8_R3.NBTBase) toNBTBase(value)));
|
for (me.skymc.taboolib.common.nms.nbt.NBTBase value : base.asList()) {
|
||||||
|
((NBTTagList) nmsList).add((NBTBase) toNBTBase(value));
|
||||||
|
}
|
||||||
return nmsList;
|
return nmsList;
|
||||||
case 10:
|
case 10:
|
||||||
Object nmsTag = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
Object nmsTag = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||||
base.asCompound().forEach((k, v) -> ((net.minecraft.server.v1_8_R3.NBTTagCompound) nmsTag).set(k, (net.minecraft.server.v1_8_R3.NBTBase) toNBTBase(v)));
|
for (Map.Entry<String, me.skymc.taboolib.common.nms.nbt.NBTBase> entry : base.asCompound().entrySet()) {
|
||||||
|
((net.minecraft.server.v1_8_R3.NBTTagCompound) nmsTag).set(entry.getKey(), (NBTBase) toNBTBase(entry.getValue()));
|
||||||
|
}
|
||||||
return nmsTag;
|
return nmsTag;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object fromNBTBase(Object base) {
|
private Object fromNBTBase(Object base) {
|
||||||
if (base instanceof NBTTagString) {
|
if (base instanceof net.minecraft.server.v1_8_R3.NBTTagCompound) {
|
||||||
|
NBTCompound nbtCompound = new NBTCompound();
|
||||||
|
for (Map.Entry<String, net.minecraft.server.v1_12_R1.NBTBase> entry : ((Map<String, net.minecraft.server.v1_12_R1.NBTBase>) SimpleReflection.getFieldValue(NBTTagCompound.class, base, "map")).entrySet()) {
|
||||||
|
nbtCompound.put(entry.getKey(), (me.skymc.taboolib.common.nms.nbt.NBTBase) fromNBTBase(entry.getValue()));
|
||||||
|
}
|
||||||
|
return nbtCompound;
|
||||||
|
} else if (base instanceof NBTTagList) {
|
||||||
|
NBTList nbtList = new NBTList();
|
||||||
|
for (Object v : (List) SimpleReflection.getFieldValue(NBTTagList.class, base, "list")) {
|
||||||
|
nbtList.add((me.skymc.taboolib.common.nms.nbt.NBTBase) fromNBTBase(v));
|
||||||
|
}
|
||||||
|
return nbtList;
|
||||||
|
} else if (base instanceof NBTTagString) {
|
||||||
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagString.class, base, "data", ""));
|
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagString.class, base, "data", ""));
|
||||||
} else if (base instanceof NBTTagDouble) {
|
} else if (base instanceof NBTTagDouble) {
|
||||||
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagDouble.class, base, "data", 0D));
|
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagDouble.class, base, "data", 0D));
|
||||||
@ -247,12 +264,6 @@ public class NMSHandlerImpl extends NMSHandler {
|
|||||||
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagIntArray.class, base, "data", new int[0]));
|
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagIntArray.class, base, "data", new int[0]));
|
||||||
} else if (base instanceof NBTTagByteArray) {
|
} else if (base instanceof NBTTagByteArray) {
|
||||||
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagByteArray.class, base, "data", new byte[0]));
|
return new me.skymc.taboolib.common.nms.nbt.NBTBase(SimpleReflection.getFieldValue(NBTTagByteArray.class, base, "data", new byte[0]));
|
||||||
} else if (base instanceof net.minecraft.server.v1_8_R3.NBTTagCompound) {
|
|
||||||
Set<String> keys = VERSION >= 11300 ? ((net.minecraft.server.v1_13_R2.NBTTagCompound) base).getKeys() : ((net.minecraft.server.v1_8_R3.NBTTagCompound) base).c();
|
|
||||||
return keys.stream().collect(Collectors.toMap(key -> key, key -> (me.skymc.taboolib.common.nms.nbt.NBTBase) fromNBTBase(((net.minecraft.server.v1_13_R2.NBTTagCompound) base).get(key)), (a, b) -> b, me.skymc.taboolib.common.nms.nbt.NBTCompound::new));
|
|
||||||
} else if (base instanceof NBTTagList) {
|
|
||||||
List list = (List) SimpleReflection.getFieldValue(NBTTagList.class, base, "list");
|
|
||||||
return list.stream().map(this::fromNBTBase).collect(Collectors.toCollection(me.skymc.taboolib.common.nms.nbt.NBTList::new));
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user