Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow developers to control Arguments' CommandSyntaxExceptions #370

Closed
wants to merge 86 commits into from

Conversation

willkroboth
Copy link
Collaborator

@willkroboth willkroboth commented Nov 27, 2022

When a raw command gets parsed into an Object array, there are two parts: Brigadier's initial parse from a raw command String to Minecraft objects, and the CommandAPI's parse from those Minecraft objects to Bukkit objects. Both of these steps may throw CommandSyntaxExceptions, and this PR intercepts those exceptions and adds API methods that allow developers to do something when this happens. You can read the following comments for details about each of the parts of this system.

Todo List

Things that should be done before this PR is ready to merge:

  • Test the implementation of registerCustomArgumentType for each Minecraft version (at least 1.16.5+)
    • Need to test implementation for 1.19.3
    • Merge update and test for 1.19.4
  • Expand the ArgumentParseExceptionContext and InitialParseExcpetionContext records
  • Make sure it works with CommandTrees
  • Test with optional arguments
  • Make sure it works outside of the CommandAPI project (without Brigadier dependency)
  • Make sure it works when shading
  • Make it easier to recognize what caused an exception
    • Something here could add more information about the reason why the exception was thrown?
  • Documentation
  • Basic tests for the feature
    • InitialParseExceptionHandler
    • ArgumentParseExceptionHandler
      • Changing exceptions
      • Returning replacement value
  • Address any code review
  • Remove test command from CommandAPIMain

Things that could be done before this PR is merged:

  • Make it work on Velocity
  • Make tests for intercepting every possible error for every argument?
  • Document all the possible errors for every argument?

willkroboth and others added 30 commits November 19, 2022 10:11
Add option to add custom error handling when Argument parse fails
… static map in InitialParseExceptionArgument
# Conflicts:
#	commandapi-nms/commandapi-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java
#	commandapi-nms/commandapi-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java
#	commandapi-nms/commandapi-1.19-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_Common.java
# Conflicts:
#	commandapi-core/src/main/java/dev/jorel/commandapi/arguments/SoundArgument.java
#	commandapi-nms/commandapi-1.16.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R2.java
#	commandapi-nms/commandapi-1.16.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_4_R3.java
#	commandapi-nms/commandapi-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java
#	commandapi-nms/commandapi-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java
#	commandapi-nms/commandapi-1.18/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R1.java
#	commandapi-nms/commandapi-1.19-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_Common.java
willkroboth and others added 11 commits February 20, 2023 10:14
# Conflicts:
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.15/src/main/java/dev/jorel/commandapi/nms/NMS_1_15.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java
# Conflicts:
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/nms/NMS.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.15/src/main/java/dev/jorel/commandapi/nms/NMS_1_15.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.1/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R1.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R2.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_4_R3.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R1.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_Common.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.3/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_3_R2.java
Repository owner deleted a comment from sonarcloud bot Feb 23, 2023
willkroboth and others added 12 commits March 9, 2023 16:07
# Conflicts:
#	commandapi-core/src/main/java/dev/jorel/commandapi/arguments/AbstractArgument.java
# Conflicts:
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-nms-common/src/main/java/dev/jorel/commandapi/nms/NMS_Common.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.2/src/main/java/dev/jorel/commandapi/test/MockNMS.java
# Conflicts:
#	commandapi-core/src/main/java/dev/jorel/commandapi/CommandAPIHandler.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.15/src/main/java/dev/jorel/commandapi/nms/NMS_1_15.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.1/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R1.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R2.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_4_R3.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R1.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.16.5/src/main/java/dev/jorel/commandapi/test/MockNMS.java
#	commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.2/src/main/java/dev/jorel/commandapi/test/MockNMS.java
willkroboth added a commit that referenced this pull request Jul 30, 2023
Add API to use custom error handling when Argument parsing fails

See #370 for the basis of these changes

New changes here:

- Arguments can only have an ArgumentParseExceptionHandler attached if they implement ArgumentParseExceptionArgument
- The substitute value from ArgumentParseExceptionHandler doesn't have to be returned directly
- ExceptionInformation can be provided by arguments
- New NMS method to extract translation keys from CommandSyntaxExceptions
@willkroboth willkroboth mentioned this pull request Aug 2, 2023
23 tasks
@willkroboth
Copy link
Collaborator Author

Closed in favor of #476

@willkroboth willkroboth closed this Aug 2, 2023
willkroboth added a commit that referenced this pull request Aug 12, 2023
Add API to use custom error handling when Argument parsing fails

See #370 for the basis of these changes

New changes here:

- Arguments can only have an ArgumentParseExceptionHandler attached if they implement ArgumentParseExceptionArgument
- The substitute value from ArgumentParseExceptionHandler doesn't have to be returned directly
- ExceptionInformation can be provided by arguments
- New NMS method to extract translation keys from CommandSyntaxExceptions
willkroboth added a commit that referenced this pull request Aug 17, 2023
Add API to use custom error handling when Argument parsing fails

See #370 for the basis of these changes

New changes here:

- Arguments can only have an ArgumentParseExceptionHandler attached if they implement ArgumentParseExceptionArgument
- The substitute value from ArgumentParseExceptionHandler doesn't have to be returned directly
- ExceptionInformation can be provided by arguments
- New NMS method to extract translation keys from CommandSyntaxExceptions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

Successfully merging this pull request may close these issues.

2 participants