Gutyerrez Postado Setembro 18, 2016 Autor Denunciar Compartilhar Postado Setembro 18, 2016 ta dando 1 erro de x1 pedente ser cancelado '-' Link para o comentário Compartilhar em outros sites More sharing options...
NotSafeForWork Postado Setembro 18, 2016 Denunciar Compartilhar Postado Setembro 18, 2016 ta dando 1 erro de x1 pedente ser cancelado '-' Isso acontece se demorar mais de 15 segundos para aceitar o X1. Te adicionei no Skype. Link para o comentário Compartilhar em outros sites More sharing options...
NotSafeForWork Postado Setembro 18, 2016 Denunciar Compartilhar Postado Setembro 18, 2016 (editado) Plugin básico, conforme solicitado. Source code abaixo para quem tiver interesse em modificar. X1.java: package notsafeforwork.x1; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.plugin.java.JavaPlugin; import lombok.AccessLevel; import lombok.Getter; import lombok.NonNull; public class X1 extends JavaPlugin implements Listener { @Getter(AccessLevel.PACKAGE) private static X1 x1; @Getter(AccessLevel.PACKAGE) private Location x1Pos1; @Getter(AccessLevel.PACKAGE) private Location x1Pos2; @Getter(AccessLevel.PACKAGE) private Location x1Exit; @Getter(AccessLevel.PACKAGE) private Location x1Wait; @Override public void onEnable() { x1 = this; for (Messages messages : Messages.values()) { getConfig().set("messages." + messages.name(), getConfig().get("messages." + messages.name(), messages.getMessage())); messages.setMessage(getConfig().getString("messages." + messages.name())); } saveConfig(); x1Pos1 = fromString(getConfig().getString("locations.x1Pos1")); x1Pos2 = fromString(getConfig().getString("locations.x1Pos2")); x1Exit = fromString(getConfig().getString("locations.x1Exit")); x1Wait = fromString(getConfig().getString("locations.x1Wait")); Bukkit.getPluginManager().registerEvents(this, this); } @EventHandler public void onPlayerDeathEvent(PlayerDeathEvent event) { X1Data x1Data = X1Data.get(event.getEntity()); if (x1Data != null && x1Data.isRunning()) { Player winner = event.getEntity().getName().equals(x1Data.getPlayer1().getName()) ? x1Data.getPlayer2() : x1Data.getPlayer1(); x1Data.cancelX1(winner); } } @EventHandler public void onPlayerQuitEvent(PlayerQuitEvent event) { X1Data x1Data = X1Data.get(event.getPlayer()); if (x1Data != null) { if (x1Data.isRunning()) { Player winner = event.getPlayer().getName().equals(x1Data.getPlayer1().getName()) ? x1Data.getPlayer2() : x1Data.getPlayer1(); x1Data.cancelX1(winner); return; } x1Data.cancelX1(null); } } @EventHandler(ignoreCancelled = true) public void onPlayerTeleportEvent(PlayerTeleportEvent event) { X1Data x1Data = X1Data.get(event.getPlayer()); if (x1Data != null && x1Data.isRunning() && !x1Data.isTeleportEnabled()) { Player winner = event.getPlayer().getName().equals(x1Data.getPlayer1().getName()) ? x1Data.getPlayer2() : x1Data.getPlayer1(); x1Data.cancelX1(winner); } } @Override public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(Messages.ONLY_PLAYERS.getMessage()); return false; } Player player = (Player) sender; if (args.length == 0) { if (player.hasPermission("notsafeforwork.x1admin")) { player.sendMessage("§cUtilize /" + commandLabel + " <setPos1 | setPos2 | setExit | setWait>"); } player.sendMessage("§cUtilize /" + commandLabel + " <aceitar | desafiar>"); return false; } if (player.hasPermission("notsafeforwork.x1admin")) { if (args[0].equalsIgnoreCase("setPos1")) { x1Pos1 = player.getLocation(); getConfig().set("locations.x1Pos1", locationToString(player.getLocation())); saveConfig(); player.sendMessage("§aFeito."); return true; } if (args[0].equalsIgnoreCase("setPos2")) { x1Pos2 = player.getLocation(); getConfig().set("locations.x1Pos2", locationToString(player.getLocation())); saveConfig(); player.sendMessage("§aFeito."); return true; } if (args[0].equalsIgnoreCase("setWait")) { x1Wait = player.getLocation(); getConfig().set("locations.x1Wait", locationToString(player.getLocation())); saveConfig(); player.sendMessage("§aFeito."); return true; } if (args[0].equalsIgnoreCase("setExit")) { x1Exit = player.getLocation(); getConfig().set("locations.x1Exit", locationToString(player.getLocation())); saveConfig(); player.sendMessage("§aFeito."); return true; } } if (args[0].equalsIgnoreCase("aceitar") || args[0].equalsIgnoreCase("desafiar")) { if (getX1Pos1() == null || getX1Pos2() == null || getX1Exit() == null || getX1Wait() == null) { player.sendMessage(Messages.NOT_OPERATIONAL.getMessage()); return false; } if (args.length != 2) { player.sendMessage("§cUtilize /" + commandLabel + " " + args[0] + " <nick>"); return false; } Player target = Bukkit.getPlayer(args[1]); if (target == null) { player.sendMessage(Messages.PLAYER_NOT_FOUND.getMessage().replace("$targetName", args[1])); return false; } if (args[0].equalsIgnoreCase("aceitar")) { X1Data x1Data = X1Data.get(player); if (x1Data == null || !x1Data.isMember(target)) { player.sendMessage(Messages.X1_NOT_FOUND.getMessage().replace("$targetName", target.getName())); return false; } player.sendMessage(Messages.X1_WAITING_QUEUE.getMessage()); target.sendMessage(Messages.X1_WAITING_QUEUE.getMessage()); x1Data.setTeleportEnabled(true); player.teleport(x1Wait); target.teleport(x1Wait); x1Data.setTeleportEnabled(false); X1Data.next(); return true; } if (args[0].equalsIgnoreCase("desafiar")) { if (X1Data.get(player) != null) { player.sendMessage(Messages.PLAYER_IS_IN_X1.getMessage()); return false; } if (X1Data.get(target) != null) { player.sendMessage(Messages.TARGET_IS_IN_X1.getMessage().replace("$targetName", args[1])); return false; } X1Data x1Data = new X1Data(player, target); x1Data.register(); return true; } return false; } Bukkit.dispatchCommand(sender, commandLabel); return true; } public String locationToString(@NonNull Location location) { return String.format("%s;%s;%s;%s;%s;%s", location.getWorld().getName(), location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); } private Location fromString(String str) { try { String[] location = str.split(";"); String worldName = location[0]; double x = Double.parseDouble(location[1]); double y = Double.parseDouble(location[2]); double z = Double.parseDouble(location[3]); float yaw = Float.parseFloat(location[4]); float pitch = Float.parseFloat(location[5]); return new Location(Bukkit.getWorld(worldName), x, y, z, yaw, pitch); } catch (Exception e) { return null; } } enum Messages { ONLY_PLAYERS("&cEste comando só pode ser utilizado por jogadores."), NOT_OPERATIONAL("&cO X1 ainda não está configurado, avise um admin!"), PLAYER_NOT_FOUND("&c$targetName não está online no momento."), X1_NOT_FOUND("&cVocê não tem um desafio de X1 pendente com $targetName."), PLAYER_IS_IN_X1("&cVocê já tem um desafio de X1 pendente."), TARGET_IS_IN_X1("&c$targetName já está em um desafio X1."), INVITE_1("&cVocê convidou $targetName para um X1"), INVITE_2("&cVocê foi convidado para um X1 por $playerName, digite /x1 aceitar $playerName para continuar."), X1_CANCELLED("&cO X1 pendente foi cancelado."), X1_STARTED("&aValendo!"), X1_WAITING_QUEUE("Aguardando fila.."), WIN("&c$playerName venceu o X1!"); private String message; private Messages(String message) { this.message = message; } public String getMessage() { return ChatColor.translateAlternateColorCodes('&', message); } public void setMessage(String message) { this.message = message; } } } X1Data.java package notsafeforwork.x1; import java.util.ArrayList; import java.util.List; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import lombok.AccessLevel; import lombok.Getter; import lombok.NonNull; import lombok.Setter; public class X1Data { private static List<X1Data> data = new ArrayList<X1Data>(); @Getter(AccessLevel.PACKAGE) private static X1Data running = null; @Getter(AccessLevel.PACKAGE) private Player player1; @Getter(AccessLevel.PACKAGE) private Player player2; @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private boolean teleportEnabled; public static X1Data get(@NonNull Player player) { for (X1Data data : data) { if (data.player1.getName().equals(player.getName()) || data.player2.getName().equals(player.getName())) { return data; } } return null; } public X1Data(@NonNull Player player1, @NonNull Player player2) { this.player1 = player1; this.player2 = player2; } public static void next() { if (getRunning() == null && !data.isEmpty()) { data.get(0).start(); } } public void register() { if (!bothOnline()) { return; } data.add(this); player1.sendMessage(X1.Messages.INVITE_1.getMessage().replace("$targetName", player2.getName())); player2.sendMessage(X1.Messages.INVITE_2.getMessage().replace("$playerName", player1.getName())); new BukkitRunnable() { @Override public void run() { if (!isRunning() && isRegistered()) { cancelX1(null); } } }.runTaskLater(X1.getX1(), 20 * 15); } public void cancelX1(Player winner) { data.remove(this); running = null; next(); if (player1.isOnline()) { if (winner == null) { player1.sendMessage(X1.Messages.X1_CANCELLED.getMessage()); } else { player1.sendMessage(X1.Messages.WIN.getMessage().replace("$playerName", winner.getName())); } player1.teleport(X1.getX1().getX1Exit()); } if (player2.isOnline()) { if (winner == null) { player2.sendMessage(X1.Messages.X1_CANCELLED.getMessage()); } else { player2.sendMessage(X1.Messages.WIN.getMessage().replace("$playerName", winner.getName())); } player2.teleport(X1.getX1().getX1Exit()); } } private void start() { if (!bothOnline()) { cancelX1(null); return; } running = this; teleportEnabled = true; player1.teleport(X1.getX1().getX1Pos1()); player2.teleport(X1.getX1().getX1Pos2()); teleportEnabled = false; player1.sendMessage(X1.Messages.X1_STARTED.getMessage()); player2.sendMessage(X1.Messages.X1_STARTED.getMessage()); } public boolean isMember(@NonNull Player player) { return player1.getName().equals(player.getName()) || player2.getName().equals(player.getName()); } public boolean isRegistered() { return data.contains(this); } public boolean isRunning() { return running != null && running.equals(this); } private boolean bothOnline() { return player1.isOnline() && player2.isOnline(); } } plugin.yml: name: X1-NOTSAFEFORWORK version: 0.1 main: notsafeforwork.x1.X1 commands: x1: Editado Setembro 18, 2016 por NotSafeForWork Link para o comentário Compartilhar em outros sites More sharing options...
Gutyerrez Postado Setembro 18, 2016 Autor Denunciar Compartilhar Postado Setembro 18, 2016 Isso acontece se demorar mais de 15 segundos para aceitar o X1. Te adicionei no Skype. Quando entrar chama lá Link para o comentário Compartilhar em outros sites More sharing options...
Gutyerrez Postado Setembro 19, 2016 Autor Denunciar Compartilhar Postado Setembro 19, 2016 Bump Link para o comentário Compartilhar em outros sites More sharing options...
Gutyerrez Postado Setembro 21, 2016 Autor Denunciar Compartilhar Postado Setembro 21, 2016 Bump Link para o comentário Compartilhar em outros sites More sharing options...
Gutyerrez Postado Setembro 25, 2016 Autor Denunciar Compartilhar Postado Setembro 25, 2016 Não precisa mais, pode fechar Obrigado a todos que ajudaram ^-^ Link para o comentário Compartilhar em outros sites More sharing options...
Guest born95 Postado Setembro 26, 2016 Denunciar Compartilhar Postado Setembro 26, 2016 Seu pedido foi marcado como [Entregue] e movido à área de pedidos entregues. Atenciosamente, Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados