java - Bukkit插件: Blank sign

标签 java plugins minecraft bukkit

我正在尝试制作插件,它允许您复制符号。将文本复制到我的变量中是可以的,但问题是将其粘贴到另一个标志上。我读了很多文章,所以我尝试在 SignChange 上执行延迟任务,但仍然不起作用:/这是我的代码:

public class Core extends JavaPlugin implements Listener {

    private boolean enabled = false;
    private boolean copyMode = false;

    private String l1;
    private String l2;
    private String l3;
    private String l4;

    public void onEnable() {
        getLogger().info("Plugin SignCopyReloaded was successfully enabled!");
        getServer().getPluginManager().registerEvents(this, this);
    }

    public void onDisable() {
        getLogger().info("Plugin SignCopyReloaded was successfully disabled!");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String lavel, String[] args) {
        if(cmd.getName().equalsIgnoreCase("sc") && sender instanceof Player) {
            if(sender.hasPermission("sc.use")) {
                if(args.length > 0) {
                    switch (args[0]) {
                        case "enable":  enabled = true;
                                        sender.sendMessage(ChatColor.GREEN + "Enabled");
                                        break;
                        case "disable": enabled = false;
                                        sender.sendMessage(ChatColor.GREEN + "Disabled");
                                        break;
                        case "copy":    copyMode = true;
                                        enabled = true;
                                        sender.sendMessage(ChatColor.GREEN + "Copy mode enabled");
                                        break;
                    }
                } else {
                    sender.sendMessage(ChatColor.RED + "Usage: /sc enable/disable. When enabled, then use /sc copy and right click the sign you want to copy. Then right click anywhere you want to paste. To copy a new sign type /sc copy again.");
                }
            } else {
                sender.sendMessage(ChatColor.RED + "You must have permission sc.use!");
            }
        } else {
            sender.sendMessage(ChatColor.RED + "Only player can use this command!");
        }
    return true;
    }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK && enabled == true) {
            if(event.getClickedBlock().getState() instanceof Sign) {
                if(copyMode == true) {
                    Sign sign = (Sign) event.getClickedBlock().getState();
                    l1 = sign.getLine(0);
                    l2 = sign.getLine(1);
                    l3 = sign.getLine(2);
                    l4 = sign.getLine(3);
                    copyMode = false;
                    event.getPlayer().sendMessage(ChatColor.GREEN + "Copy mode disabled. Now rightclick on blank sign.");
                } else {
                    Sign sign = (Sign) event.getClickedBlock().getState();
                    sign.setLine(0, l1);
                    sign.setLine(1, "Ahoj");
                    sign.setLine(2, l3);
                    sign.setLine(3, l4);
                    sign.update(true);
                }
            }
        }
    }

     @EventHandler
        public void onSignChange(SignChangeEvent event) {
             if(enabled == true) {
                 Sign sign = (Sign) event.getBlock().getState();
                    event.setCancelled(true);
                    Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                        @Override
                        public void run() {
                            sign.setLine(0, l1);
                            sign.setLine(1, "Ahoj");
                            sign.setLine(2, l3);
                            sign.setLine(3, l4);
                            sign.update(true);
                        }
                    });
             }
     }
}

最佳答案

只需使用SignChangeEvent的setLine方法

例如 event.setLine(0,l1); 用于更改第一行。

这是 javadoc 引用: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/block/SignChangeEvent.html#setLine(int,%20java.lang.String)

关于java - Bukkit插件: Blank sign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38678874/

相关文章:

java - QR 的 ESC/POS 命令仅打印内容

javascript - 可切换的单选按钮

java - Craftbukkit 玩家计数消息插件编码错误

java - Bukkit 命令重复自身?

java - 检查Java中是否加载了包(API)

java - 如何通过关键变量 thymeleaf 从模型获取模型图

java - 使用 fragment 中的自定义适配器和自定义行过滤 ListView

java - 如何在 Android 应用程序中获取包内的文件

plugins - cypress 中缺少 Integration 和 Plugin 文件夹

java - 如何为 Eclipse 编写插件?