Work on NBT adapters

This commit is contained in:
nossr50 2019-10-29 19:00:16 -07:00
parent bfcc167862
commit bf94073935
9 changed files with 217 additions and 4 deletions

View File

@ -0,0 +1,7 @@
package com.gmail.nossr50.core.adapters;
import com.gmail.nossr50.core.nbt.NBTBase;
public interface NBTAdapter {
Object asNative(NBTBase nbtBase);
}

View File

@ -0,0 +1,93 @@
package com.gmail.nossr50.core.adapters.NMS_114;
import com.gmail.nossr50.core.adapters.NBTAdapter;
import com.gmail.nossr50.core.nbt.*;
import com.gmail.nossr50.core.nbt.NBTBase;
import com.gmail.nossr50.core.nbt.NBTList;
import com.gmail.nossr50.core.nbt.NBTCompound;
import net.minecraft.server.v1_14_R1.*;
public class BukkitNBTAdapter implements NBTAdapter {
@Override
public Object asNative(NBTBase nbtBase) {
switch(nbtBase.getNBTType()) {
case END:
return new NBTTagEnd();
case BYTE:
return asNativeNBTByte((NBTByte) nbtBase);
case SHORT:
return asNativeNBTShort((NBTShort) nbtBase);
case INT:
return asNativeNBTInt((NBTInteger) nbtBase);
case LONG:
return asNativeNBTLong((NBTLong) nbtBase);
case FLOAT:
return asNativeNBTFloat((NBTFloat) nbtBase);
case DOUBLE:
return asNativeNBTDouble((NBTDouble) nbtBase);
case BYTE_ARRAY:
return asNativeNBTByteArray((NBTByteArray) nbtBase);
case STRING:
return asNativeNBTString((NBTString) nbtBase);
case LIST:
return asNativeNBTList((NBTList) nbtBase);
case COMPOUND:
return ;
case INT_ARRAY:
break;
case LONG_ARRAY:
break;
}
return null;
}
/**
* Create a NBTTagByte (NMS Type) from our NBTByte representation
* @param nbtByte target NBTByte
* @return NBTTagByte copy of our NBTByte representation
*/
private NBTTagByte asNativeNBTByte(NBTByte nbtByte) {
return new NBTTagByte(nbtByte.getValue());
}
private NBTTagShort asNativeNBTShort(NBTShort nbtShort) {
return new NBTTagShort(nbtShort.getValue());
}
private NBTTagInt asNativeNBTInt(NBTInteger nbtInteger) {
return new NBTTagInt(nbtInteger.getValue());
}
private NBTTagLong asNativeNBTLong(NBTLong nbtLong) {
return new NBTTagLong(nbtLong.getValue());
}
private NBTTagFloat asNativeNBTFloat(NBTFloat nbtFloat) {
return new NBTTagFloat(nbtFloat.getValue());
}
private NBTTagDouble asNativeNBTDouble(NBTDouble nbtDouble) {
return new NBTTagDouble(nbtDouble.getValue());
}
private NBTTagByteArray asNativeNBTByteArray(NBTByteArray nbtByteArray) {
return new NBTTagByteArray(nbtByteArray.getValues());
}
private NBTTagString asNativeNBTString(NBTString nbtString) {
return new NBTTagString(nbtString.getValue());
}
private NBTTagList asNativeNBTList(NBTList nbtList) {
NBTTagList nbtTagList = new NBTTagList();
nbtList.setValues(nbtList.getValues());
return nbtTagList;
}
private NBTTagCompound asNativeNBTCompound(NBTCompound nbtCompound) {
NBTTagCompound nbtTagCompound = new NBTTagCompound();
nbtCompound
}
}

View File

@ -0,0 +1,17 @@
package com.gmail.nossr50.core.adapters.NMS_114;
import com.gmail.nossr50.core.adapters.NBTAdapter;
import com.gmail.nossr50.core.adapters.PlatformAdapter;
import com.gmail.nossr50.core.nbt.NBTBase;
import com.gmail.nossr50.core.nbt.NBTByte;
import net.minecraft.server.v1_14_R1.NBTTagByte;
public class BukkitPlatformAdapter extends PlatformAdapter {
public BukkitPlatformAdapter() {
super(new BukkitNBTAdapter());
}
}

