From 6c5a05a8b8db6e1012366be3a4ba9f55a601563d Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Tue, 20 Aug 2024 19:23:59 +0200 Subject: [PATCH] Remove options taking a ResourcePack, use uuids Add uuid shortcut to ResourcePack interface Make the priority a double, add LOWEST and HIGHEST priorities --- .../SessionLoadResourcePacksEvent.java | 23 ++---------- .../api/pack/option/PriorityOption.java | 10 +++--- .../SessionLoadResourcePacksEventImpl.java | 36 +++++++------------ .../pack/option/GeyserPriorityOption.java | 2 +- .../loader/ProviderRegistryLoader.java | 2 +- 5 files changed, 23 insertions(+), 50 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoadResourcePacksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoadResourcePacksEvent.java index fbb3b6609..1894750bc 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoadResourcePacksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoadResourcePacksEvent.java @@ -61,7 +61,7 @@ public abstract class SessionLoadResourcePacksEvent extends ConnectionEvent { public abstract boolean register(@NonNull ResourcePack resourcePack); /** - * Registers a {@link ResourcePack} to be sent to the client, but alongside + * Registers a {@link ResourcePack} to be sent to the client, alongside * specific options. * * @param resourcePack a resource pack that will be sent to the client. @@ -71,15 +71,6 @@ public abstract class SessionLoadResourcePacksEvent extends ConnectionEvent { */ public abstract boolean register(@NonNull ResourcePack resourcePack, @Nullable ResourcePackOption... options); - /** - * Sets {@link ResourcePackOption}'s for a resource pack - * - * @param resourcePack the resource pack to register the options for - * @param options the options to register for the pack - * @throws IllegalArgumentException if the pack is not registered. - */ - public abstract void registerOptions(@NonNull ResourcePack resourcePack, @NonNull ResourcePackOption... options); - /** * Sets {@link ResourcePackOption}'s for a resource pack * @@ -89,22 +80,14 @@ public abstract class SessionLoadResourcePacksEvent extends ConnectionEvent { */ public abstract void registerOptions(@NonNull UUID uuid, @NonNull ResourcePackOption... options); - /** - * Returns the subpack options set for a specific resource pack. - * - * @param resourcePack the resourcePack for which the options are set - * @return a list of {@link ResourcePackOption} - */ - public abstract Collection options(ResourcePack resourcePack); - /** * Returns the subpack options set for a specific resource pack uuid. * These are not modifiable. * - * @param resourcePack the resourcePack for which the options are set + * @param uuid the resourcePack for which the options are set * @return a list of {@link ResourcePackOption} */ - public abstract Collection options(UUID resourcePack); + public abstract Collection options(UUID uuid); /** * Unregisters a resource pack from being sent to the client. diff --git a/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java b/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java index 0287dc26a..a889799cc 100644 --- a/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java +++ b/api/src/main/java/org/geysermc/geyser/api/pack/option/PriorityOption.java @@ -34,16 +34,18 @@ import org.geysermc.geyser.api.GeyserApi; */ public interface PriorityOption extends ResourcePackOption { - PriorityOption HIGH = PriorityOption.priority(10); + PriorityOption HIGHEST = PriorityOption.priority(10); + PriorityOption HIGH = PriorityOption.priority(8); PriorityOption NORMAL = PriorityOption.priority(5); - PriorityOption LOW = PriorityOption.priority(0); + PriorityOption LOW = PriorityOption.priority(3); + PriorityOption LOWEST = PriorityOption.priority(0); /** * The priority of the resource pack * * @return priority */ - int priority(); + double priority(); /** * Constructs a priority option based on a value between 0 and 10 @@ -51,7 +53,7 @@ public interface PriorityOption extends ResourcePackOption { * @param priority an integer that is above 0, but smaller than 10 * @return the priority option */ - static PriorityOption priority(int priority) { + static PriorityOption priority(double priority) { if (priority < 0 || priority > 10) { throw new IllegalArgumentException("Priority must be between 0 and 10 inclusive!"); } diff --git a/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java index 33cb23332..c1fe7334f 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java @@ -68,7 +68,7 @@ public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksE } public LinkedList orderedPacks() { - TreeSet> sortedPacks = packs.values().stream() + TreeSet> sortedPacks = packs.values().stream() // Map each ResourcePack to a pair of (ResourcePack, Priority) .map(pack -> new AbstractMap.SimpleEntry<>(pack, getPriority(pack))) // Sort by priority in ascending order @@ -88,11 +88,12 @@ public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksE } // Helper method to get the priority of a ResourcePack - private int getPriority(GeyserResourcePack pack) { + private double getPriority(GeyserResourcePack pack) { ResourcePackOption option; OptionHolder holder = options.get(pack.uuid()); if (holder == null) { + // priority is always set option = pack.options().get(ResourcePackOption.Type.PRIORITY); } else { option = options.get(pack.uuid()) @@ -140,11 +141,15 @@ public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksE return register(resourcePack, PriorityOption.NORMAL); } - public void registerOption(@NonNull ResourcePack resourcePack, @NonNull ResourcePackOption option) { + private void registerOption(@NonNull ResourcePack resourcePack, @Nullable ResourcePackOption... options) { + if (options == null) { + return; + } + GeyserResourcePack pack = validate(resourcePack); OptionHolder holder = this.options.computeIfAbsent(pack.uuid(), $ -> new OptionHolder()); - holder.add(option); + holder.add(options); holder.validateOptions(pack); } @@ -160,37 +165,20 @@ public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksE packs.put(uuid, pack); // register options - OptionHolder holder = new OptionHolder(); - holder.add(options); - holder.validateOptions(pack); - this.options.put(uuid, holder); - + registerOption(resourcePack, options); return true; } - @Override - public void registerOptions(@NonNull ResourcePack resourcePack, @NonNull ResourcePackOption... options) { - validate(resourcePack); - registerOptions(resourcePack.uuid()); - } - @Override public void registerOptions(@NonNull UUID uuid, @NonNull ResourcePackOption... options) { Objects.requireNonNull(uuid); + Objects.requireNonNull(options); GeyserResourcePack resourcePack = packs.get(uuid); if (resourcePack == null) { throw new IllegalArgumentException("Pack with uuid %s not registered yet!".formatted(uuid)); } - OptionHolder holder = this.options.computeIfAbsent(uuid, $ -> new OptionHolder()); - holder.add(options); - holder.validateOptions(resourcePack); - } - - @Override - public Collection options(@NonNull ResourcePack resourcePack) { - validate(resourcePack); - return options(resourcePack.uuid()); + registerOption(resourcePack, options); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/pack/option/GeyserPriorityOption.java b/core/src/main/java/org/geysermc/geyser/pack/option/GeyserPriorityOption.java index 2e536cdf1..a8cbc929a 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/option/GeyserPriorityOption.java +++ b/core/src/main/java/org/geysermc/geyser/pack/option/GeyserPriorityOption.java @@ -31,7 +31,7 @@ import org.geysermc.geyser.api.pack.option.PriorityOption; import java.util.Objects; -public record GeyserPriorityOption(int priority) implements PriorityOption { +public record GeyserPriorityOption(double priority) implements PriorityOption { public GeyserPriorityOption { if (priority < 0 || priority > 10) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index ac67a4717..b80612667 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -86,7 +86,7 @@ public class ProviderRegistryLoader implements RegistryLoader, Prov // packs providers.put(PathPackCodec.class, args -> new GeyserPathPackCodec((Path) args[0])); - providers.put(PriorityOption.class, args -> new GeyserPriorityOption((int) args[0])); + providers.put(PriorityOption.class, args -> new GeyserPriorityOption((double) args[0])); providers.put(SubpackOption.class, args -> new GeyserSubpackOption((String) args[0])); // items