Skip to content

GH-886 Sign editor (/sign setline <index> <text> command) #895

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.eternalcode.core.feature.signeditor;

import com.eternalcode.commons.adventure.AdventureUtil;
import com.eternalcode.core.compatibility.Compatibility;
import com.eternalcode.core.compatibility.Version;
import com.eternalcode.core.injector.annotations.Inject;
import com.eternalcode.core.notice.NoticeService;
import dev.rollczi.litecommands.annotations.argument.Arg;
import dev.rollczi.litecommands.annotations.command.Command;
import dev.rollczi.litecommands.annotations.context.Context;
import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.join.Join;
import dev.rollczi.litecommands.annotations.permission.Permission;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;

@Command(name = "signedit")
@Permission("eternalcode.signedit")
@Compatibility(to = @Version(minor = 19, patch = 4))
public class SignEditorCommand {

private final NoticeService noticeService;
private final MiniMessage miniMessage;

@Inject
public SignEditorCommand(NoticeService noticeService, MiniMessage miniMessage) {
this.noticeService = noticeService;
this.miniMessage = miniMessage;
}

@Execute(name = "set")
@Deprecated(since = "1.20")
void execute(@Context Player player, @Arg int line, @Join String text) {
Block targetBlock = player.getTargetBlockExact(5);

if (targetBlock == null) {
return;
}

if (!(targetBlock.getState() instanceof Sign sign)) {
this.noticeService.create()
.player(player.getUniqueId())
.notice(translation -> translation.signEditor().noSignFound())
.send();
return;
}

if (line < 1 || line >= sign.getTargetSide(player).getLines().length) {
this.noticeService.create()
.player(player.getUniqueId())
.placeholder("{LINE}", String.valueOf(line))
.notice(translation -> translation.signEditor().invalidIndex())
.send();

return;
}

sign.setLine(line - 1, AdventureUtil.SECTION_SERIALIZER.serialize(this.miniMessage.deserialize(text)));
sign.update();

this.noticeService.create()
.player(player.getUniqueId())
.placeholder("{LINE}", String.valueOf(line))
.placeholder("{TEXT}", text)
.notice(translation -> translation.signEditor().lineSet())
.send();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.eternalcode.core.feature.signeditor;

import com.eternalcode.commons.adventure.AdventureUtil;
import com.eternalcode.core.compatibility.Compatibility;
import com.eternalcode.core.compatibility.Version;
import com.eternalcode.core.injector.annotations.Inject;
import com.eternalcode.core.notice.NoticeService;
import dev.rollczi.litecommands.annotations.argument.Arg;
import dev.rollczi.litecommands.annotations.command.Command;
import dev.rollczi.litecommands.annotations.context.Context;
import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.join.Join;
import dev.rollczi.litecommands.annotations.permission.Permission;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.block.sign.Side;
import org.bukkit.block.sign.SignSide;
import org.bukkit.entity.Player;

@Command(name = "signedit")
@Permission("eternalcode.signedit")
@Compatibility(from = @Version(minor = 20, patch = 0))
public class SignSideEditorCommand {

private final NoticeService noticeService;
private final MiniMessage miniMessage;

@Inject
public SignSideEditorCommand(NoticeService noticeService, MiniMessage miniMessage) {
this.noticeService = noticeService;
this.miniMessage = miniMessage;
}

@Execute(name = "set")
void execute(@Context Player player, @Arg Side side, @Arg int line, @Join String text) {
Block targetBlock = player.getTargetBlockExact(5);

if (targetBlock == null) {
return;
}

if (!(targetBlock.getState() instanceof Sign sign)) {
this.noticeService.create()
.player(player.getUniqueId())
.notice(translation -> translation.signEditor().noSignFound())
.send();

return;
}

SignSide signSide = sign.getSide(side);
if (line < 1 || line > signSide.getLines().length) {
this.noticeService.create()
.player(player.getUniqueId())
.placeholder("{LINE}", String.valueOf(line))
.notice(translation -> translation.signEditor().invalidIndex())
.send();
return;
}

signSide.setLine(line - 1, AdventureUtil.SECTION_SERIALIZER.serialize(this.miniMessage.deserialize(text)));
sign.update();

this.noticeService.create()
.player(player.getUniqueId())
.placeholder("{LINE}", String.valueOf(line))
.placeholder("{TEXT}", text)
.notice(translation -> translation.signEditor().lineSet())
.send();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.eternalcode.core.feature.signeditor.messages;

import com.eternalcode.multification.notice.Notice;
import lombok.Getter;
import lombok.experimental.Accessors;
import net.dzikoysk.cdn.entity.Contextual;

@Getter
@Accessors(fluent = true)
@Contextual
public class ENSignEditorMessages implements SignEditorMessages {
public Notice noSignFound = Notice.chat("<red>✘ <dark_red>Look at the sign to edit it!");
public Notice invalidIndex = Notice.chat("<red>✘ <dark_red>The value {LINE} is invalid! <red>Please select a number between 1 and 4!");
public Notice lineSet = Notice.chat("<green>► <white>Line <green>{LINE} <white>set to <green>{TEXT}");
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.eternalcode.core.feature.signeditor.messages;

import com.eternalcode.multification.notice.Notice;
import lombok.Getter;
import lombok.experimental.Accessors;
import net.dzikoysk.cdn.entity.Contextual;

@Getter
@Accessors(fluent = true)
@Contextual
public class PLSignEditorMessages implements SignEditorMessages {
public Notice noSignFound = Notice.chat("<red>✘ <dark_red>Spójrz na tabliczkę, aby ją edytować!");
public Notice invalidIndex = Notice.chat("<red>✘ <dark_red>Wartość {LINE} jest nieprawidłowa! <red>Wybierz numer od 1 do 4!");
public Notice lineSet = Notice.chat("<green>► <white>Wartość <green>{LINE}</green> została ustawiona na <green>{TEXT}");
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.eternalcode.core.feature.signeditor.messages;

import com.eternalcode.multification.notice.Notice;

public interface SignEditorMessages {
Notice noSignFound();
Notice invalidIndex();
Notice lineSet();
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.eternalcode.core.feature.randomteleport.messages.RandomTeleportMessages;
import com.eternalcode.core.feature.seen.messages.SeenMessages;
import com.eternalcode.core.feature.setslot.messages.SetSlotMessages;
import com.eternalcode.core.feature.signeditor.messages.SignEditorMessages;
import com.eternalcode.core.feature.spawn.messages.SpawnMessages;
import com.eternalcode.core.feature.sudo.messages.SudoMessages;
import com.eternalcode.core.feature.teleportrequest.messages.TeleportRequestMessages;
Expand Down Expand Up @@ -222,6 +223,8 @@ interface ContainerSection {
PlayerSection player();
//Seen section
SeenMessages seen();
// sign editor section
SignEditorMessages signEditor();
// spawn section
SpawnMessages spawn();
// set slot section
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
import com.eternalcode.core.feature.adminchat.messages.ENAdminChatMessages;
import com.eternalcode.core.feature.afk.messages.ENAfkMessages;
import com.eternalcode.core.feature.automessage.messages.ENAutoMessageMessages;
import com.eternalcode.core.feature.itemedit.messages.ENItemEditMessages;
import com.eternalcode.core.feature.helpop.messages.ENHelpOpMessages;
import com.eternalcode.core.feature.home.messages.ENHomeMessages;
import com.eternalcode.core.feature.itemedit.messages.ENItemEditMessages;
import com.eternalcode.core.feature.jail.messages.ENJailMessages;
import com.eternalcode.core.feature.language.Language;
import com.eternalcode.core.feature.seen.messages.ENSeenMessages;
import com.eternalcode.core.feature.setslot.messages.ENSetSlotMessages;
import com.eternalcode.core.feature.privatechat.messages.ENPrivateMessages;
import com.eternalcode.core.feature.randomteleport.messages.ENRandomTeleportMessages;
import com.eternalcode.core.feature.seen.messages.ENSeenMessages;
import com.eternalcode.core.feature.setslot.messages.ENSetSlotMessages;
import com.eternalcode.core.feature.signeditor.messages.ENSignEditorMessages;
import com.eternalcode.core.feature.spawn.messages.ENSpawnMessages;
import com.eternalcode.core.feature.sudo.messages.ENSudoMessages;
import com.eternalcode.core.feature.teleportrequest.messages.ENTeleportRequestMessages;
Expand Down Expand Up @@ -119,6 +120,12 @@ public class ENTranslation extends AbstractTranslation {
@Description("# This section is responsible for all messages related to item editing.")
public ENItemEditMessages itemEdit = new ENItemEditMessages();

@Description({
" ",
"# This section is responsible for the messages of the /signeditor command",
})
public ENSignEditorMessages signEditor = new ENSignEditorMessages();

@Getter
@Contextual
public static class ENFormatSection implements Format {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import com.eternalcode.core.feature.setslot.messages.PLSetSlotMessages;
import com.eternalcode.core.feature.privatechat.messages.PLPrivateChatMessages;
import com.eternalcode.core.feature.randomteleport.messages.PLRandomTeleportMessages;
import com.eternalcode.core.feature.signeditor.messages.PLSignEditorMessages;
import com.eternalcode.core.feature.signeditor.messages.SignEditorMessages;
import com.eternalcode.core.feature.spawn.messages.PLSpawnMessages;
import com.eternalcode.core.feature.sudo.messages.PLSudoMessages;
import com.eternalcode.core.feature.teleportrequest.messages.PLTeleportRequestMessages;
Expand Down Expand Up @@ -116,6 +118,12 @@ public class PLTranslation extends AbstractTranslation {
@Description("# Ta sekcja odpowiada za wiadomości dotyczące edytowanie itemow")
public PLItemEditMessages itemEdit = new PLItemEditMessages();

@Description({
" ",
"# Ta sekcja odpowiada za wiadomości komendy /signeditor"
})
public PLSignEditorMessages signEditor = new PLSignEditorMessages();

@Getter
@Contextual
public static class PLFormatSection implements Format {
Expand Down