Skip to content
Merged
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>Zmieniono linię <green>{LINE}</green> 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