Teletransporte
No tutorial anterior aprendemos a criar um broadcast/anuncio, desta vez iremos fazer um plugin de teletransporte,com o intuito de demonstrar o uso de mais de um argumento em um comando.
Estarei começando com os códigos,é mais para baixo irei explicar como funciona,não estarei montando a estrutura básica do plugin,pois é bem básico e já foi ensinado nos tópicos anteriores.
Começando direto no onCommand:
@Override
public boolean onCommand(CommandSender sender, Command command,
String label, String[] args) {
// Especificando que somente jogadores podem usar o comando
if(sender instanceof Player){
Player jogador = (Player) sender;
}
return false;
}
Primeiro acontecimento: O jogador que usou o comando (sender) seguindo um jogador qualquer.
Player jogador = (Player) sender;
if(label.equalsIgnoreCase("tele")){
// Caso o sender nao escreva nenhum argumento alem do "tele"
if(args.length == 0) {
jogador.sendMessage(ChatColor.RED + "Comando incompleto. Digite:");
jogador.sendMessage(ChatColor.YELLOW + "/tele <jogadorAlvo>");
jogador.sendMessage(ChatColor.RED + " ou");
jogador.sendMessage(ChatColor.YELLOW + "/tele <jogador> <jogadorAlvo>");
}
// O sender escreveu somente o nome do jogador para qual ele deseja se teletransportar
if(args.length == 1){
// Se o jogador Alvo existir
if(getServer().getPlayerExact(args[0]) != null){
// Definindo o jogadorAlvo
Player jogadorAlvo = getServer().getPlayer(args[0]);
// Teletransportando o sender ate o jogador alvo
jogador.teleport(jogadorAlvo);
// Mensagem para o sender que se teletransportou ate o jogadorAlvo
jogador.sendMessage(ChatColor.AQUA + "Voce foi teletransportado ate " + args[0]);
// Mensagem para o jogadorAlvo avisando que o sender foi teletransportado ate ele
jogadorAlvo.sendMessage(ChatColor.GREEN + jogador.getName() + " foi teletransportado ate voce!");
} else {
// Mensagem caso o jogadorAlvo nao seja encontrado
jogador.sendMessage(ChatColor.RED + args[0] + ChatColor.YELLOW + " nao foi encontrado!");
}
}
Segundo acontecimento: O jogador que usou o comando (sender) teletransportando um jogador qualquer para outro jogador alvo
if(args.length == 2){
// Verificando se os jogadores escolhidos estao online
if(getServer().getPlayerExact(args[0]) != null){
if(getServer().getPlayerExact(args[1]) != null){
// Definindo o jogador que sera teletransportado
Player jogadorAlvo = getServer().getPlayer(args[0]);
// Definindo o jogadorAlvo
Player jogadorAlvo2 = getServer().getPlayer(args[1]);
// Teletransportando o jogadorAlvo ate o jogadorAlvo2
jogadorAlvo.teleport(jogadorAlvo2);
// Mensagens
jogador.sendMessage(ChatColor.AQUA + "Voce teletransportou " + args[0] + " ate " + args[1]);
jogadorAlvo.sendMessage(ChatColor.AQUA + "Voce foi teletransportado ate " + args[1]);
jogadorAlvo2.sendMessage(ChatColor.GREEN + args[0] + " foi teletransportado ate voce!");
} else {
// Se o jogadorAlvo2 nao for encontrado
jogador.sendMessage(ChatColor.RED + args[1] + ChatColor.YELLOW + " nao foi encontrado!");
}
} else {
// Se o jogadorAlvo nao for encontrado
jogador.sendMessage(ChatColor.RED + args[0] + ChatColor.YELLOW + " nao foi encontrado!");
}
}
Resultado Final:
package com.wheeze.Tutorial3;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
}
@Override
public void onDisable() {
}
@SuppressWarnings("deprecation")
@Override
public boolean onCommand(CommandSender sender, Command command,
String label, String[] args) {
if(sender instanceof Player){
Player jogador = (Player) sender;
if(label.equalsIgnoreCase("tele")){
if(args.length == 0) {
jogador.sendMessage(ChatColor.RED + "Comando incompleto. Digite:");
jogador.sendMessage(ChatColor.YELLOW + "/tele <jogadorAlvo>");
jogador.sendMessage(ChatColor.RED + " ou");
jogador.sendMessage(ChatColor.YELLOW + "/tele <jogador> <jogadorAlvo>");
}
if(args.length == 1){
if(getServer().getPlayerExact(args[0]) != null){
Player jogadorAlvo = getServer().getPlayer(args[0]);
jogador.teleport(jogadorAlvo);
jogador.sendMessage(ChatColor.AQUA + "Voce foi teletransportado ate " + args[0]);
jogadorAlvo.sendMessage(ChatColor.GREEN + jogador.getName() + " foi teletransportado ate voce!");
} else {
jogador.sendMessage(ChatColor.RED + args[0] + ChatColor.YELLOW + " nao foi encontrado!");
}
}
if(args.length == 2){
if(getServer().getPlayerExact(args[0]) != null){
if(getServer().getPlayerExact(args[1]) != null){
Player jogadorAlvo = getServer().getPlayer(args[0]);
Player jogadorAlvo2 = getServer().getPlayer(args[1]);
jogadorAlvo.teleport(jogadorAlvo2);
jogador.sendMessage(ChatColor.AQUA + "Voce teletransportou " + args[0] + " ate " + args[1]);
jogadorAlvo.sendMessage(ChatColor.AQUA + "Voce foi teletransportado ate " + args[1]);
jogadorAlvo2.sendMessage(ChatColor.GREEN + args[0] + " foi teletransportado ate voce!");
} else {
jogador.sendMessage(ChatColor.RED + args[1] + ChatColor.YELLOW + " nao foi encontrado!");
}
} else {
jogador.sendMessage(ChatColor.RED + args[0] + ChatColor.YELLOW + " nao foi encontrado!");
}
}
}
}
return false;
}
}
Explicando os argumentos:
- No final do onCommand, note que tem um "String[] args";
- Ou seja, cria-se um Array tipo String, cujo nome dei args;
- Tome como base que um Array é um conjunto de elementos;
- E os elementos no caso do onCommand sera as palavras que tem no comando;
- Por isso quando fizemos "args.leght == 0", definimos tamanho do array, que nesse caso será 0, ou seja, só registrará o "tele";
- Quando definimos o Array do tamanho 2(args.leght == 2), o onCommand só ira registrar 2 argumentos(elementos do array) no comando;
- Definido o tamanho do Array, precisamos pegar esses argumentos;
- Vamos fazer isso com o args[0] e args[1];
- O args[0] representa o primeiro elemento do Array;
- Como o Array é do tipo String, o args[0] é o nome do jogador que voce quer teletransportar;
- Já o args[1], é o jogador alvo;
- Como o tamanho do Array é 2, os args[0] e args[1] são os únicos elementos;
Caso o Array foi de tamanho 4, teria args[0], args[1], args[2], args[3];
- Sei que é um pouco confuso de se entender, mas Arrays são assim mesmo, você terá que estudar bastante para compreender melhor;
Espero que tenham entendido o tutorial ,sei que é meio complicado mas se você se esforçar vale a apena tentar ![[IMG]](http://www.minecraftgames.com.br/forum/public/style_emoticons/default/biggrin.png)