mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 17:43:44 +01:00 
			
		
		
		
	implement the command requirement logic
This commit is contained in:
		| @@ -1,3 +1,21 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
| package com.plotsquared.core.commands; | package com.plotsquared.core.commands; | ||||||
|  |  | ||||||
| import cloud.commandframework.annotations.Argument; | import cloud.commandframework.annotations.Argument; | ||||||
| @@ -6,7 +24,7 @@ import cloud.commandframework.annotations.CommandPermission; | |||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
| import com.plotsquared.core.commands.arguments.PlotMember; | import com.plotsquared.core.commands.arguments.PlotMember; | ||||||
| import com.plotsquared.core.commands.requirements.Requirement; | import com.plotsquared.core.commands.requirements.Requirement; | ||||||
| import com.plotsquared.core.commands.requirements.RequirementType; | import com.plotsquared.core.commands.requirements.CommandRequirement; | ||||||
| import com.plotsquared.core.configuration.Settings; | import com.plotsquared.core.configuration.Settings; | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
| import com.plotsquared.core.permissions.Permission; | import com.plotsquared.core.permissions.Permission; | ||||||
| @@ -28,8 +46,8 @@ class CommandAdd implements PlotSquaredCommandContainer { | |||||||
|         this.eventDispatcher = eventDispatcher; |         this.eventDispatcher = eventDispatcher; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Requirement(RequirementType.PLAYER) |     @Requirement(CommandRequirement.PLAYER) | ||||||
|     @Requirement(RequirementType.IS_OWNER) |     @Requirement(CommandRequirement.IS_OWNER) | ||||||
|     @CommandPermission("plots.add") |     @CommandPermission("plots.add") | ||||||
|     @CommandMethod("plot add [target]") |     @CommandMethod("plot add [target]") | ||||||
|     public void commandAdd( |     public void commandAdd( | ||||||
|   | |||||||
| @@ -1,3 +1,21 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
| package com.plotsquared.core.commands; | package com.plotsquared.core.commands; | ||||||
|  |  | ||||||
| import cloud.commandframework.captions.Caption; | import cloud.commandframework.captions.Caption; | ||||||
|   | |||||||
| @@ -1,3 +1,21 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
| package com.plotsquared.core.commands; | package com.plotsquared.core.commands; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|   | |||||||
| @@ -24,6 +24,9 @@ import cloud.commandframework.meta.SimpleCommandMeta; | |||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
| import com.google.inject.Injector; | import com.google.inject.Injector; | ||||||
| import com.plotsquared.core.commands.parsers.PlotMemberParser; | import com.plotsquared.core.commands.parsers.PlotMemberParser; | ||||||
|  | import com.plotsquared.core.commands.requirements.CommandRequirementBuilderModifier; | ||||||
|  | import com.plotsquared.core.commands.requirements.CommandRequirementPostProcessor; | ||||||
|  | import com.plotsquared.core.commands.requirements.Requirements; | ||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import io.leangen.geantyref.TypeToken; | import io.leangen.geantyref.TypeToken; | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
| @@ -49,6 +52,8 @@ public class PlotSquaredCommandManager { | |||||||
|                 }, |                 }, | ||||||
|                 parameters -> SimpleCommandMeta.empty() |                 parameters -> SimpleCommandMeta.empty() | ||||||
|         ); |         ); | ||||||
|  |         this.annotationParser.registerBuilderModifier(Requirements.class, new CommandRequirementBuilderModifier()); | ||||||
|  |         this.commandManager.registerCommandPostProcessor(new CommandRequirementPostProcessor()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -1,3 +1,21 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
| package com.plotsquared.core.commands.arguments; | package com.plotsquared.core.commands.arguments; | ||||||
|  |  | ||||||
| import cloud.commandframework.context.CommandContext; | import cloud.commandframework.context.CommandContext; | ||||||
|   | |||||||
| @@ -1,3 +1,21 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
| package com.plotsquared.core.commands.parsers; | package com.plotsquared.core.commands.parsers; | ||||||
|  |  | ||||||
| import cloud.commandframework.annotations.parsers.Parser; | import cloud.commandframework.annotations.parsers.Parser; | ||||||
|   | |||||||
| @@ -0,0 +1,88 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  | package com.plotsquared.core.commands.requirements; | ||||||
|  |  | ||||||
|  | import cloud.commandframework.meta.CommandMeta; | ||||||
|  | import com.plotsquared.core.configuration.caption.Caption; | ||||||
|  | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
|  | import com.plotsquared.core.player.ConsolePlayer; | ||||||
|  | import com.plotsquared.core.player.PlotPlayer; | ||||||
|  | import io.leangen.geantyref.TypeToken; | ||||||
|  | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|  |  | ||||||
|  | import java.util.Arrays; | ||||||
|  | import java.util.Collections; | ||||||
|  | import java.util.EnumSet; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Objects; | ||||||
|  | import java.util.Set; | ||||||
|  | import java.util.function.Predicate; | ||||||
|  |  | ||||||
|  | public enum CommandRequirement { | ||||||
|  |     PLAYER( | ||||||
|  |             "", | ||||||
|  |             player -> !(player instanceof ConsolePlayer) | ||||||
|  |     ), | ||||||
|  |     IN_PLOT( | ||||||
|  |             "errors.not_in_plot", | ||||||
|  |             player -> player.getCurrentPlot() != null | ||||||
|  |     ), | ||||||
|  |     PLOT_HAS_OWNER( | ||||||
|  |             "info.plot_unowned", | ||||||
|  |             player -> Objects.requireNonNull(player.getCurrentPlot()).hasOwner(), | ||||||
|  |             IN_PLOT | ||||||
|  |     ), | ||||||
|  |     IS_OWNER( | ||||||
|  |             "permission.no_plot_perms", | ||||||
|  |             player -> Objects.requireNonNull(player.getCurrentPlot()).isOwner(player.getUUID()), | ||||||
|  |             PLOT_HAS_OWNER | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     public static final CommandMeta.Key<List<CommandRequirement>> COMMAND_REQUIREMENTS_KEY = CommandMeta.Key.of( | ||||||
|  |             new TypeToken<List<CommandRequirement>>() { | ||||||
|  |             }, | ||||||
|  |             "command_requirements" | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     private final @NonNull Caption caption; | ||||||
|  |     private final @NonNull Predicate<@NonNull PlotPlayer<?>> requirementPredicate; | ||||||
|  |     private final @NonNull Set<@NonNull CommandRequirement> inheritedRequirements; | ||||||
|  |  | ||||||
|  |     CommandRequirement( | ||||||
|  |             final @NonNull String caption, | ||||||
|  |             final @NonNull Predicate<@NonNull PlotPlayer<?>> requirementPredicate, | ||||||
|  |             final @NonNull CommandRequirement... inheritedRequirements | ||||||
|  |     ) { | ||||||
|  |         this.caption = TranslatableCaption.of(caption); | ||||||
|  |         this.requirementPredicate = requirementPredicate; | ||||||
|  |         this.inheritedRequirements = EnumSet.copyOf(Arrays.asList(inheritedRequirements)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public @NonNull Set<@NonNull CommandRequirement> inheritedRequirements() { | ||||||
|  |         return Collections.unmodifiableSet(this.inheritedRequirements); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public @NonNull Caption caption() { | ||||||
|  |         return this.caption; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean checkRequirement(final @NonNull PlotPlayer<?> player) { | ||||||
|  |         return this.requirementPredicate.test(player); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,61 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  | package com.plotsquared.core.commands.requirements; | ||||||
|  |  | ||||||
|  | import cloud.commandframework.Command; | ||||||
|  | import com.plotsquared.core.player.PlotPlayer; | ||||||
|  | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|  |  | ||||||
|  | import java.util.EnumSet; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Set; | ||||||
|  | import java.util.function.BiFunction; | ||||||
|  |  | ||||||
|  | public class CommandRequirementBuilderModifier implements BiFunction< | ||||||
|  |         @NonNull Requirements, | ||||||
|  |         Command.@NonNull Builder<PlotPlayer<?>>, | ||||||
|  |         Command.@NonNull Builder<PlotPlayer<?>> | ||||||
|  | > { | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Command.@NonNull Builder<PlotPlayer<?>> apply( | ||||||
|  |             final @NonNull Requirements requirements, | ||||||
|  |             final Command.@NonNull Builder<PlotPlayer<?>> builder | ||||||
|  |     ) { | ||||||
|  |         // We use a list, because we want them to be evaluated in order. | ||||||
|  |         final Set<CommandRequirement> commandRequirements = EnumSet.noneOf(CommandRequirement.class); | ||||||
|  |         for (final Requirement requirement : requirements.value()) { | ||||||
|  |             this.addRequirements(commandRequirements, requirement.value()); | ||||||
|  |         } | ||||||
|  |         // We then sort the requirements. | ||||||
|  |         final List<CommandRequirement> sortedRequirements = commandRequirements.stream().sorted().toList(); | ||||||
|  |         // We then register all the types in the command metadata. | ||||||
|  |         return builder.meta(CommandRequirement.COMMAND_REQUIREMENTS_KEY, sortedRequirements); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void addRequirements( | ||||||
|  |             final @NonNull Set<@NonNull CommandRequirement> requirements, | ||||||
|  |             final @NonNull CommandRequirement requirement | ||||||
|  |     ) { | ||||||
|  |         for (final CommandRequirement inheritedRequirement : requirement.inheritedRequirements()) { | ||||||
|  |             addRequirements(requirements, inheritedRequirement); | ||||||
|  |         } | ||||||
|  |         requirements.add(requirement); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,54 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  | package com.plotsquared.core.commands.requirements; | ||||||
|  |  | ||||||
|  | import cloud.commandframework.Command; | ||||||
|  | import cloud.commandframework.execution.postprocessor.CommandPostprocessingContext; | ||||||
|  | import cloud.commandframework.execution.postprocessor.CommandPostprocessor; | ||||||
|  | import cloud.commandframework.services.types.ConsumerService; | ||||||
|  | import com.plotsquared.core.player.PlotPlayer; | ||||||
|  | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class CommandRequirementPostProcessor implements CommandPostprocessor<PlotPlayer<?>> { | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void accept( | ||||||
|  |             @NonNull final CommandPostprocessingContext<PlotPlayer<?>> context | ||||||
|  |     ) { | ||||||
|  |         final Command<PlotPlayer<?>> command = context.getCommand(); | ||||||
|  |         final PlotPlayer<?> player = context.getCommandContext().getSender();; | ||||||
|  |         final List<CommandRequirement> commandRequirements = command.getCommandMeta().get( | ||||||
|  |                 CommandRequirement.COMMAND_REQUIREMENTS_KEY | ||||||
|  |         ).orElse(List.of()); | ||||||
|  |  | ||||||
|  |         for (final CommandRequirement requirement : commandRequirements) { | ||||||
|  |             if (requirement.checkRequirement(player)) { | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // They failed the requirement =( | ||||||
|  |             player.sendMessage(requirement.caption()); | ||||||
|  |  | ||||||
|  |             // Then we interrupt to make sure the command isn't executed. | ||||||
|  |             ConsumerService.interrupt(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,3 +1,21 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
| package com.plotsquared.core.commands.requirements; | package com.plotsquared.core.commands.requirements; | ||||||
|  |  | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
| @@ -13,5 +31,5 @@ import java.lang.annotation.Target; | |||||||
| @Target(ElementType.METHOD) | @Target(ElementType.METHOD) | ||||||
| public @interface Requirement { | public @interface Requirement { | ||||||
|  |  | ||||||
|     @NonNull RequirementType value(); |     @NonNull CommandRequirement value(); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,36 +0,0 @@ | |||||||
| package com.plotsquared.core.commands.requirements; |  | ||||||
|  |  | ||||||
| import com.plotsquared.core.configuration.caption.Caption; |  | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; |  | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; |  | ||||||
|  |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Collections; |  | ||||||
| import java.util.EnumSet; |  | ||||||
| import java.util.Set; |  | ||||||
|  |  | ||||||
| public enum RequirementType { |  | ||||||
|     PLAYER(""), |  | ||||||
|     IN_PLOT("errors.not_in_plot"), |  | ||||||
|     PLOT_HAS_OWNER("info.plot_unowned", IN_PLOT), |  | ||||||
|     IS_OWNER("permission.no_plot_perms", PLOT_HAS_OWNER); |  | ||||||
|  |  | ||||||
|     private final Caption caption; |  | ||||||
|     private @NonNull Set<@NonNull RequirementType> inheritedRequirements; |  | ||||||
|  |  | ||||||
|     RequirementType( |  | ||||||
|             final String caption, |  | ||||||
|             final @NonNull RequirementType... inheritedRequirements |  | ||||||
|     ) { |  | ||||||
|         this.caption = TranslatableCaption.of(caption); |  | ||||||
|         this.inheritedRequirements = EnumSet.copyOf(Arrays.asList(inheritedRequirements)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public @NonNull Set<@NonNull RequirementType> inheritedRequirements() { |  | ||||||
|         return Collections.unmodifiableSet(this.inheritedRequirements); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public @NonNull Caption caption() { |  | ||||||
|         return this.caption; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,3 +1,21 @@ | |||||||
|  | /* | ||||||
|  |  * PlotSquared, a land and world management plugin for Minecraft. | ||||||
|  |  * Copyright (C) IntellectualSites <https://intellectualsites.com> | ||||||
|  |  * Copyright (C) IntellectualSites team and contributors | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
| package com.plotsquared.core.commands.requirements; | package com.plotsquared.core.commands.requirements; | ||||||
|  |  | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|   | |||||||
| @@ -288,7 +288,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|      * |      * | ||||||
|      * @return the plot the player is standing on or null if standing on a road or not in a {@link PlotArea} |      * @return the plot the player is standing on or null if standing on a road or not in a {@link PlotArea} | ||||||
|      */ |      */ | ||||||
|     public Plot getCurrentPlot() { |     public @Nullable Plot getCurrentPlot() { | ||||||
|         try (final MetaDataAccess<Plot> lastPlotAccess = |         try (final MetaDataAccess<Plot> lastPlotAccess = | ||||||
|                      this.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { |                      this.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { | ||||||
|             if (lastPlotAccess.get().orElse(null) == null && !Settings.Enabled_Components.EVENTS) { |             if (lastPlotAccess.get().orElse(null) == null && !Settings.Enabled_Components.EVENTS) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Söderberg
					Alexander Söderberg