View File

@ -0,0 +1,15 @@
package com.gmail.nossr50.core.adapters;
public abstract class PlatformAdapter {
private NBTAdapter nbtAdapter; //nbt
public PlatformAdapter(NBTAdapter nbtAdapter) {
this.nbtAdapter = nbtAdapter;
}
public NBTAdapter getNbtAdapter() {
return nbtAdapter;
}
}

View File

@ -5,6 +5,10 @@ public class NBTByte implements NBTBase {
private String key;
private Byte value;
public NBTByte(Byte value) {
this.value = value;
}
@Override
public NBTType getNBTType() {
return NBTType.BYTE;

View File

@ -5,12 +5,12 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class NBTTagCompound implements NBTBase {
public class NBTCompound implements NBTBase {
private String key;
private Map<String, NBTBase> tagMap;
public NBTTagCompound(String key) {
public NBTCompound(String key) {
tagMap = new LinkedHashMap<>();
}

View File

@ -0,0 +1,8 @@
package com.gmail.nossr50.core.nbt;
public class NBTEnd implements NBTBase {
@Override
public NBTType getNBTType() {
return NBTType.END;
}
}

View File

@ -2,8 +2,8 @@ package com.gmail.nossr50.core.nbt;
public class NBTLong implements NBTBase {
public String key;
public long value;
private String key;
private long value;
public String getKey() {
return key;

View File

@ -0,0 +1,69 @@
package com.gmail.nossr50.util.nbt;
import com.gmail.nossr50.core.nbt.NBTByte;
import com.gmail.nossr50.core.nbt.NBTCompound;
import net.minecraft.server.v1_14_R1.NBTTagByte;
public class NBTFactory {
/**
* Converts NMS NBT types into our own NBT type representation
* @param nmsNBT target NMS Compound
* @return NMS Representation of our NBT
*/
public NBTCompound asNBT(net.minecraft.server.v1_14_R1.NBTTagCompound nmsNBT) {
NBTCompound nbtCompound = new NBTCompound("");
//Traverse the NMS Map
for(String key : nmsNBT.getKeys()) {
}
}
/**
* Convert our NBT type into the NMS NBT Type equivalent
* @param nbtCompound target nbt compound
* @return NMS NBT copy of our NBT type
*/
public net.minecraft.server.v1_14_R1.NBTTagCompound asNMSCopy(NBTCompound nbtCompound) {
}
/**
* Create a new NMS NBT tag compound with only 1 tag compound named "tag"
* @return new NMS NBT tag compound
*/
private net.minecraft.server.v1_14_R1.NBTTagCompound makeNewNMSNBT() {
net.minecraft.server.v1_14_R1.NBTTagCompound nbtTagCompound = new net.minecraft.server.v1_14_R1.NBTTagCompound();
//Add the 'tag' compound where arbitrary data persists
nbtTagCompound.set("tag", new net.minecraft.server.v1_14_R1.NBTTagCompound());
return nbtTagCompound;
}
private NBTCompound deepCopy(NBTCompound target, String key, net.minecraft.server.v1_14_R1.NBTBase nbtBase) {
switch (nbtBase.getTypeId()) {
case 0:
return new NBTCompound();
}
}
/**
* Create a NBTByte representation of NBTTagByte (NMS Type)
* @param nmsNBTByte target NMS NBTTagByte
* @return NBTByte representation of the targeted NMS nbt-type
*/
private NBTByte asNBTByte(NBTTagByte nmsNBTByte) {
NBTByte nbtByte = new NBTByte(nmsNBTByte.asByte());
return nbtByte;
}
/**
* Create a NBTTagByte (NMS Type) from our NBTByte representation
* @param nbtByte target NBTByte
* @return NBTTagByte copy of our NBTByte representation
*/
private NBTTagByte asNBTTagByte(NBTByte nbtByte) {
NBTTagByte nbtTagByte = new NBTTagByte(nbtByte.getValue());
return nbtTagByte;
}
}