Skip to content

Commit f49c85d

Browse files
authored
GH-916 Refactor packages in item-edit related commands. (#916)
* Create item edit package and move to them item lore, flag, name. * Move to root feature package and fix Signed-off-by: Martin Sulikowski <[email protected]> * follow dmk feedback. --------- Signed-off-by: Martin Sulikowski <[email protected]>
1 parent 34aa32c commit f49c85d

File tree

10 files changed

+188
-95
lines changed

10 files changed

+188
-95
lines changed
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
package com.eternalcode.core.feature.essentials.item;
1+
package com.eternalcode.core.feature.itemedit;
22

33
import com.eternalcode.annotations.scan.command.DescriptionDocs;
44
import com.eternalcode.core.injector.annotations.Inject;
55
import com.eternalcode.core.notice.NoticeService;
66
import com.eternalcode.core.placeholder.Placeholders;
7+
import com.eternalcode.multification.shared.Formatter;
78
import dev.rollczi.litecommands.annotations.argument.Arg;
9+
import dev.rollczi.litecommands.annotations.command.Command;
810
import dev.rollczi.litecommands.annotations.context.Context;
911
import dev.rollczi.litecommands.annotations.execute.Execute;
1012
import dev.rollczi.litecommands.annotations.permission.Permission;
11-
import dev.rollczi.litecommands.annotations.command.Command;
1213
import org.bukkit.entity.Player;
1314
import org.bukkit.inventory.ItemFlag;
1415
import org.bukkit.inventory.ItemStack;
1516
import org.bukkit.inventory.meta.ItemMeta;
16-
import com.eternalcode.multification.shared.Formatter;
1717

1818
@Command(name = "itemflag")
1919
@Permission("eternalcore.itemflag")
@@ -43,13 +43,14 @@ void execute(@Context Player player, @Arg ItemFlag flag) {
4343

4444
if (meta.hasItemFlag(flag)) {
4545
meta.removeItemFlags(flag);
46-
this.noticeService.player(player.getUniqueId(), translation -> translation.item().itemFlagRemovedMessage(), formatter);
46+
hand.setItemMeta(meta);
47+
this.noticeService.player(player.getUniqueId(), translation -> translation.itemEdit().itemFlagRemovedMessage(), formatter);
4748
return;
4849
}
4950

5051
meta.addItemFlags(flag);
5152
hand.setItemMeta(meta);
52-
this.noticeService.player(player.getUniqueId(), translation -> translation.item().itemFlagAddedMessage(), formatter);
53+
this.noticeService.player(player.getUniqueId(), translation -> translation.itemEdit().itemFlagAddedMessage(), formatter);
5354
}
5455

5556
@Execute(name = "clear")
@@ -65,7 +66,6 @@ void clear(@Context Player player) {
6566

6667
meta.removeItemFlags(ItemFlag.values());
6768
hand.setItemMeta(meta);
68-
this.noticeService.player(player.getUniqueId(), translation -> translation.item().itemFlagClearedMessage());
69+
this.noticeService.player(player.getUniqueId(), translation -> translation.itemEdit().itemFlagClearedMessage());
6970
}
70-
7171
}
Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.eternalcode.core.feature.essentials.item.lore;
1+
package com.eternalcode.core.feature.itemedit;
22

