Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
ziqian zhang
Grasscutter
Commits
61c0ff36
Commit
61c0ff36
authored
Apr 18, 2022
by
KingRainbow44
Browse files
Execution power
parent
25c414be
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/commands/Command.java
View file @
61c0ff36
...
...
@@ -6,10 +6,18 @@ import java.lang.annotation.RetentionPolicy;
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
Command
{
String
label
()
default
""
;
String
usage
()
default
""
;
String
[]
aliases
()
default
{
""
};
Execution
execution
()
default
Execution
.
ALL
;
int
gmLevel
()
default
1
;
String
usage
()
default
""
;
enum
Execution
{
ALL
,
CONSOLE
,
PLAYER
}
}
src/main/java/emu/grasscutter/commands/CommandHandler.java
View file @
61c0ff36
...
...
@@ -7,9 +7,9 @@ import java.util.List;
public
interface
CommandHandler
{
/* Invoked on player execution. */
void
execute
(
GenshinPlayer
player
,
List
<
String
>
args
)
;
default
void
execute
(
GenshinPlayer
player
,
List
<
String
>
args
)
{
}
/* Invoked on server execution. */
void
execute
(
List
<
String
>
args
)
;
default
void
execute
(
List
<
String
>
args
)
{
}
/*
* Utilities.
...
...
src/main/java/emu/grasscutter/commands/CommandMap.java
View file @
61c0ff36
...
...
@@ -13,6 +13,7 @@ public final class CommandMap {
}
private
final
Map
<
String
,
CommandHandler
>
commands
=
new
HashMap
<>();
private
final
Map
<
String
,
Command
.
Execution
>
executionPower
=
new
HashMap
<>();
/**
* Register a command handler.
...
...
@@ -23,13 +24,18 @@ public final class CommandMap {
public
CommandMap
registerCommand
(
String
label
,
CommandHandler
command
)
{
Grasscutter
.
getLogger
().
debug
(
"Registered command: "
+
label
);
// Get command data.
Command
annotation
=
command
.
getClass
().
getAnnotation
(
Command
.
class
);
this
.
executionPower
.
put
(
label
,
annotation
.
execution
());
this
.
commands
.
put
(
label
,
command
);
// Register aliases.
if
(
annotation
.
aliases
().
length
>
0
)
{
for
(
String
alias
:
annotation
.
aliases
())
for
(
String
alias
:
annotation
.
aliases
())
{
this
.
commands
.
put
(
alias
,
command
);
}
this
.
commands
.
put
(
label
,
command
);
return
this
;
this
.
executionPower
.
put
(
alias
,
annotation
.
execution
()
);
}
}
return
this
;
}
/**
...
...
@@ -43,10 +49,16 @@ public final class CommandMap {
if
(
handler
==
null
)
return
this
;
Command
annotation
=
handler
.
getClass
().
getAnnotation
(
Command
.
class
);
this
.
executionPower
.
remove
(
label
);
this
.
commands
.
remove
(
label
);
// Unregister aliases.
if
(
annotation
.
aliases
().
length
>
0
)
{
for
(
String
alias
:
annotation
.
aliases
())
for
(
String
alias
:
annotation
.
aliases
())
{
this
.
commands
.
remove
(
alias
);
}
this
.
commands
.
remove
(
label
);
this
.
executionPower
.
remove
(
alias
);
}
}
return
this
;
}
...
...
@@ -77,9 +89,16 @@ public final class CommandMap {
CommandHandler
.
sendMessage
(
player
,
"Unknown command: "
+
label
);
return
;
}
// Execution power check.
Command
.
Execution
executionPower
=
this
.
executionPower
.
get
(
label
);
if
(
player
==
null
&&
executionPower
==
Command
.
Execution
.
PLAYER
)
{
CommandHandler
.
sendMessage
(
null
,
"Run this command in-game."
);
return
;
}
else
if
(
player
!=
null
&&
executionPower
==
Command
.
Execution
.
CONSOLE
)
{
CommandHandler
.
sendMessage
(
player
,
"This command can only be run from the console."
);
return
;
}
// Invoke execute method for handler.
if
(
player
==
null
)
handler
.
execute
(
args
);
if
(
player
==
null
)
handler
.
execute
(
args
);
else
handler
.
execute
(
player
,
args
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment