mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-30 17:13:43 +01:00 
			
		
		
		
	Display "/plot help" categories only, if the player has permission to access these commands (#3490)
* feat: only show categories with access in help-menu * chore: cleanup imports * feat: tab complete should respect category permissions as well * chore: cleanup imports again * chore: rename ambiguous method name and update access modifier
This commit is contained in:
		 Pierre Maurice Schwang
					Pierre Maurice Schwang
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							fff14b05cb
						
					
				
				
					commit
					16928b05f1
				
			| @@ -28,6 +28,7 @@ package com.plotsquared.core.command; | |||||||
| import com.plotsquared.core.configuration.caption.Caption; | import com.plotsquared.core.configuration.caption.Caption; | ||||||
| import com.plotsquared.core.configuration.caption.LocaleHolder; | import com.plotsquared.core.configuration.caption.LocaleHolder; | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
|  | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -95,4 +96,16 @@ public enum CommandCategory implements Caption { | |||||||
|     public String getComponent(@NonNull LocaleHolder localeHolder) { |     public String getComponent(@NonNull LocaleHolder localeHolder) { | ||||||
|         return this.caption.getComponent(localeHolder); |         return this.caption.getComponent(localeHolder); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Checks if a player has access to this command category | ||||||
|  |      * | ||||||
|  |      * @param player The player to check against | ||||||
|  |      * @return {@code true} if at least one command of this category can be executed by the player, {@code false} otherwise | ||||||
|  |      * @since TODO | ||||||
|  |      */ | ||||||
|  |     boolean canAccess(PlotPlayer<?> player) { | ||||||
|  |         return !MainCommand.getInstance().getCommands(this, player).isEmpty(); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -37,11 +37,11 @@ import net.kyori.adventure.text.Component; | |||||||
| import net.kyori.adventure.text.TextComponent; | import net.kyori.adventure.text.TextComponent; | ||||||
| import net.kyori.adventure.text.minimessage.Template; | import net.kyori.adventure.text.minimessage.Template; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
| import java.util.Locale; | import java.util.Locale; | ||||||
| import java.util.concurrent.CompletableFuture; | import java.util.concurrent.CompletableFuture; | ||||||
| import java.util.stream.Collectors; |  | ||||||
| import java.util.stream.Stream; |  | ||||||
|  |  | ||||||
| @CommandDeclaration(command = "help", | @CommandDeclaration(command = "help", | ||||||
|         aliases = "?", |         aliases = "?", | ||||||
| @@ -119,6 +119,9 @@ public class Help extends Command { | |||||||
|                 TextComponent.Builder builder = Component.text(); |                 TextComponent.Builder builder = Component.text(); | ||||||
|                 builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("help.help_header").getComponent(player))); |                 builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("help.help_header").getComponent(player))); | ||||||
|                 for (CommandCategory c : CommandCategory.values()) { |                 for (CommandCategory c : CommandCategory.values()) { | ||||||
|  |                     if (!c.canAccess(player)) { | ||||||
|  |                         continue; | ||||||
|  |                     } | ||||||
|                     builder.append(Component.newline()).append(MINI_MESSAGE |                     builder.append(Component.newline()).append(MINI_MESSAGE | ||||||
|                             .parse( |                             .parse( | ||||||
|                                     TranslatableCaption.of("help.help_info_item").getComponent(player), |                                     TranslatableCaption.of("help.help_info_item").getComponent(player), | ||||||
| @@ -152,12 +155,26 @@ public class Help extends Command { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) { |     public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) { | ||||||
|         return Stream.of("claiming", "teleport", "settings", "chat", "schematic", "appearance", "info", "debug", |         final String argument = args[0].toLowerCase(Locale.ENGLISH); | ||||||
|                         "administration", "all" |         List<Command> result = new ArrayList<>(); | ||||||
|                 ) |  | ||||||
|                 .filter(value -> value.startsWith(args[0].toLowerCase(Locale.ENGLISH))) |         for (final CommandCategory category : CommandCategory.values()) { | ||||||
|                 .map(value -> new Command(null, false, value, "", RequiredType.NONE, null) { |             if (!category.canAccess(player)) { | ||||||
|                 }).collect(Collectors.toList()); |                 continue; | ||||||
|  |             } | ||||||
|  |             String name = category.name().toLowerCase(); | ||||||
|  |             if (!name.startsWith(argument)) { | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             result.add(new Command(null, false, name, "", RequiredType.NONE, null) { | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         // add the category "all" | ||||||
|  |         if ("all".startsWith(argument)) { | ||||||
|  |             result.add(new Command(null, false, "all", "", RequiredType.NONE, null) { | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -52,8 +52,7 @@ public class HelpMenu { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public HelpMenu getCommands() { |     public HelpMenu getCommands() { | ||||||
|         this.commands = |         this.commands = MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller); | ||||||
|                 MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller); |  | ||||||
|         return this; |         return this; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user