Skip to content

Commit 10705eb

Browse files
committed
Added more line commands, suggested here: #49
1 parent 0d378fa commit 10705eb

File tree

5 files changed

+303
-1
lines changed

5 files changed

+303
-1
lines changed

plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/hologram/HologramType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.util.List;
55

66
public enum HologramType {
7-
TEXT(Arrays.asList("background", "textshadow", "textalignment", "seethrough", "setline", "removeline", "addline", "insertbefore", "insertafter", "updatetextinterval")),
7+
TEXT(Arrays.asList("background", "textshadow", "textalignment", "seethrough", "setline", "removeline", "addline", "insertbefore", "insertafter", "swap_lines", "move_line_up", "move_line_down", "updatetextinterval")),
88
ITEM(List.of("item")),
99
BLOCK(List.of("block"));
1010

plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/HologramCMD.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public final class HologramCMD extends Command {
4141
<%primary_color%>- /hologram edit <hologram> insertBefore <line number> <text ...> <dark_gray>- <white>Inserts a line before another
4242
<%primary_color%>- /hologram edit <hologram> insertAfter <line number> <text ...> <dark_gray>- <white>Inserts a line after another
4343
<%primary_color%>- /hologram edit <hologram> setLine <line number> <text ...> <dark_gray>- <white>Edits the line
44+
<%primary_color%>- /hologram edit <hologram> swap_lines <first> <second> <dark_gray>- <white>Swaps two lines
45+
<%primary_color%>- /hologram edit <hologram> move_line_up <line> <dark_gray>- <white>Moves a line up one position
46+
<%primary_color%>- /hologram edit <hologram> move_line_down <line> <dark_gray>- <white>Moves a line down one position
4447
<%primary_color%>- /hologram edit <hologram> position <dark_gray>- <white>Teleports the hologram to you
4548
<%primary_color%>- /hologram edit <hologram> moveTo <x> <y> <z> [yaw] [pitch] <dark_gray>- <white>Teleports the hologram to the coordinates
4649
<%primary_color%>- /hologram edit <hologram> rotate <degrees> <dark_gray>- <white>Rotates the hologram
@@ -246,6 +249,24 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No
246249
TextHologramData textData = (TextHologramData) hologram.getData();
247250
yield IntStream.range(1, textData.getText().size() + 1).mapToObj(Integer::toString);
248251
}
252+
case "move_line_up" -> {
253+
TextHologramData textData = (TextHologramData) hologram.getData();
254+
// cant move line 1 up
255+
yield IntStream.range(2, textData.getText().size() + 1).mapToObj(Integer::toString);
256+
}
257+
case "move_line_down" -> {
258+
TextHologramData textData = (TextHologramData) hologram.getData();
259+
// cant move last line down
260+
yield IntStream.range(1, textData.getText().size()).mapToObj(Integer::toString);
261+
}
262+
case "swap_lines" -> {
263+
TextHologramData textData = (TextHologramData) hologram.getData();
264+
if (args.length == 4) {
265+
yield IntStream.range(1, textData.getText().size() + 1).mapToObj(Integer::toString);
266+
} else {
267+
yield Stream.<String>empty();
268+
}
269+
}
249270
case "linkwithnpc" -> {
250271
if (!PluginUtils.isFancyNpcsEnabled()) {
251272
yield Stream.<String>empty();
@@ -277,6 +298,21 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No
277298
return List.of(textData.getText().get(index - 1));
278299
}
279300

301+
// /holo edit [hologram] swap_lines [first] {tab:second_line}
302+
if (args.length == 5 && args[2].equalsIgnoreCase("swap_lines")) {
303+
TextHologramData textData = (TextHologramData) hologram.getData();
304+
305+
final var firstLine = Ints.tryParse(args[3]);
306+
if (firstLine == null || firstLine < 1 || firstLine > textData.getText().size()) {
307+
return Collections.emptyList();
308+
}
309+
310+
return IntStream.range(1, textData.getText().size() + 1)
311+
.filter(i -> i != firstLine)
312+
.mapToObj(Integer::toString)
313+
.toList();
314+
}
315+
280316
// /holo edit [hologram] moveto {tab:x} {tab:y} {tab:z}
281317
if (args[2].equalsIgnoreCase("moveto")) {
282318
if (!(sender instanceof Player player)) {
@@ -372,6 +408,9 @@ private boolean edit(@NotNull final CommandSender player, @NotNull final Hologra
372408
case "removeline" -> new RemoveLineCMD().run(player, hologram, args);
373409
case "insertbefore" -> new InsertBeforeCMD().run(player, hologram, args);
374410
case "insertafter" -> new InsertAfterCMD().run(player, hologram, args);
411+
case "swap_lines" -> new SwapLinesCMD().run(player, hologram, args);
412+
case "move_line_up" -> new MoveUpCMD().run(player, hologram, args);
413+
case "move_line_down" -> new MoveDownCMD().run(player, hologram, args);
375414
case "textshadow" -> new TextShadowCMD().run(player, hologram, args);
376415
case "textalignment" -> new TextAlignmentCMD().run(player, hologram, args);
377416
case "seethrough" -> new SeeThroughCMD().run(player, hologram, args);
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.fancyinnovations.fancyholograms.commands.hologram;
2+
3+
import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
4+
import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent;
5+
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
6+
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
7+
import com.fancyinnovations.fancyholograms.commands.Subcommand;
8+
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
9+
import com.fancyinnovations.fancyholograms.util.NumberHelper;
10+
import de.oliver.fancylib.MessageHelper;
11+
import org.bukkit.command.CommandSender;
12+
import org.jetbrains.annotations.NotNull;
13+
import org.jetbrains.annotations.Nullable;
14+
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
18+
public class MoveDownCMD implements Subcommand {
19+
20+
@Override
21+
public List<String> tabcompletion(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
22+
return null;
23+
}
24+
25+
@Override
26+
public boolean run(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
27+
28+
if (!(player.hasPermission("fancyholograms.hologram.edit.move_line"))) {
29+
MessageHelper.error(player, "You don't have the required permission to move lines");
30+
return false;
31+
}
32+
33+
if (!(hologram.getData() instanceof TextHologramData textData)) {
34+
MessageHelper.error(player, "This command can only be used on text holograms");
35+
return false;
36+
}
37+
38+
if (args.length < 4) {
39+
MessageHelper.error(player, "Usage: /hologram edit <name> move_line_down <line>");
40+
return false;
41+
}
42+
43+
final var lineNumber = NumberHelper.parseInt(args[3]);
44+
45+
if (lineNumber.isEmpty()) {
46+
MessageHelper.error(player, "Invalid line number");
47+
return false;
48+
}
49+
50+
int line = lineNumber.get();
51+
List<String> text = textData.getText();
52+
53+
if (line < 1 || line > text.size()) {
54+
MessageHelper.error(player, "Line number is out of range (1-" + text.size() + ")");
55+
return false;
56+
}
57+
58+
if (line == text.size()) {
59+
MessageHelper.warning(player, "The last line cannot be moved down");
60+
return false;
61+
}
62+
63+
final var copied = textData.copy(textData.getName());
64+
List<String> newText = new ArrayList<>(text);
65+
66+
String temp = newText.get(line - 1);
67+
newText.set(line - 1, newText.get(line));
68+
newText.set(line, temp);
69+
70+
copied.setText(newText);
71+
72+
if (!HologramCMD.callModificationEvent(hologram, player, copied, HologramUpdateEvent.HologramModification.TEXT)) {
73+
return false;
74+
}
75+
76+
textData.setText(newText);
77+
78+
if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) {
79+
FancyHologramsPlugin.get().getStorage().save(hologram.getData());
80+
}
81+
82+
MessageHelper.success(player, "Moved line " + line + " down to position " + (line + 1));
83+
return true;
84+
}
85+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.fancyinnovations.fancyholograms.commands.hologram;
2+
3+
import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
4+
import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent;
5+
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
6+
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
7+
import com.fancyinnovations.fancyholograms.commands.Subcommand;
8+
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
9+
import com.fancyinnovations.fancyholograms.util.NumberHelper;
10+
import de.oliver.fancylib.MessageHelper;
11+
import org.bukkit.command.CommandSender;
12+
import org.jetbrains.annotations.NotNull;
13+
import org.jetbrains.annotations.Nullable;
14+
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
18+
public class MoveUpCMD implements Subcommand {
19+
20+
@Override
21+
public List<String> tabcompletion(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
22+
return null;
23+
}
24+
25+
@Override
26+
public boolean run(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
27+
28+
if (!(player.hasPermission("fancyholograms.hologram.edit.move_line"))) {
29+
MessageHelper.error(player, "You don't have the required permission to move lines");
30+
return false;
31+
}
32+
33+
if (!(hologram.getData() instanceof TextHologramData textData)) {
34+
MessageHelper.error(player, "This command can only be used on text holograms");
35+
return false;
36+
}
37+
38+
if (args.length < 4) {
39+
MessageHelper.error(player, "Usage: /hologram edit <name> move_line_up <line>");
40+
return false;
41+
}
42+
43+
final var lineNumber = NumberHelper.parseInt(args[3]);
44+
45+
if (lineNumber.isEmpty()) {
46+
MessageHelper.error(player, "Invalid line number");
47+
return false;
48+
}
49+
50+
int line = lineNumber.get();
51+
List<String> text = textData.getText();
52+
53+
if (line < 1 || line > text.size()) {
54+
MessageHelper.error(player, "Line number is out of range (1-" + text.size() + ")");
55+
return false;
56+
}
57+
58+
if (line == 1) {
59+
MessageHelper.warning(player, "Line 1 cannot be moved up");
60+
return false;
61+
}
62+
63+
final var copied = textData.copy(textData.getName());
64+
List<String> newText = new ArrayList<>(text);
65+
66+
String temp = newText.get(line - 1);
67+
newText.set(line - 1, newText.get(line - 2));
68+
newText.set(line - 2, temp);
69+
70+
copied.setText(newText);
71+
72+
if (!HologramCMD.callModificationEvent(hologram, player, copied, HologramUpdateEvent.HologramModification.TEXT)) {
73+
return false;
74+
}
75+
76+
textData.setText(newText);
77+
78+
if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) {
79+
FancyHologramsPlugin.get().getStorage().save(hologram.getData());
80+
}
81+
82+
MessageHelper.success(player, "Moved line " + line + " up to position " + (line - 1));
83+
return true;
84+
}
85+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.fancyinnovations.fancyholograms.commands.hologram;
2+
3+
import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
4+
import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent;
5+
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
6+
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
7+
import com.fancyinnovations.fancyholograms.commands.Subcommand;
8+
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
9+
import com.fancyinnovations.fancyholograms.util.NumberHelper;
10+
import de.oliver.fancylib.MessageHelper;
11+
import org.bukkit.command.CommandSender;
12+
import org.jetbrains.annotations.NotNull;
13+
import org.jetbrains.annotations.Nullable;
14+
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
18+
public class SwapLinesCMD implements Subcommand {
19+
20+
@Override
21+
public List<String> tabcompletion(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
22+
return null;
23+
}
24+
25+
@Override
26+
public boolean run(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
27+
28+
if (!(player.hasPermission("fancyholograms.hologram.edit.swap_lines"))) {
29+
MessageHelper.error(player, "You don't have the required permission to swap lines");
30+
return false;
31+
}
32+
33+
if (!(hologram.getData() instanceof TextHologramData textData)) {
34+
MessageHelper.error(player, "This command can only be used on text holograms");
35+
return false;
36+
}
37+
38+
if (args.length < 5) {
39+
MessageHelper.error(player, "Usage: /hologram edit <name> swap_lines <first> <second>");
40+
return false;
41+
}
42+
43+
final var firstLine = NumberHelper.parseInt(args[3]);
44+
final var secondLine = NumberHelper.parseInt(args[4]);
45+
46+
if (firstLine.isEmpty() || secondLine.isEmpty()) {
47+
MessageHelper.error(player, "Invalid line numbers");
48+
return false;
49+
}
50+
51+
int first = firstLine.get();
52+
int second = secondLine.get();
53+
54+
List<String> text = textData.getText();
55+
56+
if (first < 1 || first > text.size()) {
57+
MessageHelper.error(player, "First line number is out of range (1-" + text.size() + ")");
58+
return false;
59+
}
60+
61+
if (second < 1 || second > text.size()) {
62+
MessageHelper.error(player, "Second line number is out of range (1-" + text.size() + ")");
63+
return false;
64+
}
65+
66+
if (first == second) {
67+
MessageHelper.warning(player, "Cannot swap a line with itself");
68+
return false;
69+
}
70+
71+
final var copied = textData.copy(textData.getName());
72+
List<String> newText = new ArrayList<>(text);
73+
74+
String temp = newText.get(first - 1);
75+
newText.set(first - 1, newText.get(second - 1));
76+
newText.set(second - 1, temp);
77+
78+
copied.setText(newText);
79+
80+
if (!HologramCMD.callModificationEvent(hologram, player, copied, HologramUpdateEvent.HologramModification.TEXT)) {
81+
return false;
82+
}
83+
84+
textData.setText(newText);
85+
86+
if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) {
87+
FancyHologramsPlugin.get().getStorage().save(hologram.getData());
88+
}
89+
90+
MessageHelper.success(player, "Swapped line " + first + " with line " + second);
91+
return true;
92+
}
93+
}

0 commit comments

Comments
 (0)