Skip to content

Commit e3d4621

Browse files
committed
add plugin permissions for enchantments and a reload command
1 parent 912425c commit e3d4621

File tree

6 files changed

+76
-2
lines changed

6 files changed

+76
-2
lines changed

src/main/java/pro/cloudnode/smp/enchantbookplus/ConfigEnchantmentEntry.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public final class ConfigEnchantmentEntry {
4848
/**
4949
* Maximum level of the enchantment.
5050
*/
51-
public @NotNull Optional<Integer> getMaxLevel() {
51+
public @NotNull Optional<@NotNull Integer> getMaxLevel() {
5252
if (Optional.ofNullable(maxLevel).isEmpty()) return Optional.empty();
5353
if (maxLevelRelative) return Optional.of(getEnchantment().getMaxLevel() + maxLevel);
5454
return Optional.of(maxLevel);
@@ -104,7 +104,7 @@ public ConfigEnchantmentEntry(final @NotNull String name, final @Nullable Intege
104104
*
105105
* @param configValue Config object
106106
*/
107-
public static ConfigEnchantmentEntry configValue(final @NotNull HashMap<@NotNull String, @NotNull Object> configValue) {
107+
public static @NotNull ConfigEnchantmentEntry configValue(final @NotNull HashMap<@NotNull String, @NotNull Object> configValue) {
108108
final @NotNull String name = (String) Objects.requireNonNull(configValue.get("name"));
109109
final @Nullable Integer maxLevel;
110110
final boolean maxLevelRelative;

src/main/java/pro/cloudnode/smp/enchantbookplus/EnchantBookPlus.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.util.ArrayList;
99
import java.util.List;
10+
import java.util.Objects;
1011
import java.util.Optional;
1112
import java.util.logging.Level;
1213

@@ -63,6 +64,8 @@ public void reload() {
6364

6465
@Override
6566
public void onEnable() {
67+
Objects.requireNonNull(getCommand("enchantbookplus")).setExecutor(new MainCommand());
68+
6669
registerEvents();
6770
saveDefaultConfig();
6871
reload();
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package pro.cloudnode.smp.enchantbookplus;
2+
3+
import net.kyori.adventure.text.minimessage.MiniMessage;
4+
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
5+
import org.bukkit.command.Command;
6+
import org.bukkit.command.CommandExecutor;
7+
import org.bukkit.command.CommandSender;
8+
import org.bukkit.command.TabCompleter;
9+
import org.jetbrains.annotations.NotNull;
10+
import org.jetbrains.annotations.Nullable;
11+
12+
import java.util.List;
13+
import java.util.Optional;
14+
15+
public final class MainCommand implements CommandExecutor, TabCompleter {
16+
@Override
17+
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String @NotNull [] args) {
18+
if (args.length == 1 && args[0].equalsIgnoreCase("reload")) reload(sender, command);
19+
return overview(sender);
20+
}
21+
22+
@Override
23+
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String @NotNull [] args) {
24+
return null;
25+
}
26+
27+
/**
28+
* Plugin overview
29+
*/
30+
public static boolean overview(final @NotNull CommandSender sender) {
31+
final @NotNull EnchantBookPlus plugin = EnchantBookPlus.getInstance();
32+
sender.sendMessage(MiniMessage.miniMessage()
33+
.deserialize("<green><name></green> <white>v<version> by</white> <gray><author></gray>", Placeholder.unparsed("name", plugin
34+
.getPluginMeta().getName()), Placeholder.unparsed("version", plugin.getPluginMeta()
35+
.getVersion()), Placeholder.unparsed("author", String.join(", ", plugin.getPluginMeta()
36+
.getAuthors()))));
37+
38+
return true;
39+
}
40+
41+
/**
42+
* Reload plugin configuration
43+
*/
44+
public static boolean reload(final @NotNull CommandSender sender, final @NotNull Command command) {
45+
if (!sender.hasPermission(Permissions.RELOAD)) {
46+
sender.sendMessage(Optional.ofNullable(command.permissionMessage()).orElse(sender.getServer().permissionMessage()));
47+
return true;
48+
}
49+
EnchantBookPlus.getInstance().reload();
50+
sender.sendMessage(MiniMessage.miniMessage().deserialize("<green>(!) Plugin configuration reloaded."));
51+
return true;
52+
}
53+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package pro.cloudnode.smp.enchantbookplus;
2+
3+
import org.bukkit.enchantments.Enchantment;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
public final class Permissions {
7+
public static @NotNull String enchant(final @NotNull Enchantment enchantment) {
8+
return "enchantbookplus.enchant." + enchantment.getKey().getKey();
9+
}
10+
11+
public static @NotNull String RELOAD = "enchantbookplus.reload";
12+
}

src/main/java/pro/cloudnode/smp/enchantbookplus/event/PrepareAnvil.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.jetbrains.annotations.NotNull;
1212
import pro.cloudnode.smp.enchantbookplus.ConfigEnchantmentEntry;
1313
import pro.cloudnode.smp.enchantbookplus.EnchantBookPlus;
14+
import pro.cloudnode.smp.enchantbookplus.Permissions;
1415

1516
import java.util.HashMap;
1617
import java.util.Map;
@@ -36,6 +37,7 @@ public void onPrepareAnvil(final @NotNull PrepareAnvilEvent event) {
3637
int cost = 0;
3738
for (final @NotNull Map.Entry<@NotNull Enchantment, @NotNull Integer> entry : upgradeEnchants.entrySet()) {
3839
final @NotNull Enchantment enchantment = entry.getKey();
40+
if (!event.getView().getPlayer().hasPermission(Permissions.enchant(enchantment))) continue;
3941
if (enchantment.getMaxLevel() == 1) continue;
4042
final @NotNull Optional<@NotNull ConfigEnchantmentEntry> configEnchantment = EnchantBookPlus.getInstance().getConfigEnchantment(enchantment);
4143
if (configEnchantment.isEmpty()) continue;

src/main/resources/plugin.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@ version: '${project.version}'
33
main: pro.cloudnode.smp.enchantbookplus.EnchantBookPlus
44
description: "Combine enchantment books to achieve levels above vanilla"
55
api-version: '1.20'
6+
commands:
7+
enchantbookplus:
8+
description: "EnchantBookPlus main command"
9+
usage: "/<command>"

0 commit comments

Comments
 (0)