- 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.messages.Messages;
import xyz.soukup.ecoCraftCore.shop.ShopLogic;
import xyz.soukup.ecoCraftCore.sign.SignEditCommand;
import xyz.soukup.ecoCraftCore.virtualChest.VirtualChestLogic;
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(MoneyCommand.getCommand().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(){

@ -7,6 +7,7 @@ import org.bukkit.block.sign.Side;
import org.bukkit.block.sign.SignSide;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.utilities.Converter;
@ -149,6 +150,11 @@ public class Shop {
public void writeIntoSign(Sign sign){
PDC.set(sign, "shop", this.id);
if (PDC.getUniversal(sign, "line1", PersistentDataType.STRING) != null){
sign.update();
return;
}
Component prices;
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.Commands;
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.DialogBase;
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.type.DialogType;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickCallback;
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.SignSide;
import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataType;
import xyz.soukup.ecoCraftCore.database.objects.Shop;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.regions.RegionManager;
import xyz.soukup.ecoCraftCore.utilities.PDC;
import javax.sound.sampled.Line;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class SignEditCommand {
private static final HashMap<Player, List<String>> clipBoard = new HashMap<>();
public static LiteralArgumentBuilder<CommandSourceStack> getCommand(){
return Commands.literal("edit-sign")
.requires(source -> source.getSender() instanceof Player)
@ -51,49 +61,127 @@ public class SignEditCommand {
return 1;
}
Dialog dialog = buildEditDialog(sign, player, null);
player.showDialog(dialog);
return 0;
}
@SuppressWarnings("UnstableApiUsage")
public static Dialog buildEditDialog(Sign sign){
SignSide signSide = sign.getSide(Side.FRONT);
List<Component> lines = signSide.lines();
MiniMessage miniMessage = MiniMessage.miniMessage();
public static Dialog buildEditDialog(Sign sign, Player player, List<String> lines){
if (lines == null){
lines = getLines(sign);
}
List<ActionButton> actionButtons = new ArrayList<>();
actionButtons.add(ActionButton.builder(Messages.get("gui.shop-edit.button.confirm"))
.action(DialogAction.customClick(
(view, audience) -> {audience.closeDialog();},
ClickCallback.Options.builder().build()
))
actionButtons.add(ActionButton.builder(Messages.get("gui.sign-edit.buttons.copy"))
.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());
List<String> finalLines = lines;
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(
DialogInput.text("line1", Messages.get("gui.sign-edit.inputs.line1"))
.initial(miniMessage.serialize(lines.getFirst()))
.initial(finalLines.getFirst())
.maxLength(256)
.build(),
DialogInput.text("line2", Messages.get("gui.sign-edit.inputs.line2"))
.initial(miniMessage.serialize(lines.get(1)))
.initial(finalLines.get(1))
.maxLength(256)
.build(),
DialogInput.text("line3", Messages.get("gui.sign-edit.inputs.line3"))
.initial(miniMessage.serialize(lines.get(2)))
.initial(finalLines.get(2))
.maxLength(256)
.build(),
DialogInput.text("line4", Messages.get("gui.sign-edit.inputs.line4"))
.initial(miniMessage.serialize(lines.get(3)))
.initial(finalLines.get(3))
.maxLength(256)
.build()
))
.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:
title: "<green><bold>Editace Cedulky"
inputs:
line1: "<yellow>1. řádek"
line2: "<yellow>2. řádek"
line3: "<yellow>3. řádek"
line4: "<yellow>4. řádek"
line1: "<yellow>1. Linka"
line2: "<yellow>2. Linka"
line3: "<yellow>3. Linka"
line4: "<yellow>4. Linka"
glow: "<yellow>Zvíraznit text"
buttons:
confirm: "<green>Potvrdit"
cancel: "<red>Zrušit"
copy: "<yellow>Kopírovat"
paste: "<yellow>Vložit"
success:
copied: "<green>Obsah cedulky zkopírován!"
pasted: "<green>Obsah cedulky vložen!"
shop-edit:
title: "<green><bold>Editace Obchodu"
inputs:

Loading…
Cancel
Save