Switched to a better base64 encoding and decoding method.
Dieser Commit ist enthalten in:
Ursprung
f791e2726f
Commit
0597084c3d
@ -6,9 +6,8 @@ import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigInteger;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
|
||||
|
||||
import com.comphenix.protocol.reflect.FuzzyReflection;
|
||||
|
||||
@ -50,21 +49,15 @@ public class StreamSerializer {
|
||||
}
|
||||
|
||||
/**
|
||||
* Deserialize an item stack from a base-32 encoded string.
|
||||
* @param input - base-32 encoded string.
|
||||
* Deserialize an item stack from a base-64 encoded string.
|
||||
* @param input - base-64 encoded string.
|
||||
* @return A deserialized item stack.
|
||||
* @throws IOException If the operation failed due to reflection or corrupt data.
|
||||
*/
|
||||
public ItemStack deserializeItemStack(String input) throws IOException {
|
||||
try {
|
||||
BigInteger base32 = new BigInteger(input, 32);
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(base32.toByteArray());
|
||||
|
||||
return deserializeItemStack(new DataInputStream(inputStream));
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IOException("Input is not valid base 32.", e);
|
||||
}
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(input));
|
||||
|
||||
return deserializeItemStack(new DataInputStream(inputStream));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -93,9 +86,9 @@ public class StreamSerializer {
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize an item stack as a base-32 encoded string.
|
||||
* Serialize an item stack as a base-64 encoded string.
|
||||
* @param stack - the item stack to serialize.
|
||||
* @return A base-32 representation of the given item stack.
|
||||
* @return A base-64 representation of the given item stack.
|
||||
* @throws IOException If the operation fails due to reflection problems.
|
||||
*/
|
||||
public String serializeItemStack(ItemStack stack) throws IOException {
|
||||
@ -105,6 +98,6 @@ public class StreamSerializer {
|
||||
serializeItemStack(dataOutput, stack);
|
||||
|
||||
// Serialize that array
|
||||
return new BigInteger(1, outputStream.toByteArray()).toString(32);
|
||||
return Base64Coder.encodeLines(outputStream.toByteArray());
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,8 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
|
||||
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
|
||||
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtBase;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtCompound;
|
||||
@ -13,36 +14,28 @@ import com.comphenix.protocol.wrappers.nbt.NbtList;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtWrapper;
|
||||
|
||||
/**
|
||||
* Serializes NBT to a base N (default 32) encoded string and back.
|
||||
* Serializes NBT to a base-64 encoded string and back.
|
||||
*
|
||||
* @author Kristian
|
||||
*/
|
||||
public class NbtTextSerializer {
|
||||
/**
|
||||
* The default radix to use while converting to text.
|
||||
*/
|
||||
public static final int STANDARD_BASE = 32;
|
||||
|
||||
/**
|
||||
* A default instance of this serializer.
|
||||
*/
|
||||
public static final NbtTextSerializer DEFAULT = new NbtTextSerializer();
|
||||
|
||||
private NbtBinarySerializer binarySerializer;
|
||||
private int baseRadix;
|
||||
|
||||
public NbtTextSerializer() {
|
||||
this(new NbtBinarySerializer(), STANDARD_BASE);
|
||||
this(new NbtBinarySerializer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a serializer with a custom binary serializer and base radix.
|
||||
* Construct a serializer with a custom binary serializer.
|
||||
* @param binary - binary serializer.
|
||||
* @param baseRadix - base radix in the range 2 - 32.
|
||||
*/
|
||||
public NbtTextSerializer(NbtBinarySerializer binary, int baseRadix) {
|
||||
public NbtTextSerializer(NbtBinarySerializer binary) {
|
||||
this.binarySerializer = binary;
|
||||
this.baseRadix = baseRadix;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -54,17 +47,9 @@ public class NbtTextSerializer {
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the base radix.
|
||||
* @return The base radix.
|
||||
*/
|
||||
public int getBaseRadix() {
|
||||
return baseRadix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize a NBT tag to a String.
|
||||
* Serialize a NBT tag to a base-64 encoded string.
|
||||
* @param value - the NBT tag to serialize.
|
||||
* @return The NBT tag in base N form.
|
||||
* @return The NBT tag in base-64 form.
|
||||
*/
|
||||
public <TType> String serialize(NbtBase<TType> value) {
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
@ -73,30 +58,24 @@ public class NbtTextSerializer {
|
||||
binarySerializer.serialize(value, dataOutput);
|
||||
|
||||
// Serialize that array
|
||||
return new BigInteger(1, outputStream.toByteArray()).toString(baseRadix);
|
||||
return Base64Coder.encodeLines(outputStream.toByteArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* Deserialize a NBT tag from a base N encoded string.
|
||||
* @param input - the base N string.
|
||||
* Deserialize a NBT tag from a base-64 encoded string.
|
||||
* @param input - the base-64 string.
|
||||
* @return The NBT tag contained in the string.
|
||||
* @throws IOException If we are unable to parse the input.
|
||||
*/
|
||||
public <TType> NbtWrapper<TType> deserialize(String input) throws IOException {
|
||||
try {
|
||||
BigInteger baseN = new BigInteger(input, baseRadix);
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(baseN.toByteArray());
|
||||
|
||||
return binarySerializer.deserialize(new DataInputStream(inputStream));
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IOException("Input is not valid base " + baseRadix + ".", e);
|
||||
}
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(input));
|
||||
|
||||
return binarySerializer.deserialize(new DataInputStream(inputStream));
|
||||
}
|
||||
|
||||
/**
|
||||
* Deserialize a NBT compound from a base N encoded string.
|
||||
* @param input - the base N string.
|
||||
* Deserialize a NBT compound from a base-64 encoded string.
|
||||
* @param input - the base-64 string.
|
||||
* @return The NBT tag contained in the string.
|
||||
* @throws IOException If we are unable to parse the input.
|
||||
*/
|
||||
@ -107,8 +86,8 @@ public class NbtTextSerializer {
|
||||
}
|
||||
|
||||
/**
|
||||
* Deserialize a NBT list from a base N encoded string.
|
||||
* @param input - the base N string.
|
||||
* Deserialize a NBT list from a base-64 encoded string.
|
||||
* @param input - the base-64 string.
|
||||
* @return The NBT tag contained in the string.
|
||||
* @throws IOException If we are unable to parse the input.
|
||||
*/
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren