Skip to content

Commit bd513f6

Browse files
committed
Add missing files
1 parent 518b864 commit bd513f6

19 files changed

+979
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.github.imdmk.automessage.configuration;
2+
3+
import eu.okaeri.configs.OkaeriConfig;
4+
import eu.okaeri.configs.serdes.OkaeriSerdesPack;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
public abstract class ConfigSection extends OkaeriConfig {
8+
9+
public abstract @NotNull OkaeriSerdesPack getSerdesPack();
10+
11+
public abstract @NotNull String getFileName();
12+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.github.imdmk.automessage.configuration;
2+
3+
public final class ConfigurationLoadException extends RuntimeException {
4+
public ConfigurationLoadException(Throwable cause) {
5+
super("Failed to load configuration", cause);
6+
}
7+
8+
public ConfigurationLoadException(String message) {
9+
super(message);
10+
}
11+
12+
public ConfigurationLoadException(String message, Throwable cause) {
13+
super(message, cause);
14+
}
15+
16+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.github.imdmk.automessage.configuration.implementation;
2+
3+
import com.github.imdmk.automessage.configuration.ConfigSection;
4+
import eu.okaeri.configs.annotation.Comment;
5+
import eu.okaeri.configs.serdes.OkaeriSerdesPack;
6+
import eu.okaeri.configs.serdes.commons.SerdesCommons;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import java.time.Duration;
10+
11+
public class PluginConfiguration extends ConfigSection {
12+
13+
@Comment("# Check for plugin update and send notification after administrator join to server?")
14+
public boolean checkUpdate = true;
15+
16+
@Comment("# How often should the plugin check for updates? Recommended value: 1 day")
17+
public Duration updateInterval = Duration.ofDays(1);
18+
19+
@Override
20+
public @NotNull OkaeriSerdesPack getSerdesPack() {
21+
return registry -> {
22+
registry.register(new SerdesCommons());
23+
};
24+
}
25+
26+
@Override
27+
public @NotNull String getFileName() {
28+
return "pluginConfiguration.yml";
29+
}
30+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.github.imdmk.automessage.feature.command.builder.configuration;
2+
3+
import eu.okaeri.configs.OkaeriConfig;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
import java.util.ArrayList;
7+
import java.util.Collections;
8+
import java.util.HashMap;
9+
import java.util.List;
10+
import java.util.Map;
11+
12+
public class Command extends OkaeriConfig {
13+
14+
public String name;
15+
16+
public boolean enabled = true;
17+
18+
public List<String> aliases = new ArrayList<>();
19+
public List<String> permissions = new ArrayList<>();
20+
21+
public Map<String, SubCommand> subCommands = new HashMap<>();
22+
23+
public Command() {}
24+
25+
public Command(@NotNull String name) {
26+
this.name = name;
27+
}
28+
29+
public Command(@NotNull String name, @NotNull List<String> aliases) {
30+
this.name = name;
31+
this.aliases = aliases;
32+
}
33+
34+
public Command(@NotNull String name, @NotNull List<String> aliases, @NotNull List<String> permissions) {
35+
this.name = name;
36+
this.aliases = aliases;
37+
this.permissions = permissions;
38+
}
39+
40+
public Command(@NotNull String name, boolean enabled, @NotNull List<String> aliases, @NotNull List<String> permissions) {
41+
this.name = name;
42+
this.enabled = enabled;
43+
this.aliases = aliases;
44+
this.permissions = permissions;
45+
}
46+
47+
public Command(
48+
@NotNull String name,
49+
boolean enabled,
50+
@NotNull List<String> aliases,
51+
@NotNull List<String> permissions,
52+
@NotNull Map<String, SubCommand> subCommands
53+
) {
54+
this.name = name;
55+
this.enabled = enabled;
56+
this.aliases = aliases;
57+
this.permissions = permissions;
58+
this.subCommands = subCommands;
59+
}
60+
61+
public @NotNull String name() {
62+
return this.name;
63+
}
64+
65+
public boolean isEnabled() {
66+
return this.enabled;
67+
}
68+
69+
public @NotNull List<String> aliases() {
70+
return Collections.unmodifiableList(this.aliases);
71+
}
72+
73+
public @NotNull List<String> permissions() {
74+
return Collections.unmodifiableList(this.permissions);
75+
}
76+
77+
public @NotNull Map<String, SubCommand> subCommands() {
78+
return Collections.unmodifiableMap(this.subCommands);
79+
}
80+
}
81+
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.github.imdmk.automessage.feature.command.builder.configuration;
2+
3+
import com.github.imdmk.automessage.configuration.ConfigSection;
4+
import eu.okaeri.configs.annotation.Comment;
5+
import eu.okaeri.configs.annotation.Header;
6+
import eu.okaeri.configs.serdes.OkaeriSerdesPack;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import java.util.List;
10+
import java.util.Map;
11+
import java.util.Optional;
12+
13+
@Header({
14+
"#",
15+
"# This file allows you to configure commands.",
16+
"#"
17+
})
18+
public class CommandConfiguration extends ConfigSection {
19+
20+
@Comment({
21+
"# This allows you to globally edit commands.",
22+
"# For example, if you want to change the command name from /my-furnaces to /furnaces,",
23+
"# you can configure it like this:",
24+
"#",
25+
"# commands:",
26+
"# <command_name>:",
27+
"# name: \"<new_command_name>\"",
28+
"# enabled: true/false",
29+
"# aliases:",
30+
"# - \"<new_command_aliases>\"",
31+
"# permissions:",
32+
"# - \"<new_command_permission>\"",
33+
"# subCommands:",
34+
"# <default_sub_command_name>:",
35+
"# name: <new_sub_command_name>",
36+
"# enabled: true/false",
37+
"# aliases:",
38+
"# - \"<new_sub_command_aliases>\"",
39+
"# permissions:",
40+
"# - \"<new_sub_command_permission>\"",
41+
})
42+
public Map<String, Command> commands = Map.of(
43+
"automessage", new Command(
44+
"automessage",
45+
true,
46+
List.of("am"),
47+
List.of(),
48+
Map.of()
49+
)
50+
);
51+
52+
public Optional<Command> getCommand(String name) {
53+
return Optional.ofNullable(this.commands.get(name));
54+
}
55+
56+
@Override
57+
public @NotNull OkaeriSerdesPack getSerdesPack() {
58+
return registry -> {};
59+
}
60+
61+
@Override
62+
public @NotNull String getFileName() {
63+
return "commandConfiguration.yml";
64+
}
65+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.github.imdmk.automessage.feature.command.builder.configuration;
2+
3+
import dev.rollczi.litecommands.command.builder.CommandBuilder;
4+
import dev.rollczi.litecommands.editor.Editor;
5+
import dev.rollczi.litecommands.meta.Meta;
6+
import org.bukkit.command.CommandSender;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import java.util.Map;
10+
import java.util.logging.Logger;
11+
12+
public class CommandConfigurator implements Editor<CommandSender> {
13+
14+
private final Logger logger;
15+
private final CommandConfiguration commandConfiguration;
16+
17+
public CommandConfigurator(@NotNull Logger logger, @NotNull CommandConfiguration commandConfiguration) {
18+
this.logger = logger;
19+
this.commandConfiguration = commandConfiguration;
20+
}
21+
22+
@Override
23+
public CommandBuilder<CommandSender> edit(CommandBuilder<CommandSender> context) {
24+
return this.commandConfiguration.getCommand(context.name())
25+
.map(command -> {
26+
CommandBuilder<CommandSender> updated = this.updateCommand(context, command);
27+
return this.updateSubCommand(updated, command.subCommands());
28+
})
29+
.map(command -> {
30+
this.logger.info("Edited command " + command.name() + " via configuration.");
31+
return command;
32+
})
33+
.orElse(context);
34+
}
35+
36+
private @NotNull CommandBuilder<CommandSender> updateCommand(@NotNull CommandBuilder<CommandSender> context, @NotNull Command command) {
37+
return context
38+
.name(command.name())
39+
.aliases(command.aliases())
40+
.applyMeta(meta -> meta.list(Meta.PERMISSIONS, permissions -> permissions.addAll(command.permissions())))
41+
.enabled(command.isEnabled());
42+
}
43+
44+
private @NotNull CommandBuilder<CommandSender> updateSubCommand(@NotNull CommandBuilder<CommandSender> context, @NotNull Map<String, SubCommand> subCommands) {
45+
for (Map.Entry<String, SubCommand> entry : subCommands.entrySet()) {
46+
String id = entry.getKey();
47+
SubCommand sub = entry.getValue();
48+
49+
context = context.editChild(id, child -> child
50+
.name(sub.name())
51+
.aliases(sub.aliases())
52+
.applyMeta(meta -> meta.list(Meta.PERMISSIONS, permissions -> permissions.addAll(sub.permissions())))
53+
.enabled(sub.isEnabled()));
54+
}
55+
56+
return context;
57+
}
58+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.github.imdmk.automessage.feature.command.builder.configuration;
2+
3+
import eu.okaeri.configs.OkaeriConfig;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
import java.util.ArrayList;
7+
import java.util.Collections;
8+
import java.util.List;
9+
10+
public class SubCommand extends OkaeriConfig {
11+
12+
public String name;
13+
public boolean enabled;
14+
15+
public List<String> aliases = new ArrayList<>();
16+
public List<String> permissions = new ArrayList<>();
17+
18+
public SubCommand() {}
19+
20+
public SubCommand(@NotNull String name, boolean enabled, @NotNull List<String> aliases, @NotNull List<String> permissions) {
21+
this.name = name;
22+
this.enabled = enabled;
23+
this.aliases = aliases;
24+
this.permissions = permissions;
25+
}
26+
27+
public @NotNull String name() {
28+
return this.name;
29+
}
30+
31+
public boolean isEnabled() {
32+
return this.enabled;
33+
}
34+
35+
public @NotNull List<String> aliases() {
36+
return Collections.unmodifiableList(this.aliases);
37+
}
38+
39+
public @NotNull List<String> permissions() {
40+
return Collections.unmodifiableList(this.permissions);
41+
}
42+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.github.imdmk.automessage.feature.command.builder.player;
2+
3+
import com.github.imdmk.automessage.feature.message.MessageConfiguration;
4+
import dev.rollczi.litecommands.argument.Argument;
5+
import dev.rollczi.litecommands.argument.parser.ParseResult;
6+
import dev.rollczi.litecommands.argument.resolver.ArgumentResolver;
7+
import dev.rollczi.litecommands.invocation.Invocation;
8+
import dev.rollczi.litecommands.suggestion.SuggestionContext;
9+
import dev.rollczi.litecommands.suggestion.SuggestionResult;
10+
import org.bukkit.Server;
11+
import org.bukkit.command.CommandSender;
12+
import org.bukkit.entity.Player;
13+
import org.jetbrains.annotations.NotNull;
14+
15+
import java.util.Objects;
16+
import java.util.Optional;
17+
18+
public class PlayerArgument extends ArgumentResolver<CommandSender, Player> {
19+
20+
private final Server server;
21+
private final MessageConfiguration messageConfiguration;
22+
23+
public PlayerArgument(@NotNull Server server, @NotNull MessageConfiguration messageConfiguration) {
24+
this.server = Objects.requireNonNull(server, "server cannot be null");
25+
this.messageConfiguration = Objects.requireNonNull(messageConfiguration, "messageConfiguration cannot be null");
26+
}
27+
28+
@Override
29+
protected ParseResult<Player> parse(Invocation<CommandSender> invocation, Argument<Player> context, String argument) {
30+
return Optional.ofNullable(this.server.getPlayer(argument))
31+
.map(ParseResult::success)
32+
.orElseGet(() -> ParseResult.failure(this.messageConfiguration.playerNotFound));
33+
}
34+
35+
@Override
36+
public SuggestionResult suggest(Invocation<CommandSender> invocation, Argument<Player> argument, SuggestionContext context) {
37+
return this.server.getOnlinePlayers().stream()
38+
.map(Player::getName)
39+
.collect(SuggestionResult.collector());
40+
}
41+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.github.imdmk.automessage.feature.command.builder.player;
2+
3+
4+
import dev.rollczi.litecommands.context.ContextProvider;
5+
import dev.rollczi.litecommands.context.ContextResult;
6+
import dev.rollczi.litecommands.invocation.Invocation;
7+
import org.bukkit.command.CommandSender;
8+
import org.bukkit.entity.Player;
9+
10+
public class PlayerContextual implements ContextProvider<CommandSender, Player> {
11+
12+
@Override
13+
public ContextResult<Player> provide(Invocation<CommandSender> invocation) {
14+
if (invocation.sender() instanceof Player player) {
15+
return ContextResult.ok(() -> player);
16+
}
17+
18+
return ContextResult.error("Only player can use this command.");
19+
}
20+
}

0 commit comments

Comments
 (0)