Skip to content

Commit ac9147c

Browse files
committed
Добавлена команда для админов - выдача зелий возврата напрямую, без крафта. Улучшен конфиг.
1 parent 8e3737e commit ac9147c

4 files changed

Lines changed: 69 additions & 5 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.trassert</groupId>
77
<artifactId>RecallPotion</artifactId>
8-
<version>1.7.0</version>
8+
<version>1.8.0</version>
99
<packaging>jar</packaging>
1010

1111
<name>Return Potion</name>

src/main/java/com/trassert/recallpotion/RecallPotionPlugin.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.trassert.recallpotion;
22

3-
import com.trassert.recallpotion.commands.RecallPotionCommand;
43
import com.trassert.recallpotion.listeners.*;
54
import com.trassert.recallpotion.managers.*;
65
import org.bukkit.plugin.java.JavaPlugin;
@@ -26,7 +25,10 @@ public void onEnable() {
2625
pm.registerEvents(new CraftingListener(this), this);
2726
pm.registerEvents(new PlayerConsumeListener(this), this);
2827

29-
getCommand("recallpotion").setExecutor(new RecallPotionCommand(this));
28+
var recallCmd = getCommand("recallpotion");
29+
var recallExecutor = new com.trassert.recallpotion.commands.RecallPotionCommand(this);
30+
recallCmd.setExecutor(recallExecutor);
31+
recallCmd.setTabCompleter((org.bukkit.command.TabCompleter) recallExecutor);
3032

3133
getLogger().info("RecallPotion plugin has been enabled!");
3234
}

src/main/java/com/trassert/recallpotion/commands/RecallPotionCommand.java

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package com.trassert.recallpotion.commands;
22

33
import com.trassert.recallpotion.RecallPotionPlugin;
4+
import org.bukkit.Bukkit;
45
import org.bukkit.command.Command;
56
import org.bukkit.command.CommandExecutor;
67
import org.bukkit.command.CommandSender;
8+
import org.bukkit.entity.Player;
9+
import org.bukkit.inventory.ItemStack;
10+
import org.bukkit.command.TabCompleter;
11+
import java.util.ArrayList;
12+
import java.util.Collections;
13+
import java.util.List;
14+
import java.util.stream.Collectors;
715

8-
public class RecallPotionCommand implements CommandExecutor {
16+
public class RecallPotionCommand implements CommandExecutor, TabCompleter {
917

1018
private final RecallPotionPlugin plugin;
1119

@@ -24,10 +32,37 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
2432

2533
if (args.length == 0) {
2634
sender.sendMessage("§6RecallPotion Plugin v" + version);
27-
sender.sendMessage("§7Использование: /" + label + " reload");
35+
String usage = plugin.getConfigManager().getMessage("usage").replace("{label}", label);
36+
sender.sendMessage(usage);
2837
return true;
2938
}
3039

40+
if (args[0].equalsIgnoreCase("give")) {
41+
if (args.length == 1) {
42+
if (!(sender instanceof Player)) {
43+
sender.sendMessage(plugin.getConfigManager().getMessage("player-only"));
44+
return true;
45+
}
46+
Player player = (Player) sender;
47+
ItemStack potion = plugin.getRecipeManager().createRecallPotion();
48+
player.getInventory().addItem(potion);
49+
player.sendMessage(plugin.getConfigManager().getMessage("potion-obtained"));
50+
player.sendMessage(plugin.getConfigManager().getMessage("give-self"));
51+
return true;
52+
} else {
53+
Player target = Bukkit.getPlayerExact(args[1]);
54+
if (target == null) {
55+
sender.sendMessage(plugin.getConfigManager().getMessage("player-not-found").replace("{player}", args[1]));
56+
return true;
57+
}
58+
ItemStack potion = plugin.getRecipeManager().createRecallPotion();
59+
target.getInventory().addItem(potion);
60+
target.sendMessage(plugin.getConfigManager().getMessage("potion-obtained"));
61+
sender.sendMessage(plugin.getConfigManager().getMessage("give-other").replace("{player}", target.getName()));
62+
return true;
63+
}
64+
}
65+
3166
if (args[0].equalsIgnoreCase("reload")) {
3267
plugin.getConfigManager().reloadConfig();
3368
sender.sendMessage(plugin.getConfigManager().getMessage("config-reloaded"));
@@ -37,4 +72,25 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
3772
sender.sendMessage("§cНеизвестная команда. Используйте: /" + label + " reload");
3873
return true;
3974
}
75+
76+
@Override
77+
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
78+
if (args.length == 1) {
79+
List<String> subs = new ArrayList<>();
80+
subs.add("give");
81+
subs.add("reload");
82+
String pref = args[0].toLowerCase();
83+
return subs.stream().filter(s -> s.startsWith(pref)).collect(Collectors.toList());
84+
}
85+
86+
if (args.length == 2 && args[0].equalsIgnoreCase("give")) {
87+
String pref = args[1].toLowerCase();
88+
return Bukkit.getOnlinePlayers().stream()
89+
.map(Player::getName)
90+
.filter(n -> n.toLowerCase().startsWith(pref))
91+
.collect(Collectors.toList());
92+
}
93+
94+
return Collections.emptyList();
95+
}
4096
}

src/main/resources/config.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
messages:
22
potion-obtained: "&a✨ You've obtained a return potion! Use it to get back home."
3+
usage: "&7Использование: /{label} give [ник] | reload"
4+
player-only: "&cЭту команду может выполнять только игрок."
5+
player-not-found: "&cИгрок не найден: {player}"
6+
give-self: "&aВы получили зелье возврата."
7+
give-other: "&aЗелье выдано игроку &f{player}"
8+
unknown-command: "&cНеизвестная команда. Используйте: /{label} reload"
39
potion-used: "&6🏠 Teleporting to your spawn point... ✨"
410
no-home-set: "&cYou don't have a spawn point set! Sleep in a bed or use /spawnpoint."
511
not-enough-xp: "&cNot enough XP! Requires 8 levels of experience."

0 commit comments

Comments
 (0)