diff --git a/src/main/java/com/comphenix/protocol/events/AbstractStructure.java b/src/main/java/com/comphenix/protocol/events/AbstractStructure.java index cccbfa67..234a6478 100644 --- a/src/main/java/com/comphenix/protocol/events/AbstractStructure.java +++ b/src/main/java/com/comphenix/protocol/events/AbstractStructure.java @@ -887,6 +887,13 @@ public abstract class AbstractStructure { EnumWrappers.getChatFormattingConverter()); } + /** + * Retrieve a read/write structure for optional team parameters in 1.17+. + * @return A modifier for optional team parameters fields. + */ + public StructureModifier> getOptionalTeamParameters() { + return getOptionals(BukkitConverters.getWrappedTeamParametersConverter()); + } /** * Retrieve a read/write structure for the MinecraftKey class. diff --git a/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java b/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java index 7e714fcb..da3e5e90 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java +++ b/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java @@ -640,6 +640,10 @@ public class BukkitConverters { return ignoreNull(handle(WrappedLevelChunkData.LightData::getHandle, WrappedLevelChunkData.LightData::new, WrappedLevelChunkData.LightData.class)); } + public static EquivalentConverter getWrappedTeamParametersConverter() { + return ignoreNull(handle(WrappedTeamParameters::getHandle, WrappedTeamParameters::new, WrappedTeamParameters.class)); + } + public static EquivalentConverter getPacketContainerConverter() { return ignoreNull(handle(PacketContainer::getHandle, PacketContainer::fromPacket, PacketContainer.class)); } diff --git a/src/main/java/com/comphenix/protocol/wrappers/WrappedTeamParameters.java b/src/main/java/com/comphenix/protocol/wrappers/WrappedTeamParameters.java index f2aa9f2f..a9354163 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/WrappedTeamParameters.java +++ b/src/main/java/com/comphenix/protocol/wrappers/WrappedTeamParameters.java @@ -14,7 +14,7 @@ import org.jetbrains.annotations.Nullable; * @since 1.17 */ public class WrappedTeamParameters extends AbstractWrapper { - private static Class getNmsClass() { + public static Class getNmsClassOrThrow() { return MinecraftReflection.getTeamParametersClass() .orElseThrow(() -> new IllegalStateException("Team parameters class doesn't exist on this server version")); } @@ -37,9 +37,9 @@ public class WrappedTeamParameters extends AbstractWrapper { private final StructureModifier modifier; public WrappedTeamParameters(Object handle) { - super(getNmsClass()); + super(getNmsClassOrThrow()); setHandle(handle); - this.modifier = new StructureModifier<>(getNmsClass()).withTarget(handle); + this.modifier = new StructureModifier<>(getNmsClassOrThrow()).withTarget(handle); } @NotNull @@ -155,7 +155,7 @@ public class WrappedTeamParameters extends AbstractWrapper { Preconditions.checkNotNull(color, "Color not set"); // Not technically a packet, but it has a PacketDataSerializer constructor, so it works fine - Object handle = StructureCache.newPacket(getNmsClass()); + Object handle = StructureCache.newPacket(getNmsClassOrThrow()); WrappedTeamParameters wrapped = new WrappedTeamParameters(handle); wrapped.writeComponent(0, displayName);