Skip to content
This repository was archived by the owner on Mar 8, 2022. It is now read-only.

Commit d190e79

Browse files
committed
addrepair command
1 parent 955d527 commit d190e79

File tree

7 files changed

+168
-2
lines changed

7 files changed

+168
-2
lines changed

src/main/java/cat/nyaa/nyaautils/CommandHandler.java

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

33
import cat.nyaa.nyaautils.exhibition.ExhibitionCommands;
44
import cat.nyaa.nyaautils.mailbox.MailboxCommands;
5+
import cat.nyaa.nyaautils.repair.RepairCommands;
56
import cat.nyaa.utils.*;
67
import cat.nyaa.utils.internationalizer.I16rEnchantment;
78
import org.bukkit.*;
@@ -33,6 +34,8 @@ public String getHelpPrefix() {
3334
public ExhibitionCommands exhibitionCommands;
3435
@SubCommand("mailbox")
3536
public MailboxCommands mailboxCommands;
37+
@SubCommand("repair")
38+
public RepairCommands repairCommands;
3639

3740
@SubCommand(value = "addenchsrc", permission = "nu.addenchsrc")
3841
public void commandAddEnchSrc(CommandSender sender, Arguments args) {

src/main/java/cat/nyaa/nyaautils/Configuration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cat.nyaa.nyaautils;
22

33
import cat.nyaa.nyaautils.mailbox.MailboxLocations;
4+
import cat.nyaa.nyaautils.repair.RepairConfig;
45
import cat.nyaa.utils.BasicItemMatcher;
56
import cat.nyaa.utils.ISerializable;
67
import org.bukkit.Material;
@@ -90,12 +91,14 @@ public class Configuration implements ISerializable {
9091
public HashMap<Enchantment, Integer> enchantMaxLevel = new HashMap<>();
9192

9293
public final MailboxLocations mailbox;
94+
public final RepairConfig repair;
9395

9496
private final NyaaUtils plugin;
9597

9698
public Configuration(NyaaUtils plugin) {
9799
this.plugin = plugin;
98100
this.mailbox = new MailboxLocations(plugin);
101+
this.repair = new RepairConfig(plugin);
99102
for (Enchantment e : Enchantment.values()) {
100103
if (e == null) {
101104
plugin.getLogger().warning("Bad enchantment: null");
@@ -145,6 +148,7 @@ public void deserialize(ConfigurationSection config) {
145148
}
146149

147150
if (plugin.isServerEnabled()) mailbox.load();
151+
repair.load();
148152
}
149153

150154
@Override
@@ -165,6 +169,7 @@ public void serialize(ConfigurationSection config) {
165169
}
166170

167171
if (plugin.isServerEnabled()) mailbox.save();
172+
repair.save();
168173
}
169174

170175
public enum LootProtectMode {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package cat.nyaa.nyaautils.repair;
2+
3+
import cat.nyaa.nyaautils.NyaaUtils;
4+
import cat.nyaa.utils.CommandReceiver;
5+
import cat.nyaa.utils.Internationalization;
6+
import org.bukkit.Material;
7+
import org.bukkit.command.CommandSender;
8+
9+
public class RepairCommands extends CommandReceiver<NyaaUtils> {
10+
private final NyaaUtils plugin;
11+
12+
public RepairCommands(Object plugin, Internationalization i18n) {
13+
super((NyaaUtils) plugin, i18n);
14+
this.plugin = (NyaaUtils) plugin;
15+
}
16+
17+
@Override
18+
public String getHelpPrefix() {
19+
return "repair";
20+
}
21+
22+
@SubCommand(value = "add", permission = "nu.addrepair")
23+
public void addRepairItem(CommandSender sender, Arguments args) {
24+
Material tool = args.nextEnum(Material.class);
25+
Material material = args.nextEnum(Material.class);
26+
int fullAmount = args.nextInt();
27+
int xpConsumption = args.nextInt();
28+
double enchantCost = args.nextDouble();
29+
int repairLimit = args.nextInt();
30+
RepairConfig.RepairConfigItem item = new RepairConfig.RepairConfigItem();
31+
item.material = material;
32+
item.fullRepairCost = fullAmount;
33+
item.expCost = xpConsumption;
34+
item.enchantCostPerLv = enchantCost;
35+
item.repairLimit = repairLimit;
36+
plugin.cfg.repair.addItem(tool, item);
37+
msg(sender, "user.repair.item_added");
38+
}
39+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package cat.nyaa.nyaautils.repair;
2+
3+
import cat.nyaa.nyaautils.NyaaUtils;
4+
import cat.nyaa.utils.FileConfigure;
5+
import cat.nyaa.utils.ISerializable;
6+
import org.bukkit.Material;
7+
import org.bukkit.configuration.ConfigurationSection;
8+
import org.bukkit.plugin.java.JavaPlugin;
9+
10+
import java.util.HashMap;
11+
import java.util.HashSet;
12+
import java.util.Map;
13+
import java.util.Set;
14+
15+
public class RepairConfig extends FileConfigure {
16+
public static class RepairConfigItem implements ISerializable {
17+
@Serializable
18+
Material material = Material.STONE;
19+
@Serializable
20+
int fullRepairCost = 1;
21+
@Serializable
22+
int expCost = 0;
23+
@Serializable
24+
double enchantCostPerLv = 0;
25+
@Serializable
26+
int repairLimit = 0;
27+
28+
public RepairConfigItem normalize() {
29+
if (material == null) material = Material.STONE;
30+
if (fullRepairCost <= 0) fullRepairCost = 1;
31+
if (expCost < 0) expCost = 0;
32+
if (enchantCostPerLv < 0) enchantCostPerLv = 0;
33+
if (repairLimit <= 0) repairLimit = 0;
34+
return this;
35+
}
36+
}
37+
38+
private final NyaaUtils plugin;
39+
40+
private final Map<Material, RepairConfigItem> repairMap = new HashMap<>();
41+
42+
public RepairConfig(NyaaUtils plugin) {
43+
this.plugin = plugin;
44+
}
45+
46+
@Override
47+
protected String getFileName() {
48+
return "repair.yml";
49+
}
50+
51+
@Override
52+
protected JavaPlugin getPlugin() {
53+
return plugin;
54+
}
55+
56+
@Override
57+
public void deserialize(ConfigurationSection config) {
58+
repairMap.clear();
59+
for (String key : config.getKeys(false)) {
60+
Material m;
61+
try {
62+
m = Material.valueOf(key);
63+
} catch (IllegalArgumentException ex) {
64+
continue;
65+
}
66+
if (!config.isConfigurationSection(key)) continue;
67+
RepairConfigItem item = new RepairConfigItem();
68+
item.deserialize(config.getConfigurationSection(key));
69+
repairMap.put(m, item.normalize());
70+
}
71+
}
72+
73+
@Override
74+
public void serialize(ConfigurationSection config) {
75+
Set<String> tmp = new HashSet<>(config.getKeys(false));
76+
for (String key : tmp) { // clear section
77+
config.set(key, null);
78+
}
79+
80+
for (Map.Entry<Material, RepairConfigItem> pair : repairMap.entrySet()) {
81+
ConfigurationSection section = config.createSection(pair.getKey().name());
82+
pair.getValue().normalize().serialize(section);
83+
}
84+
}
85+
86+
public void addItem(Material m, RepairConfigItem item) {
87+
repairMap.put(m, item);
88+
save();
89+
}
90+
}

src/main/java/cat/nyaa/utils/CommandReceiver.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void acceptCommand(CommandSender sender, Arguments cmd) {
170170
} catch (NoItemInHandException ex) {
171171
msg(sender, ex.isOffHand ? "user.info.no_item_offhand" : "user.info.no_item_hand");
172172
} catch (BadCommandException ex) {
173-
sender.sendMessage(ex.getMessage());
173+
sender.sendMessage(i18n.get(ex.getMessage(), ex.objs));
174174
} catch (NoPermissionException ex) {
175175
msg(sender, "user.error.no_required_permission", ex.getMessage());
176176
} catch (Exception ex) {
@@ -353,9 +353,13 @@ public <T extends Enum<T>> T nextEnum(Class<T> cls) {
353353
return Enum.valueOf(cls, str);
354354
} catch (IllegalArgumentException ex) {
355355
String vals = "";
356+
List<String> l = new ArrayList<>();
356357
for (T k : cls.getEnumConstants()) {
357-
vals += k.name() + "|";
358+
l.add(k.name());
358359
}
360+
l.sort(Comparator.naturalOrder());
361+
for (String k : l) vals += "\n" + k;
362+
359363
throw new BadCommandException("user.error.bad_enum", cls.getName(), vals);
360364
}
361365
}

src/main/resources/lang/en_US.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ user:
162162
player_hint_removed: "Your mailbox is removed by an administrator."
163163
info: "Player %s(%s) X:%d Y:%d Z:%d"
164164

165+
repair:
166+
item_added: "Repairable item added"
167+
165168
manual:
166169
no_description: "No description"
167170
no_usage: "No usage"
@@ -249,3 +252,19 @@ manual:
249252
send:
250253
description: "Send item in hand to another player"
251254
usage: "/nu mailbox send <player>"
255+
256+
repair:
257+
description: "Repair item"
258+
usage: "/nu repair help"
259+
add:
260+
description: "Add repairable item"
261+
usage: "/nu repair add [item] [material] [fullRepairCostAmount] [expCostPerConsume] [enchantCostPerLv] [repairTimesLimit]"
262+
hand:
263+
description: "Repair the item in hand"
264+
usage: "/nu repair hand"
265+
full:
266+
description: "Completely repair the item in hand"
267+
usage: "/nu repair full"
268+
info:
269+
description: "Show repair info about the item in hand"
270+
usage: "/nu repair info"

src/main/resources/plugin.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,9 @@ permissions:
7171
nu.mailadmin:
7272
description: Administrative commands for mailbox
7373
default: op
74+
nu.repair:
75+
description: Repair item
76+
default: true
77+
nu.addrepair:
78+
description: Add repairable item
79+
default: op

0 commit comments

Comments
 (0)