Commit Graph

553 Commits

Author SHA1 Message Date
Aikar 23dd046b8e Improve parameter permissions and fix RC permission check 2019-03-09 11:27:58 -05:00
Kévin Jimenez d2754b99c9 Add support for CommandPermission annotation as parameter for permiss… (#197)
…ions by Optional annotation

In the past we could not handle a permission in relation to the presence of an optional argument, it forced us to manage it in the body of the command, and could be repetitive and boring, note that it also works with the annotation Default
2019-03-09 11:03:04 -05:00
Aikar d7477cb732 (DEPLOYED ACF) Updated JavaDocs 2019-03-03 11:12:51 -05:00
Aikar ced74bc5d3 Support private methods too on local class.
we stil inherit public methods as previous
2019-03-03 11:11:58 -05:00
Aikar 2d09149f2e (DEPLOYED ACF) Updated JavaDocs 2019-02-27 19:21:57 -05:00
JOO200 7670224d81 Set default help page to one. (#196)
Fix for empty helps with CommandManager#generateCommandHelp()
2019-02-27 17:40:15 -05:00
Aikar 57d541562d (DEPLOYED ACF) Updated JavaDocs 2019-02-25 23:01:03 -05:00
Aikar 1b799355c5 fix command completions for aliases too 2019-02-25 23:00:31 -05:00
Aikar 9cff04301f (DEPLOYED ACF) Updated JavaDocs 2019-02-25 22:47:25 -05:00
Aikar 6a7766e35d Fix command routing for forwarding commands
completions still funky, but least get execution working
2019-02-25 22:46:48 -05:00
Aikar 16ece3d102 (DEPLOYED ACF) Updated JavaDocs 2019-02-25 22:28:47 -05:00
Aikar 5d11925813 Fix NPE in help - Fixes #162 2019-02-25 22:27:03 -05:00
Aikar 4c29b44477 (DEPLOYED ACF) Updated JavaDocs 2019-02-25 21:46:25 -05:00
Aikar 67d631d47c Move to an improved CommandRouter, improve routing logic
now supports splitting commands over multiple BaseCommands better
should now only match probable @Default handlers, so @CatchUnknown
can still work in obviously wrong scenarios.

@HelpCommand no longer implies @Default as @CatchUnknown will pick it up
2019-02-25 21:45:12 -05:00
Aikar 975eb22afd add more test scenarios 2019-02-24 14:36:27 -05:00
Aikar 063bc2f0df (DEPLOYED ACF) Updated JavaDocs 2019-02-24 13:22:03 -05:00
Aikar 9032570ca2 Fix getFirstElement to not care if there is more than 1 2019-02-24 13:19:25 -05:00
Aikar ae9fa93c2a (DEPLOYED ACF) Updated JavaDocs 2019-02-23 22:33:00 -05:00
Aikar 4ef33613fc Do deep lookups on Private annotations
Added method to help do parent/enclosing based lookups
2019-02-23 22:32:05 -05:00
Aikar 115861be9a Fix Default handlers that consume input - #192 Fixed 2019-02-23 21:55:30 -05:00
Aikar a23ff21abf Improve code for scope lookup 2019-02-23 21:43:55 -05:00
JOO200 f235281112 Improve command handling from unknown commands (#195)
Currently there has to be the `@CatchUnknown` method in the same class as the `@Default` method.
Without finding any methods for handling unknown commands the default fallback method is the first registered or the class with `@Default` annotated method inside.

Maybe the solution to throw an exception for an unknown command is better.
The BaseCommand tries to execute the command context and if it's not possible it will throw an UnknownCommandException or smth like that.
2019-02-23 21:39:32 -05:00
Aikar 93f8c0ad84 add copyright plugin to required 2019-02-23 21:25:41 -05:00
Aikar 17d89ad216 More work towards relocating OnlinePlayer context
This context was conflicting with each other over multiple
ACF modules, so if someone wanted to use multiple ACF's in same jar,
it would clash and not work.

The PR to move these was incomplete and this finishes fixing the
context handlers to support new and old.
2019-02-23 21:23:35 -05:00
Aikar 5c1d446c19 Fix improper optional usage in velocity 2019-02-23 21:22:30 -05:00
Aikar 805e5a62ed Remove debug of minecraft version # 2019-02-23 17:35:44 -05:00
McLive f4a5d6f705 Move OnlinePlayer to own packages and deprecate at old locations (#194) 2019-02-23 17:35:37 -05:00
Aikar cadeacaf93 (DEPLOYED ACF) Updated JavaDocs 2019-02-21 19:17:08 -05:00
JOO200 f893e37c97 Added Method-Getter in RegisteredCommand class (#193)
I want to use own annotations for help implementations (link, tooltips, short description etc.)
I can't access the method directly for the annotations, please add the getter ;)
2019-02-21 19:14:58 -05:00
Aikar 59b4392de1 (DEPLOYED ACF) Updated JavaDocs 2019-02-21 18:29:11 -05:00
Aikar 7282dade69 fix arg limit on completion context lookup and remove debug 2019-02-21 18:28:21 -05:00
Aikar 6303cce395 use better exception and reformat completions 2019-02-21 18:28:02 -05:00
Aikar 7c8cd834c6 Update project 2019-02-21 18:27:27 -05:00
Aikar a44d711996 Add more example stuff 2019-02-21 18:16:30 -05:00
Crypnotic 9ad64975bc Added Velocity support (#182)
This PR adds support for the upcoming proxy Velocity.
https://www.velocitypowered.org/

A few note worthy issues:
 - Velocity does not provide a static method for its ProxyServer instance, so the instance has to be passed in by the plugin with `new VelocityCommandManager(proxy, this)`

- Velocity does not provide a way to get the Plugin logger with the provided Plugin or PluginContainer, so it must be fetched using `Logger logger = LoggerFactory.getLogger(plugin.getClass());` UNTESTED

- Velocity uses an annotation to signify the main class, meaning it can't be passed around like the Bukkit and Bungeecord JavaPlugin and Plugin. An Object has to be passed in which the PluginContainer is extracted from it using the Proxy's PluginManager 
`proxy.getPluginManager().getPlugin(plugin.getClass().getAnnotation(Plugin.class).id()).get();`

Any and all feedback is welcomed and appreciated.

*This implementation is essentially a copy/paste/rename. All code belongs to the original author, except the `ACFVelocityUtil#matchPlayer` which was originally written by md_5 and modified to use Velocity classes.*
2019-02-19 21:15:05 -05:00
Aikar 02230709ab (DEPLOYED ACF) Updated JavaDocs 2019-02-14 19:44:04 -05:00
Xavier 8db8d8b183 Fixed an issue where RegisteredCommand mutates the scopes required pe… (#190)
…rmissions and added caching to RegisteredCommand permissions
2019-02-14 16:33:34 -05:00
Aikar 40b1acebde (DEPLOYED ACF) Updated JavaDocs 2019-02-12 17:02:11 -05:00
Xavier b96baaedac BaseCommand#hasPermission checks the required permissions (#188)
Currently the BaseCommand#hasPermission method doesn't actually check if the user has all the required permissions to execute a command, resulting in the following issue:

If user has permission permission.a they can execute:
/example
/example test
/example sub
/example sub testsub

Which is proper but if the user doesn't have permission.a they can only execute:
/example sub testsub

Example code:
```java
@CommandAlias("example")
@CommandPermission("permission.a")
public class ExampleCommand extends BaseCommand {

    @HelpCommand
    public void help(CommandHelp help) {
        help.showHelp();
    }

    @Subcommand("test")
    public void test(CommandSender sender) {
        sender.sendMessage("has permission to test?");
    }

    @Subcommand("sub")
    public class ExampleBCommand extends BaseCommand {

        @Subcommand("testsub")
        public void testSub(CommandSender sender) {
            sender.sendMessage("has permission to testSub?");
        }

    }

    @Subcommand("othersub")
    @CommandPermission("permission.b")
    public class ExampleCCommand extends BaseCommand {

        @Subcommand("othersub")
        public void otherSub(CommandSender sender) {
            sender.sendMessage("has permission to otherSub?");
        }

    }
}
```
2019-02-12 17:00:31 -05:00
Xavier 952e15ba68 Switched getField to getDeclaredField for the locale field in BukkitCommandManager (#189)
This resolves an issue where CraftBukkit has the locale field as private.
2019-02-12 16:49:36 -05:00
Aikar 7ce24aa2e8 (DEPLOYED ACF) Updated JavaDocs 2019-02-11 20:41:30 -05:00
Aikar a140f2dd4a forgot replacement string 2019-02-11 20:41:05 -05:00
Aikar f7c1cc7102 (DEPLOYED ACF) Updated JavaDocs 2019-02-11 20:39:34 -05:00
Aikar 94ee929d0f add User context for Sponge 2019-02-11 20:19:26 -05:00
Aikar 6481f22ea4 Fix last context for forwarding commands - Closes #179 2019-02-11 20:10:46 -05:00
Aikar 1a12993a92 (DEPLOYED ACF) Updated JavaDocs 2019-02-05 01:01:02 -05:00
Aikar 999c803091 Improve permission resolution of RootCommand's
ACF's permission tree can go more complex where a single root command
may have multiple dependent perm nodes.

So essentially ACF does not assign permission nodes to root in bukkit
and the such in a reasonable manner.

With this commit, we try to identify a single unique permission node,
and assign that permission node as the node to use where applicable.

In Bukkit/Sponge, we implement testPermission instead, which does a smarter
look up of all potential commands that root command might execute for the
given issuer, and if they have permission to any of them, then pass as true.

This is much more accurate, so if the issuer has access to no subcommand
then the root command should not be revealed anymore in Bukkit or Sponge.

In bungee, we are best guess at the unique perm node, and if there is
any ambiguity, it will be null and seen by everyone (but still enforces
permission checks)
2019-02-05 00:56:08 -05:00
Aikar 227052f6a2 Fix getContextValue resolving too many args 2019-02-05 00:52:55 -05:00
Aikar ebd60df1f4 Formatting changes 2019-02-05 00:52:44 -05:00
Aikar 2f8b21d865 Fix tabComplete isAsync 2019-02-04 21:23:49 -05:00