- Příprava meníčka a funkce pro úpravu cedulek

master
jakub 3 weeks ago
parent 375f5983af
commit b34c89f1c2
  1. 2
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  2. 6
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java
  3. 124
      src/main/java/xyz/soukup/ecoCraftCore/sign/SignEditCommand.java
  4. 12
      src/main/resources/messages.yml

@ -45,6 +45,7 @@ import xyz.soukup.ecoCraftCore.positionMarker.MarkerEvent;
import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.messages.Messages; import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.shop.ShopLogic; import xyz.soukup.ecoCraftCore.shop.ShopLogic;
import xyz.soukup.ecoCraftCore.sign.SignEditCommand;
import xyz.soukup.ecoCraftCore.virtualChest.VirtualChestLogic; import xyz.soukup.ecoCraftCore.virtualChest.VirtualChestLogic;
import java.io.IOException; import java.io.IOException;
@ -284,6 +285,7 @@ public final class EcoCraftCore extends JavaPlugin {
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MarkerCommand.getCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MarkerCommand.getCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MoneyCommand.getCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MoneyCommand.getCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MineCommand.createCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MineCommand.createCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(SignEditCommand.getCommand().build()));
} }
private void registerEvents(){ private void registerEvents(){

@ -7,6 +7,7 @@ import org.bukkit.block.sign.Side;
import org.bukkit.block.sign.SignSide; import org.bukkit.block.sign.SignSide;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.utilities.Converter; import xyz.soukup.ecoCraftCore.utilities.Converter;
@ -149,6 +150,11 @@ public class Shop {
public void writeIntoSign(Sign sign){ public void writeIntoSign(Sign sign){
PDC.set(sign, "shop", this.id); PDC.set(sign, "shop", this.id);
if (PDC.getUniversal(sign, "line1", PersistentDataType.STRING) != null){
sign.update();
return;
}
Component prices; Component prices;
Component shopType; Component shopType;

@ -5,11 +5,13 @@ import com.mojang.brigadier.context.CommandContext;
import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands; import io.papermc.paper.command.brigadier.Commands;
import io.papermc.paper.dialog.Dialog; import io.papermc.paper.dialog.Dialog;
import io.papermc.paper.dialog.DialogResponseView;
import io.papermc.paper.registry.data.dialog.ActionButton; import io.papermc.paper.registry.data.dialog.ActionButton;
import io.papermc.paper.registry.data.dialog.DialogBase; import io.papermc.paper.registry.data.dialog.DialogBase;
import io.papermc.paper.registry.data.dialog.action.DialogAction; import io.papermc.paper.registry.data.dialog.action.DialogAction;
import io.papermc.paper.registry.data.dialog.input.DialogInput; import io.papermc.paper.registry.data.dialog.input.DialogInput;
import io.papermc.paper.registry.data.dialog.type.DialogType; import io.papermc.paper.registry.data.dialog.type.DialogType;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickCallback; import net.kyori.adventure.text.event.ClickCallback;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
@ -20,14 +22,22 @@ import org.bukkit.block.Sign;
import org.bukkit.block.sign.Side; import org.bukkit.block.sign.Side;
import org.bukkit.block.sign.SignSide; import org.bukkit.block.sign.SignSide;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataType;
import xyz.soukup.ecoCraftCore.database.objects.Shop; import xyz.soukup.ecoCraftCore.database.objects.Shop;
import xyz.soukup.ecoCraftCore.messages.Messages; import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.regions.RegionManager; import xyz.soukup.ecoCraftCore.regions.RegionManager;
import xyz.soukup.ecoCraftCore.utilities.PDC;
import javax.sound.sampled.Line;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
public class SignEditCommand { public class SignEditCommand {
private static final HashMap<Player, List<String>> clipBoard = new HashMap<>();
public static LiteralArgumentBuilder<CommandSourceStack> getCommand(){ public static LiteralArgumentBuilder<CommandSourceStack> getCommand(){
return Commands.literal("edit-sign") return Commands.literal("edit-sign")
.requires(source -> source.getSender() instanceof Player) .requires(source -> source.getSender() instanceof Player)
@ -51,49 +61,127 @@ public class SignEditCommand {
return 1; return 1;
} }
Dialog dialog = buildEditDialog(sign, player, null);
player.showDialog(dialog);
return 0; return 0;
} }
@SuppressWarnings("UnstableApiUsage")
public static Dialog buildEditDialog(Sign sign){
SignSide signSide = sign.getSide(Side.FRONT); public static Dialog buildEditDialog(Sign sign, Player player, List<String> lines){
List<Component> lines = signSide.lines();
MiniMessage miniMessage = MiniMessage.miniMessage(); if (lines == null){
lines = getLines(sign);
}
List<ActionButton> actionButtons = new ArrayList<>(); List<ActionButton> actionButtons = new ArrayList<>();
actionButtons.add(ActionButton.builder(Messages.get("gui.shop-edit.button.confirm"))
.action(DialogAction.customClick(
(view, audience) -> {audience.closeDialog();}, actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.copy"))
ClickCallback.Options.builder().build() .action(DialogAction.customClick((view, audience) -> copySignText(view, player, sign), ClickCallback.Options.builder().build()))
)) .build());
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.paste"))
.action(DialogAction.customClick((view, audience) -> pasteSignText(sign, player), ClickCallback.Options.builder().build()))
.build());
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.confirm"))
.action(DialogAction.customClick((view, audience) -> editSign(view, sign, player), ClickCallback.Options.builder().build()))
.build());
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.cancel"))
.action(DialogAction.customClick((view, audience) -> audience.closeDialog(), ClickCallback.Options.builder().build()))
.build()); .build());
List<String> finalLines = lines;
return Dialog.create(builder -> builder.empty() return Dialog.create(builder -> builder.empty()
.base(DialogBase.builder(Messages.get("gui.shop-edit.title")) .base(DialogBase.builder(Messages.get("gui.sign-edit.title"))
.inputs(List.of( .inputs(List.of(
DialogInput.text("line1", Messages.get("gui.sign-edit.inputs.line1")) DialogInput.text("line1", Messages.get("gui.sign-edit.inputs.line1"))
.initial(miniMessage.serialize(lines.getFirst())) .initial(finalLines.getFirst())
.maxLength(256)
.build(), .build(),
DialogInput.text("line2", Messages.get("gui.sign-edit.inputs.line2")) DialogInput.text("line2", Messages.get("gui.sign-edit.inputs.line2"))
.initial(miniMessage.serialize(lines.get(1))) .initial(finalLines.get(1))
.maxLength(256)
.build(), .build(),
DialogInput.text("line3", Messages.get("gui.sign-edit.inputs.line3")) DialogInput.text("line3", Messages.get("gui.sign-edit.inputs.line3"))
.initial(miniMessage.serialize(lines.get(2))) .initial(finalLines.get(2))
.maxLength(256)
.build(), .build(),
DialogInput.text("line4", Messages.get("gui.sign-edit.inputs.line4")) DialogInput.text("line4", Messages.get("gui.sign-edit.inputs.line4"))
.initial(miniMessage.serialize(lines.get(3))) .initial(finalLines.get(3))
.maxLength(256)
.build() .build()
)) ))
.build()) .build())
.type(DialogType.multiAction(actionButtons).build()) .type(DialogType.multiAction(actionButtons).build())
); );
} }
private static List<String> getLines(Sign sign){
List<String> lines = new ArrayList<>();
if (PDC.getUniversal(sign, "line1", PersistentDataType.STRING) != null){
for (int i = 1; i<5; i++){
lines.add((String) PDC.getUniversal(sign, "line" + i,PersistentDataType.STRING));
}
return lines;
}
SignSide signSide = sign.getSide(Side.FRONT);
List<Component> componentLines = signSide.lines();
for (Component componentLine : componentLines){
lines.add(MiniMessage.miniMessage().serialize(componentLine));
}
return lines;
}
private static void copySignText(DialogResponseView view, Player player, Sign sign){
List<String> lines = new ArrayList<>();
lines.add(view.getText("line1"));
lines.add(view.getText("line2"));
lines.add(view.getText("line3"));
lines.add(view.getText("line4"));
clipBoard.put(player, lines);
Messages.send(player, "gui.sign-edit.success.copied");
pasteSignText(sign, player);
}
private static void pasteSignText(Sign sign, Player player){
Dialog dialog = buildEditDialog(sign, player, clipBoard.get(player));
player.showDialog(dialog);
}
private static void editSign(DialogResponseView view, Sign sign, Audience audience){
MiniMessage mm = MiniMessage.miniMessage();
SignSide signSide = sign.getSide(Side.FRONT);
List<Component> lines = new ArrayList<>();
for (int i = 1; i < 5; i++) {
String key = "line" + i;
String line = view.getText(key);
if (line == null){
line = "";
}
PDC.setUniversal(sign, key, line, PersistentDataType.STRING);
signSide.line(i-1, mm.deserialize(line));
}
sign.update();
}
} }

@ -74,15 +74,19 @@ gui:
sign-edit: sign-edit:
title: "<green><bold>Editace Cedulky" title: "<green><bold>Editace Cedulky"
inputs: inputs:
line1: "<yellow>1. řádek" line1: "<yellow>1. Linka"
line2: "<yellow>2. řádek" line2: "<yellow>2. Linka"
line3: "<yellow>3. řádek" line3: "<yellow>3. Linka"
line4: "<yellow>4. řádek" line4: "<yellow>4. Linka"
glow: "<yellow>Zvíraznit text"
buttons: buttons:
confirm: "<green>Potvrdit" confirm: "<green>Potvrdit"
cancel: "<red>Zrušit" cancel: "<red>Zrušit"
copy: "<yellow>Kopírovat" copy: "<yellow>Kopírovat"
paste: "<yellow>Vložit" paste: "<yellow>Vložit"
success:
copied: "<green>Obsah cedulky zkopírován!"
pasted: "<green>Obsah cedulky vložen!"
shop-edit: shop-edit:
title: "<green><bold>Editace Obchodu" title: "<green><bold>Editace Obchodu"
inputs: inputs:

Loading…
Cancel
Save