From 26ecc2877b322a693410ef671b364b4e0770dc95 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Thu, 1 Aug 2024 19:09:10 -0700 Subject: [PATCH] Add helper for registering adventure argument types on NeoForge --- .../neoforge/AdventureArgumentTypes.java | 52 +++++++++++++++++++ .../impl/AdventureNeoforgeCommon.java | 27 +++++++++- .../tester/neoforge/AdventureNeoTester.java | 26 ++-------- 3 files changed, 80 insertions(+), 25 deletions(-) create mode 100644 neoforge/src/main/java/net/kyori/adventure/platform/neoforge/AdventureArgumentTypes.java diff --git a/neoforge/src/main/java/net/kyori/adventure/platform/neoforge/AdventureArgumentTypes.java b/neoforge/src/main/java/net/kyori/adventure/platform/neoforge/AdventureArgumentTypes.java new file mode 100644 index 00000000..bca61264 --- /dev/null +++ b/neoforge/src/main/java/net/kyori/adventure/platform/neoforge/AdventureArgumentTypes.java @@ -0,0 +1,52 @@ +/* + * This file is part of adventure-platform-mod, licensed under the MIT License. + * + * Copyright (c) 2024 KyoriPowered + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package net.kyori.adventure.platform.neoforge; + +import net.kyori.adventure.platform.neoforge.impl.AdventureNeoforgeCommon; + +/** + * Helper for registering {@link net.kyori.adventure.platform.modcommon.ComponentArgumentType} and + * {@link net.kyori.adventure.platform.modcommon.KeyArgumentType}. + */ +public final class AdventureArgumentTypes { + private AdventureArgumentTypes() { + } + + private static boolean registered = false; + + /** + * Registers the Adventure {@link com.mojang.brigadier.arguments.ArgumentType}s. + * + *
This is not done by default as it requires the client to also register the types.
+ */ + public static synchronized void register() { + if (registered) { + return; + } + + registered = true; + + AdventureNeoforgeCommon.registerArgumentTypes(); + } +} diff --git a/neoforge/src/main/java/net/kyori/adventure/platform/neoforge/impl/AdventureNeoforgeCommon.java b/neoforge/src/main/java/net/kyori/adventure/platform/neoforge/impl/AdventureNeoforgeCommon.java index 99bda312..224578cf 100644 --- a/neoforge/src/main/java/net/kyori/adventure/platform/neoforge/impl/AdventureNeoforgeCommon.java +++ b/neoforge/src/main/java/net/kyori/adventure/platform/neoforge/impl/AdventureNeoforgeCommon.java @@ -29,8 +29,11 @@ import java.util.Objects; import java.util.concurrent.ExecutionException; import net.kyori.adventure.permission.PermissionChecker; +import net.kyori.adventure.platform.modcommon.ComponentArgumentType; +import net.kyori.adventure.platform.modcommon.KeyArgumentType; import net.kyori.adventure.platform.modcommon.impl.AdventureCommon; import net.kyori.adventure.platform.modcommon.impl.ClickCallbackRegistry; +import net.kyori.adventure.platform.modcommon.impl.ComponentArgumentTypeSerializer; import net.kyori.adventure.platform.modcommon.impl.LocaleHolderBridge; import net.kyori.adventure.platform.modcommon.impl.PlatformHooks; import net.kyori.adventure.platform.modcommon.impl.SidedProxy; @@ -45,13 +48,19 @@ import net.kyori.adventure.pointer.Pointered; import net.kyori.adventure.pointer.Pointers; import net.kyori.adventure.util.TriState; +import net.minecraft.commands.synchronization.ArgumentTypeInfo; +import net.minecraft.commands.synchronization.ArgumentTypeInfos; +import net.minecraft.commands.synchronization.SingletonArgumentInfo; +import net.minecraft.core.registries.Registries; import net.minecraft.server.level.ServerPlayer; import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.common.Mod; import net.neoforged.fml.loading.FMLLoader; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.RegisterCommandsEvent; import net.neoforged.neoforge.event.entity.player.ClientInformationUpdatedEvent; +import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.server.permission.PermissionAPI; import net.neoforged.neoforge.server.permission.nodes.PermissionNode; import net.neoforged.neoforge.server.permission.nodes.PermissionTypes; @@ -59,8 +68,9 @@ @Mod("adventure_platform_neoforge") @SuppressWarnings("checkstyle:HideUtilityClassConstructor") // Not a utility class, this is our main mod class. -public class AdventureNeoforgeCommon { +public final class AdventureNeoforgeCommon { public static SidedProxy SIDE_PROXY; + private static final DeferredRegister