mirror of
https://github.com/YouHaveTrouble/Stand-in.git
synced 2026-05-12 06:26:56 +00:00
exploring dialogs a bit
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package me.youhavetrouble.standin;
|
||||
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public final class StandIn extends JavaPlugin {
|
||||
|
||||
public static final NamespacedKey KEY = new NamespacedKey("stand-in", "stand-in");
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
// Plugin startup logic
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
// Plugin shutdown logic
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package me.youhavetrouble.standin;
|
||||
|
||||
import io.papermc.paper.dialog.Dialog;
|
||||
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.text.Component;
|
||||
import net.kyori.adventure.text.event.ClickCallback;
|
||||
import net.kyori.adventure.util.TriState;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public class StandinDialog {
|
||||
|
||||
public static void openArmorStandDialog(@NotNull Player player, @NotNull ArmorStand armorStand) {
|
||||
|
||||
if (armorStand.isDead()) return;
|
||||
|
||||
UUID armorStandId = armorStand.getUniqueId();
|
||||
|
||||
List<DialogInput> inputs = new ArrayList<>();
|
||||
|
||||
inputs.add(
|
||||
DialogInput.text("name", Component.text("Display name"))
|
||||
.labelVisible(true)
|
||||
.build()
|
||||
);
|
||||
inputs.add(
|
||||
DialogInput.bool("invisible", Component.text("Invisible"))
|
||||
.initial(armorStand.isInvisible())
|
||||
.build()
|
||||
);
|
||||
|
||||
inputs.add(
|
||||
DialogInput.bool("onFire", Component.text("On fire"))
|
||||
.initial(Boolean.TRUE.equals(armorStand.getVisualFire().toBoolean()))
|
||||
.build()
|
||||
);
|
||||
|
||||
ActionButton saveButton = ActionButton.builder(Component.text("Save")).action(
|
||||
DialogAction.customClick((view, audience) -> {
|
||||
if (!(audience instanceof Player callbackPlayer)) return;
|
||||
Entity entity = callbackPlayer.getWorld().getEntity(armorStandId);
|
||||
if (!(entity instanceof ArmorStand stand)) return;
|
||||
if (stand.isDead()) return;
|
||||
stand.setInvisible(Boolean.TRUE.equals(view.getBoolean("invisible")));
|
||||
stand.setVisualFire(TriState.byBoolean(Boolean.TRUE.equals(view.getBoolean("onFire"))));
|
||||
}, ClickCallback.Options.builder().lifetime(Duration.ofHours(1)).uses(1).build())
|
||||
).build();
|
||||
|
||||
Dialog dialog = Dialog.create(builder -> builder.empty()
|
||||
.base(
|
||||
DialogBase.builder(Component.text("Armor Stand Editor"))
|
||||
.inputs(inputs)
|
||||
.build())
|
||||
.type(DialogType.confirmation(saveButton, ActionButton.builder(Component.text("Cancel")).build()))
|
||||
);
|
||||
|
||||
player.showDialog(dialog);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
name: Stand-in
|
||||
version: '1.0-SNAPSHOT'
|
||||
main: me.youhavetrouble.standin.StandIn
|
||||
api-version: '1.21.7'
|
||||
Reference in New Issue
Block a user