Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import java.util.List;

public enum HologramType {
TEXT(Arrays.asList("background", "textshadow", "textalignment", "seethrough", "setline", "removeline", "addline", "insertbefore", "insertafter", "updatetextinterval")),
TEXT(Arrays.asList("background", "textshadow", "textalignment", "seethrough", "setline", "removeline", "addline", "insertbefore", "insertafter", "swapLines", "moveLineUp", "moveLineDown", "updatetextinterval")),
ITEM(List.of("item")),
BLOCK(List.of("block"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public final class HologramCMD extends Command {
<%primary_color%>- /hologram edit <hologram> insertBefore <line number> <text ...> <dark_gray>- <white>Inserts a line before another
<%primary_color%>- /hologram edit <hologram> insertAfter <line number> <text ...> <dark_gray>- <white>Inserts a line after another
<%primary_color%>- /hologram edit <hologram> setLine <line number> <text ...> <dark_gray>- <white>Edits the line
<%primary_color%>- /hologram edit <hologram> swapLines <first> <second> <dark_gray>- <white>Swaps two lines
<%primary_color%>- /hologram edit <hologram> moveLineUp <line> <dark_gray>- <white>Moves a line up one position
<%primary_color%>- /hologram edit <hologram> moveLineDown <line> <dark_gray>- <white>Moves a line down one position
<%primary_color%>- /hologram edit <hologram> position <dark_gray>- <white>Teleports the hologram to you
<%primary_color%>- /hologram edit <hologram> moveTo <x> <y> <z> [yaw] [pitch] <dark_gray>- <white>Teleports the hologram to the coordinates
<%primary_color%>- /hologram edit <hologram> rotate <degrees> <dark_gray>- <white>Rotates the hologram
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram;

import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.MoveLineDownSuggestion;
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
import de.oliver.fancylib.MessageHelper;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Description;
import revxrsal.commands.annotation.SuggestWith;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.bukkit.annotation.CommandPermission;

import java.util.ArrayList;
import java.util.List;

public final class MoveDownCMD {

public static final MoveDownCMD INSTANCE = new MoveDownCMD();

private MoveDownCMD() {
}

@Command("hologram-new edit <hologram> moveLineDown <line>")
@Description("Moves a line down by one position")
@CommandPermission("fancyholograms.hologram.edit.move_line")
public void moveLineDown(
final @NotNull BukkitCommandActor actor,
final @NotNull Hologram hologram,
final @NotNull @SuggestWith(MoveLineDownSuggestion.class) int line
) {
if (!(hologram.getData() instanceof TextHologramData textData)) {
MessageHelper.error(actor.sender(), "This command can only be used on text holograms");
return;
}

List<String> text = textData.getText();

if (line < 1 || line > text.size()) {
MessageHelper.error(actor.sender(), "Line number is out of range (1-" + text.size() + ")");
return;
}

if (line == text.size()) {
MessageHelper.warning(actor.sender(), "The last line cannot be moved down");
return;
}

final var copied = textData.copy(textData.getName());
List<String> newText = new ArrayList<>(text);

String temp = newText.get(line - 1);
newText.set(line - 1, newText.get(line));
newText.set(line, temp);

copied.setText(newText);

if (!HologramCMD.callModificationEvent(hologram, actor.sender(), copied, HologramUpdateEvent.HologramModification.TEXT)) {
return;
}

textData.setText(newText);

if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) {
FancyHologramsPlugin.get().getStorage().save(hologram.getData());
}

MessageHelper.success(actor.sender(), "Moved line " + line + " down to position " + (line + 1));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram;

import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.MoveLineUpSuggestion;
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
import de.oliver.fancylib.MessageHelper;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Description;
import revxrsal.commands.annotation.SuggestWith;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.bukkit.annotation.CommandPermission;

import java.util.ArrayList;
import java.util.List;

public final class MoveUpCMD {

public static final MoveUpCMD INSTANCE = new MoveUpCMD();

private MoveUpCMD() {
}

@Command("hologram-new edit <hologram> moveLineUp <line>")
@Description("Moves a line up by one position")
@CommandPermission("fancyholograms.hologram.edit.move_line")
public void moveLineUp(
final @NotNull BukkitCommandActor actor,
final @NotNull Hologram hologram,
final @NotNull @SuggestWith(MoveLineUpSuggestion.class) int line
) {
if (!(hologram.getData() instanceof TextHologramData textData)) {
MessageHelper.error(actor.sender(), "This command can only be used on text holograms");
return;
}

List<String> text = textData.getText();

if (line < 1 || line > text.size()) {
MessageHelper.error(actor.sender(), "Line number is out of range (1-" + text.size() + ")");
return;
}

if (line == 1) {
MessageHelper.warning(actor.sender(), "Line 1 cannot be moved up");
return;
}

final var copied = textData.copy(textData.getName());
List<String> newText = new ArrayList<>(text);

String temp = newText.get(line - 1);
newText.set(line - 1, newText.get(line - 2));
newText.set(line - 2, temp);

copied.setText(newText);

if (!HologramCMD.callModificationEvent(hologram, actor.sender(), copied, HologramUpdateEvent.HologramModification.TEXT)) {
return;
}

textData.setText(newText);

if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) {
FancyHologramsPlugin.get().getStorage().save(hologram.getData());
}

MessageHelper.success(actor.sender(), "Moved line " + line + " up to position " + (line - 1));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram;

import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.SwapLinesSuggestion;
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
import de.oliver.fancylib.MessageHelper;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Description;
import revxrsal.commands.annotation.SuggestWith;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.bukkit.annotation.CommandPermission;

import java.util.ArrayList;
import java.util.List;

public final class SwapLinesCMD {

public static final SwapLinesCMD INSTANCE = new SwapLinesCMD();

private SwapLinesCMD() {
}

@Command("hologram-new edit <hologram> swapLines <line1> <line2>")
@Description("Swaps two lines")
@CommandPermission("fancyholograms.hologram.edit.swap_lines")
public void swapLines(
final @NotNull BukkitCommandActor actor,
final @NotNull Hologram hologram,
final @NotNull @SuggestWith(SwapLinesSuggestion.class) int line1,
final @NotNull @SuggestWith(SwapLinesSuggestion.class) int line2
) {
if (!(hologram.getData() instanceof TextHologramData textData)) {
MessageHelper.error(actor.sender(), "This command can only be used on text holograms");
return;
}

List<String> text = textData.getText();

if (line1 < 1 || line1 > text.size()) {
MessageHelper.error(actor.sender(), "First line number is out of range (1-" + text.size() + ")");
return;
}

if (line2 < 1 || line2 > text.size()) {
MessageHelper.error(actor.sender(), "Second line number is out of range (1-" + text.size() + ")");
return;
}

if (line1 == line2) {
MessageHelper.warning(actor.sender(), "Cannot swap a line with itself");
return;
}

final var copied = textData.copy(textData.getName());
List<String> newText = new ArrayList<>(text);

String temp = newText.get(line1 - 1);
newText.set(line1 - 1, newText.get(line2 - 1));
newText.set(line2 - 1, temp);

copied.setText(newText);

if (!HologramCMD.callModificationEvent(hologram, actor.sender(), copied, HologramUpdateEvent.HologramModification.TEXT)) {
return;
}

textData.setText(newText);

if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) {
FancyHologramsPlugin.get().getStorage().save(hologram.getData());
}

MessageHelper.success(actor.sender(), "Swapped line " + line1 + " with line " + line2);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions;

import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.autocomplete.SuggestionProvider;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.node.ExecutionContext;

import java.util.Collection;
import java.util.List;
import java.util.stream.IntStream;

public class MoveLineDownSuggestion implements SuggestionProvider<BukkitCommandActor> {

@Override
public @NotNull Collection<String> getSuggestions(@NotNull ExecutionContext<BukkitCommandActor> context) {
Hologram hologram = context.getResolvedArgumentOrNull(Hologram.class);
if (hologram == null || !(hologram.getData() instanceof TextHologramData textData)) {
return List.of();
}

return IntStream.range(1, textData.getText().size())
.mapToObj(Integer::toString)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions;

import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.autocomplete.SuggestionProvider;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.node.ExecutionContext;

import java.util.Collection;
import java.util.List;
import java.util.stream.IntStream;

public class MoveLineUpSuggestion implements SuggestionProvider<BukkitCommandActor> {

@Override
public @NotNull Collection<String> getSuggestions(@NotNull ExecutionContext<BukkitCommandActor> context) {
Hologram hologram = context.getResolvedArgumentOrNull(Hologram.class);
if (hologram == null || !(hologram.getData() instanceof TextHologramData textData)) {
return List.of();
}

return IntStream.range(2, textData.getText().size() + 1)
.mapToObj(Integer::toString)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions;

import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.autocomplete.SuggestionProvider;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.node.ExecutionContext;

import java.util.Collection;
import java.util.List;
import java.util.stream.IntStream;

public class SwapLinesSuggestion implements SuggestionProvider<BukkitCommandActor> {

@Override
public @NotNull Collection<String> getSuggestions(@NotNull ExecutionContext<BukkitCommandActor> context) {
Hologram hologram = context.getResolvedArgumentOrNull(Hologram.class);
if (hologram == null || !(hologram.getData() instanceof TextHologramData textData)) {
return List.of();
}

return IntStream.range(1, textData.getText().size() + 1)
.mapToObj(Integer::toString)
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import com.fancyinnovations.fancyholograms.commands.FancyHologramsTestCMD;
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.fancyholograms.ConfigCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.hologram.MoveDownCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.hologram.MoveUpCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.hologram.SwapLinesCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.hologram.TraitCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.types.HologramCommandType;
import com.fancyinnovations.fancyholograms.commands.lampCommands.types.TraitCommandType;
Expand Down Expand Up @@ -305,6 +308,9 @@ private void registerLampCommands() {

// hologram commands
lamp.register(TraitCMD.INSTANCE);
lamp.register(MoveUpCMD.INSTANCE);
lamp.register(MoveDownCMD.INSTANCE);
lamp.register(SwapLinesCMD.INSTANCE);
}

private void registerListeners() {
Expand Down