1
나는 플러그인을 만들려고합니다. 그 플러그인을 사용하면 서명을 복사 할 수 있습니다. 텍스트를 내 변수에 복사하는 것은 괜찮지 만 문제는 다른 기호에 붙여 넣는 것입니다. 나는 지연 작업 onSignChange을하려고 노력 때문에 많은 기사를 읽을 수 있지만 여전히 작동하지 않은 :Bukkit plugin : 공백 기호
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);
}
});
}
}
}
이벤트가 당신이 – Kerooker
당신이 나를 위해 노력하고 제공하는 예를 일이 원하는 시간에 일어나는 경우 일부 검사가 알 수 있도록 : 여기
는 javadoc의 참조입니다. –동영상이 작동 중임을 보여주는 동영상으로 Spigot 1.8.8에서 테스트했습니다. https://youtu.be/YexNiwhl_tY –