Update the stream serializer for Minecraft 1.6.2
Dieser Commit ist enthalten in:
Ursprung
a4eb219a9a
Commit
c590e4a825
@ -2,7 +2,9 @@ package com.comphenix.protocol.utility;
|
|||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.DataInput;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
|
import java.io.DataOutput;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@ -13,6 +15,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
|
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
|
||||||
|
|
||||||
import com.comphenix.protocol.reflect.FuzzyReflection;
|
import com.comphenix.protocol.reflect.FuzzyReflection;
|
||||||
|
import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility methods for reading and writing Minecraft objects to streams.
|
* Utility methods for reading and writing Minecraft objects to streams.
|
||||||
@ -37,11 +40,14 @@ public class StreamSerializer {
|
|||||||
public ItemStack deserializeItemStack(@Nonnull DataInputStream input) throws IOException {
|
public ItemStack deserializeItemStack(@Nonnull DataInputStream input) throws IOException {
|
||||||
if (input == null)
|
if (input == null)
|
||||||
throw new IllegalArgumentException("Input stream cannot be NULL.");
|
throw new IllegalArgumentException("Input stream cannot be NULL.");
|
||||||
if (readItemMethod == null)
|
if (readItemMethod == null) {
|
||||||
readItemMethod = FuzzyReflection.fromClass(MinecraftReflection.getPacketClass()).
|
readItemMethod = FuzzyReflection.fromClass(MinecraftReflection.getPacketClass()).getMethod(
|
||||||
getMethodByParameters("readPacket",
|
FuzzyMethodContract.newBuilder().
|
||||||
MinecraftReflection.getItemStackClass(),
|
parameterCount(1).
|
||||||
new Class<?>[] {DataInputStream.class});
|
parameterDerivedOf(DataInput.class).
|
||||||
|
returnDerivedOf(MinecraftReflection.getItemStackClass()).
|
||||||
|
build());
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
Object nmsItem = readItemMethod.invoke(null, input);
|
Object nmsItem = readItemMethod.invoke(null, input);
|
||||||
|
|
||||||
@ -88,10 +94,12 @@ public class StreamSerializer {
|
|||||||
Object nmsItem = MinecraftReflection.getMinecraftItemStack(stack);
|
Object nmsItem = MinecraftReflection.getMinecraftItemStack(stack);
|
||||||
|
|
||||||
if (writeItemMethod == null)
|
if (writeItemMethod == null)
|
||||||
writeItemMethod = FuzzyReflection.fromClass(MinecraftReflection.getPacketClass()).
|
writeItemMethod = FuzzyReflection.fromClass(MinecraftReflection.getPacketClass()).getMethod(
|
||||||
getMethodByParameters("writePacket", new Class<?>[] {
|
FuzzyMethodContract.newBuilder().
|
||||||
MinecraftReflection.getItemStackClass(),
|
parameterCount(2).
|
||||||
DataOutputStream.class });
|
parameterDerivedOf(MinecraftReflection.getItemStackClass(), 0).
|
||||||
|
parameterDerivedOf(DataOutput.class, 1).
|
||||||
|
build());
|
||||||
try {
|
try {
|
||||||
writeItemMethod.invoke(null, nmsItem, output);
|
writeItemMethod.invoke(null, nmsItem, output);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.comphenix.protocol.utility;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftItemFactory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.BukkitInitialization;
|
||||||
|
|
||||||
|
@RunWith(org.powermock.modules.junit4.PowerMockRunner.class)
|
||||||
|
@PrepareForTest(CraftItemFactory.class)
|
||||||
|
public class StreamSerializerTest {
|
||||||
|
@BeforeClass
|
||||||
|
public static void initializeBukkit() throws IllegalAccessException {
|
||||||
|
BukkitInitialization.initializeItemMeta();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSerializer() throws IOException {
|
||||||
|
ItemStack before = new ItemStack(Material.GOLD_AXE);
|
||||||
|
|
||||||
|
StreamSerializer serializer = new StreamSerializer();
|
||||||
|
String data = serializer.serializeItemStack(before);
|
||||||
|
ItemStack after = serializer.deserializeItemStack(data);
|
||||||
|
|
||||||
|
assertEquals(before.getType(), after.getType());
|
||||||
|
assertEquals(before.getAmount(), after.getAmount());
|
||||||
|
}
|
||||||
|
}
|
In neuem Issue referenzieren
Einen Benutzer sperren