From 586583cae50f9ee92aa502af33175d56a86f88a2 Mon Sep 17 00:00:00 2001 From: HPnetwork Date: Sat, 12 Sep 2026 14:36:42 -0400 Subject: [PATCH] Handle collected alternative commands --- .../AlternativeCommandsHandler.java | 4 ++ .../AlternativeCommandsHandlerTest.java | 47 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 Essentials/src/test/java/com/earth2me/essentials/AlternativeCommandsHandlerTest.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java index 01f7fa3caf0..e4231a90600 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java @@ -129,6 +129,10 @@ public Command getAlternative(final String label) { } } + if (commands.isEmpty()) { + return null; + } + // return the first alias return commands.get(0).get(); } diff --git a/Essentials/src/test/java/com/earth2me/essentials/AlternativeCommandsHandlerTest.java b/Essentials/src/test/java/com/earth2me/essentials/AlternativeCommandsHandlerTest.java new file mode 100644 index 00000000000..03a816c4074 --- /dev/null +++ b/Essentials/src/test/java/com/earth2me/essentials/AlternativeCommandsHandlerTest.java @@ -0,0 +1,47 @@ +package com.earth2me.essentials; + +import org.bukkit.Server; +import org.bukkit.command.Command; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.junit.jupiter.api.Test; + +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +class AlternativeCommandsHandlerTest { + + @Test + void returnsNullWhenAllAlternativeCommandsHaveBeenCollected() throws Exception { + final IEssentials essentials = mock(IEssentials.class); + final Server server = mock(Server.class); + final PluginManager pluginManager = mock(PluginManager.class); + final ISettings settings = mock(ISettings.class); + when(essentials.getServer()).thenReturn(server); + when(server.getPluginManager()).thenReturn(pluginManager); + when(pluginManager.getPlugins()).thenReturn(new Plugin[0]); + when(essentials.getSettings()).thenReturn(settings); + when(settings.isDebug()).thenReturn(false); + + final AlternativeCommandsHandler handler = new AlternativeCommandsHandler(essentials); + final Field field = AlternativeCommandsHandler.class.getDeclaredField("altCommands"); + field.setAccessible(true); + @SuppressWarnings("unchecked") + final Map>> alternatives = + (Map>>) field.get(handler); + alternatives.put("foo", new ArrayList<>(Arrays.asList( + new WeakReference(null), + new WeakReference(null) + ))); + + assertNull(handler.getAlternative("foo")); + } +}