33
import com.eternalcode.core.bridge.litecommand.argument.AbstractViewerArgument;
44
import com.eternalcode.core.injector.annotations.Inject;
@@ -17,9 +17,12 @@
1717
@LiteArgument(type = int.class, name = ItemLoreArgument.KEY)
1818
class ItemLoreArgument extends AbstractViewerArgument<Integer> {
1919

20-
private static final List<Integer> suggestions = List.of(0, 1, 2, 3, 4, 5);
2120
static final String KEY = "item-lore";
2221

22+
// Suggests numbers from 1 to 6, because in the command we add +1
23+
// so that users who are not aware that programming counts from zero understand it.
24+
private static final List<Integer> suggestions = List.of(1, 2, 3, 4, 5, 6);
25+
2326
@Inject
2427
public ItemLoreArgument(TranslationManager translationManager) {
2528
super(translationManager);
@@ -30,21 +33,24 @@ public ParseResult<Integer> parse(Invocation<CommandSender> invocation, String a
3033
try {
3134
int value = Integer.parseInt(argument);
3235

33-
if (value < 0) {
36+
if (value < 1) {
3437
return ParseResult.failure(translation.argument().numberBiggerThanOrEqualZero());
3538
}
3639

37-
return ParseResult.success(value);
40+
return ParseResult.success(value - 1);
3841
}
3942
catch (NumberFormatException exception) {
4043
return ParseResult.failure(translation.argument().numberBiggerThanOrEqualZero());
4144
}
4245
}
4346

4447
@Override
45-
public SuggestionResult suggest(Invocation<CommandSender> invocation, Argument<Integer> argument, SuggestionContext context) {
48+
public SuggestionResult suggest(
49+
Invocation<CommandSender> invocation,
50+
Argument<Integer> argument,
51+
SuggestionContext context) {
4652
return suggestions.stream()
47-
.map(String::valueOf)
48-
.collect(SuggestionResult.collector());
53+
.map(String::valueOf)
54+
.collect(SuggestionResult.collector());
4955
}
5056
}
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
1-
package com.eternalcode.core.feature.essentials.item.lore;
1+
package com.eternalcode.core.feature.itemedit;
22

33
import com.eternalcode.annotations.scan.command.DescriptionDocs;
44
import com.eternalcode.commons.adventure.AdventureUtil;
55
import com.eternalcode.core.injector.annotations.Inject;
66
import com.eternalcode.core.notice.NoticeService;
7-
import com.eternalcode.commons.adventure.AdventureUtil;
87
import dev.rollczi.litecommands.annotations.argument.Arg;
8+
import dev.rollczi.litecommands.annotations.command.Command;
99
import dev.rollczi.litecommands.annotations.context.Context;
10-
import dev.rollczi.litecommands.annotations.join.Join;
1110
import dev.rollczi.litecommands.annotations.execute.Execute;
11+
import dev.rollczi.litecommands.annotations.join.Join;
1212
import dev.rollczi.litecommands.annotations.permission.Permission;
13-
import dev.rollczi.litecommands.annotations.command.Command;
13+
import java.util.ArrayList;
14+
import java.util.List;
1415
import net.kyori.adventure.text.minimessage.MiniMessage;
1516
import org.bukkit.Material;
1617
import org.bukkit.entity.Player;
1718
import org.bukkit.inventory.ItemStack;
1819
import org.bukkit.inventory.meta.ItemMeta;
1920

20-
import java.util.ArrayList;
21-
import java.util.List;
22-
2321
@Command(name = "itemlore")
2422
@Permission("eternalcore.itemlore")
2523
class ItemLoreCommand {
@@ -40,53 +38,78 @@ void execute(@Context Player player, @Arg(ItemLoreArgument.KEY) int line, @Join
4038

4139
if (itemStack == null) {
4240
this.noticeService.player(player.getUniqueId(), translation -> translation.argument().noItem());
43-
4441
return;
4542
}
4643

4744
ItemMeta itemMeta = itemStack.getItemMeta();
48-
4945
List<String> lore = itemMeta.getLore();
50-
5146
lore = lore == null ? new ArrayList<>() : new ArrayList<>(lore);
5247

53-
if (text.equals("none")) {
54-
lore.remove(line);
48+
while (lore.size() <= line) {
49+
lore.add("");
5550
}
56-
else {
57-
// fill list
58-
while (lore.size() <= line) {
59-
lore.add("");
60-
}
6151

62-
lore.set(line, AdventureUtil.SECTION_SERIALIZER.serialize(AdventureUtil.resetItalic(this.miniMessage.deserialize(text))));
63-
}
52+
lore.set(line, AdventureUtil.SECTION_SERIALIZER.serialize(AdventureUtil.resetItalic(this.miniMessage.deserialize(text))));
6453

6554
itemMeta.setLore(lore);
6655
itemStack.setItemMeta(itemMeta);
6756

6857
this.noticeService.create()
69-
.notice(translation -> translation.item().itemChangeLoreMessage())
58+
.notice(translation -> translation.itemEdit().itemChangeLoreMessage())
7059
.placeholder("{ITEM_LORE}", text)
7160
.player(player.getUniqueId())
7261
.send();
7362
}
7463

64+
@Execute(name = "remove")
65+
@DescriptionDocs(description = "Removes a specific line of lore from the item in hand", arguments = "<line>")
66+
void remove(@Context Player player, @Arg(ItemLoreArgument.KEY) int line) {
67+
ItemStack itemStack = this.validateItemFromMainHand(player);
68+
69+
if (itemStack == null) {
70+
this.noticeService.player(player.getUniqueId(), translation -> translation.argument().noItem());
71+
return;
72+
}
73+
74+
ItemMeta itemMeta = itemStack.getItemMeta();
75+
List<String> lore = itemMeta.getLore();
76+
77+
if (lore == null || lore.isEmpty()) {
78+
this.noticeService.player(player.getUniqueId(), translation -> translation.itemEdit().noLore());
79+
return;
80+
}
81+
82+
if (line < 0 || line >= lore.size()) {
83+
this.noticeService.player(player.getUniqueId(), translation -> translation.itemEdit().invalidLoreLine());
84+
return;
85+
}
86+
87+
lore.remove(line);
88+
itemMeta.setLore(lore);
89+
itemStack.setItemMeta(itemMeta);
90+
91+
this.noticeService.create()
92+
.player(player.getUniqueId())
93+
.notice(translation -> translation.itemEdit().itemLoreLineRemoved())
94+
.placeholder("{LINE}", String.valueOf(line + 1))
95+
.send();
96+
}
97+
7598
@Execute(name = "clear")
76-
@DescriptionDocs(description = "Clears lore of item in hand")
99+
@DescriptionDocs(description = "Clears all lore from the item in hand")
77100
void clear(@Context Player player) {
78101
ItemStack itemStack = this.validateItemFromMainHand(player);
79102

80103
if (itemStack == null) {
104+
this.noticeService.player(player.getUniqueId(), translation -> translation.argument().noItem());
81105
return;
82106
}
83107

84108
ItemMeta itemMeta = itemStack.getItemMeta();
85-
86109
itemMeta.setLore(new ArrayList<>());
87110
itemStack.setItemMeta(itemMeta);
88111

89-
this.noticeService.player(player.getUniqueId(), translation -> translation.item().itemClearLoreMessage());
112+
this.noticeService.player(player.getUniqueId(), translation -> translation.itemEdit().itemClearLoreMessage());
90113
}
91114

92115
private ItemStack validateItemFromMainHand(Player player) {
@@ -98,5 +121,4 @@ private ItemStack validateItemFromMainHand(Player player) {
98121

99122
return itemStack;
100123
}
101-
102124
}
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package com.eternalcode.core.feature.essentials.item;
1+
package com.eternalcode.core.feature.itemedit;
22

33
import com.eternalcode.annotations.scan.command.DescriptionDocs;
44
import com.eternalcode.commons.adventure.AdventureUtil;
55
import com.eternalcode.core.injector.annotations.Inject;
66
import com.eternalcode.core.notice.NoticeService;
7-
import com.eternalcode.commons.adventure.AdventureUtil;
87
import dev.rollczi.litecommands.annotations.context.Context;
98
import dev.rollczi.litecommands.annotations.join.Join;
109
import dev.rollczi.litecommands.annotations.execute.Execute;
1110
import dev.rollczi.litecommands.annotations.permission.Permission;
1211
import dev.rollczi.litecommands.annotations.command.Command;
1312
import net.kyori.adventure.text.minimessage.MiniMessage;
13+
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
1414
import org.bukkit.Material;
1515
import org.bukkit.entity.Player;
1616
import org.bukkit.inventory.ItemStack;
@@ -33,22 +33,20 @@ class ItemNameCommand {
3333
@DescriptionDocs(description = "Sets name of item in hand", arguments = "<name>")
3434
void execute(@Context Player player, @Join String name) {
3535
ItemStack itemStack = this.validateItemFromMainHand(player);
36-
36+
3737
if (itemStack == null) {
3838
this.noticeService.player(player.getUniqueId(), translation -> translation.argument().noItem());
39-
4039
return;
4140
}
4241

4342
ItemMeta itemMeta = itemStack.getItemMeta();
44-
4543
String serialized = AdventureUtil.SECTION_SERIALIZER.serialize(this.miniMessage.deserialize(name));
4644

4745
itemMeta.setDisplayName(serialized);
4846
itemStack.setItemMeta(itemMeta);
4947

5048
this.noticeService.create()
51-
.notice(translation -> translation.item().itemChangeNameMessage())
49+
.notice(translation -> translation.itemEdit().itemChangeNameMessage())
5250
.placeholder("{ITEM_NAME}", name)
5351
.player(player.getUniqueId())
5452
.send();
@@ -60,15 +58,15 @@ void clear(@Context Player player) {
6058
ItemStack itemStack = this.validateItemFromMainHand(player);
6159

6260
if (itemStack == null) {
61+
this.noticeService.player(player.getUniqueId(), translation -> translation.argument().noItem());
6362
return;
6463
}
6564

6665
ItemMeta itemMeta = itemStack.getItemMeta();
67-
6866
itemMeta.setDisplayName(null);
6967
itemStack.setItemMeta(itemMeta);
7068

71-
this.noticeService.player(player.getUniqueId(), translation -> translation.item().itemClearNameMessage());
69+
this.noticeService.player(player.getUniqueId(), translation -> translation.itemEdit().itemClearNameMessage());
7270
}
7371

7472
private ItemStack validateItemFromMainHand(Player player) {
@@ -80,5 +78,4 @@ private ItemStack validateItemFromMainHand(Player player) {
8078

8179
return itemStack;
8280
}
83-
8481
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.eternalcode.core.feature.itemedit.messages;
2+
3+
import com.eternalcode.multification.notice.Notice;
4+
import lombok.Getter;
5+
import lombok.experimental.Accessors;
6+
import net.dzikoysk.cdn.entity.Contextual;
7+
import net.dzikoysk.cdn.entity.Description;
8+
9+
@Getter
10+
@Accessors(fluent = true)
11+
@Contextual
12+
public class ENItemEditMessages implements ItemEditMessages {
13+
14+
@Description("# {ITEM_NAME} - New item name")
15+
public Notice itemChangeNameMessage = Notice.chat("<green>► <white>Name changed to: <green>{ITEM_NAME}");
16+
17+
@Description(" ")
18+
public Notice itemClearNameMessage = Notice.chat("<green>► <white>Item name cleared!");
19+
20+
@Description({" ", "# {ITEM_LORE} - New item lore"})
21+
public Notice itemChangeLoreMessage = Notice.chat("<green>► <white>Lore changed to: <green>{ITEM_LORE}");
22+
23+
@Description(" ")
24+
public Notice itemClearLoreMessage = Notice.chat("<green>► <white>Item lore cleared!");
25+
26+
@Description({" ", "# {LINE} - Line number removed"})
27+
public Notice itemLoreLineRemoved = Notice.chat("<green>► <white>Removed lore line: <green>{LINE}");
28+
29+
@Description({" ", "# {ITEM_FLAG} - Flag name"})
30+
public Notice itemFlagRemovedMessage = Notice.chat("<green>► <white>Removed item flag: <green>{ITEM_FLAG}");
31+
public Notice itemFlagAddedMessage = Notice.chat("<green>► <white>Added item flag: <green>{ITEM_FLAG}");
32+
33+
@Description(" ")
34+
public Notice itemFlagClearedMessage = Notice.chat("<green>► <white>All item flags cleared!");
35+
36+
@Description(" ")
37+
public Notice noLore = Notice.chat("<red>✖ <white>This item has no lore!");
38+
39+
@Description(" ")
40+
public Notice invalidLoreLine = Notice.chat("<red>✖ <white>Invalid lore line number!");
41+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.eternalcode.core.feature.itemedit.messages;
2+
3+
import com.eternalcode.multification.notice.Notice;
4+
5+
public interface ItemEditMessages {
6+
// Item name
7+
Notice itemChangeNameMessage();
8+
Notice itemClearNameMessage();
9+
10+
// Item lore
11+
Notice itemChangeLoreMessage();
12+
Notice itemClearLoreMessage();
13+
Notice itemLoreLineRemoved();
14+
15+
// Item flags
16+
Notice itemFlagRemovedMessage();
17+
Notice itemFlagAddedMessage();
18+
Notice itemFlagClearedMessage();
19+
20+
// Validation
21+
Notice noLore();
22+
Notice invalidLoreLine();
23+
}

0 commit comments

Comments
 (0)