Archiviert
13
0

Hopefully fix chat cloning issues

Addresses #601
Dieser Commit ist enthalten in:
Dan Mulloy 2019-05-06 16:20:19 -04:00
Ursprung b14b4cc345
Commit 9f5d95f617
3 geänderte Dateien mit 16 neuen und 2 gelöschten Zeilen

Datei anzeigen

@ -77,6 +77,7 @@ public class BukkitCloner implements Cloner {
fromWrapper(MinecraftReflection::getIBlockDataClass, WrappedBlockData::fromHandle); fromWrapper(MinecraftReflection::getIBlockDataClass, WrappedBlockData::fromHandle);
fromManual(MinecraftReflection::getNonNullListClass, source -> nonNullListCloner().clone(source)); fromManual(MinecraftReflection::getNonNullListClass, source -> nonNullListCloner().clone(source));
fromWrapper(MinecraftReflection::getNBTBaseClass, NbtFactory::fromNMS); fromWrapper(MinecraftReflection::getNBTBaseClass, NbtFactory::fromNMS);
fromWrapper(MinecraftReflection::getIChatBaseComponentClass, WrappedChatComponent::fromHandle);
} }
private Function<Object, Object> findCloner(Class<?> type) { private Function<Object, Object> findCloner(Class<?> type) {

Datei anzeigen

@ -16,7 +16,7 @@ import com.google.common.base.Preconditions;
* Represents a chat component added in Minecraft 1.7.2 * Represents a chat component added in Minecraft 1.7.2
* @author Kristian * @author Kristian
*/ */
public class WrappedChatComponent extends AbstractWrapper { public class WrappedChatComponent extends AbstractWrapper implements ClonableWrapper {
private static final Class<?> SERIALIZER = MinecraftReflection.getChatSerializerClass(); private static final Class<?> SERIALIZER = MinecraftReflection.getChatSerializerClass();
private static final Class<?> COMPONENT = MinecraftReflection.getIChatBaseComponentClass(); private static final Class<?> COMPONENT = MinecraftReflection.getIChatBaseComponentClass();
private static final Class<?> GSON_CLASS = MinecraftReflection.getMinecraftGsonClass(); private static final Class<?> GSON_CLASS = MinecraftReflection.getMinecraftGsonClass();

Datei anzeigen

@ -32,6 +32,7 @@ import com.comphenix.protocol.wrappers.nbt.NbtCompound;
import com.comphenix.protocol.wrappers.nbt.NbtFactory; import com.comphenix.protocol.wrappers.nbt.NbtFactory;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.md_5.bungee.api.chat.*;
import net.minecraft.server.v1_14_R1.*; import net.minecraft.server.v1_14_R1.*;
import net.minecraft.server.v1_14_R1.PacketPlayOutUpdateAttributes.AttributeSnapshot; import net.minecraft.server.v1_14_R1.PacketPlayOutUpdateAttributes.AttributeSnapshot;
@ -70,6 +71,12 @@ public class PacketContainerTest {
public static void initializeBukkit() { public static void initializeBukkit() {
BukkitInitialization.initializeItemMeta(); BukkitInitialization.initializeItemMeta();
BukkitInitialization.initializePackage(); BukkitInitialization.initializePackage();
TEST_COMPONENT = ComponentConverter.fromBaseComponent(
new ComponentBuilder("Hit or miss?")
.event(new ClickEvent(ClickEvent.Action.OPEN_URL, "http://reddit.com"))
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[] { new TextComponent("The \"front page\" of the internet") }))
.append("I guess they never miss, huh?").create());
} }
private <T> void testPrimitive(StructureModifier<T> modifier, int index, T initialValue, T testValue) { private <T> void testPrimitive(StructureModifier<T> modifier, int index, T initialValue, T testValue) {
@ -504,6 +511,8 @@ public class PacketContainerTest {
PacketType.Play.Server.TAGS PacketType.Play.Server.TAGS
); );
private static WrappedChatComponent TEST_COMPONENT;
@Test @Test
public void testDeepClone() { public void testDeepClone() {
// Try constructing all the packets // Try constructing all the packets
@ -525,8 +534,12 @@ public class PacketContainerTest {
(byte) 1), (byte) 1),
new WrappedWatchableObject(new WrappedDataWatcherObject(0, Registry.get(String.class)), new WrappedWatchableObject(new WrappedDataWatcherObject(0, Registry.get(String.class)),
"String"), "String"),
new WrappedWatchableObject(new WrappedDataWatcherObject(0, Registry.get(Float.class)), 1.0F) new WrappedWatchableObject(new WrappedDataWatcherObject(0, Registry.get(Float.class)), 1.0F),
new WrappedWatchableObject(new WrappedDataWatcherObject(0, Registry.getChatComponentSerializer(true)),
com.google.common.base.Optional.of(TEST_COMPONENT.getHandle()))
)); ));
} else if (type == PacketType.Play.Server.CHAT) {
constructed.getChatComponents().write(0, TEST_COMPONENT);
} }
// Clone the packet // Clone the packet