Ir para conteúdo

leonardosc

Membros VIP
  • Total de itens

    2.229
  • Registro em

  • Última visita

Sobre leonardosc

Informações pessoais

  • Sexo
    Outro
  • Localização
    Brazil

Últimos Visitantes

13.690 visualizações
  1. Há vários problemas nesse código... 1: Tire isso: Location cAleatorio = (Location) randomLoc.getWorld(); não faz sentido! Você está tentando converter um MUNDO para uma Localização '-' 2: O retorno dessa chamada de método randomLoc.getWorld().getHighestBlockAt(randomLoc); não está sendo usado em lugar nenhum. Você deve setar o Y do randomLoc para o valor retornado por essa função. Ex: randomLoc.setY(randomLoc.getWorld().getHighestBlockAt(randomLoc).getY()); Senão ela não terá efeito. 3: Tire isso player.teleport(Bukkit.getWorld("minerar").getSpawnLocation()); Não faz sentido também. Você já está teleportando o jogador pra randomLoc, por que teleportar ele pro spawnLocation novamente? 4: O jogador não será teleportado na primeira vez que executar o comando pois na linha 7 você está dizendo que ele só será teleportado caso o metadado tempoMinerar exista, porém, na primeira vez que ele executar o comando, isso não existirá... O mais correto seria verificar se o tempoMinerar existe, e se o delay já expirou antes de chegar na lógica de teleportar. Por exemplo: if (tem o metadado tempoMinerar) { // verifica se o delay já expirou aqui, retorne caso não tenha expirado. } resto da lógica aqui... 5: A lógica do delay está errada. Você precisa verificar tempo (System.currentTimeMillis) atual MENOS o tempo que você salvou no metadado é menor que 1000. Você está apenas pegando o tempo atual e verificando se é menor do que 1000, isso SEMPRE será falso... Isso deve funcionar: @Override public boolean onCommand(CommandSender sender, Command cmd, String clabel, String[] args) { Player player = (Player) sender; if (clabel.equalsIgnoreCase("minerar")) { if (player.hasPermission("mts.minerar")) { // Verifica o delay antes de chegar na lógica do comando if (player.hasMetadata("tempoMinerar")) { System.out.println("Executado parte 4 setmetadata"); long tempoQueFoiExecutado = player.getMetadata("tempoMinerar").get(0).asLong(); long tempo = System.currentTimeMillis() - tempoQueFoiExecutado; System.out.println("Executado parte 5 long tempo"); if (tempo <= 1000) { System.out.println("Executado parte 6 long verificado"); player.sendMessage(ChatColor.GREEN + "Aguarde para usar o comando novamente"); System.out.println("Executado parte 6 tempo igual menor 1000"); return true; } } System.out.println("Executado parte 1"); Random random = new Random(); World world = Bukkit.getWorld("minerar"); int X = 20000; int Z = 20000; int x = random.nextInt(X); int y = 1; int z = random.nextInt(Z); Location randomLoc = new Location(world, x, y, z); randomLoc.setY(randomLoc.getWorld().getHighestBlockAt(randomLoc).getY()); player.teleport(randomLoc); System.out.println("Executado parte 2 random"); player.sendMessage(ChatColor.GREEN + "Teleportado ao Mundo Minerar"); player.sendMessage(ChatColor.GREEN + "Mundo de Mineracao! Aqui voce so podera coletar recursos"); player.sendMessage(ChatColor.GREEN + "Nada que construir aqui e protegido!"); System.out.println("Executado parte 3 teleporte e mensagens"); // Você só deve setar o metadado apenas se ele executar o comando, não antes. player.setMetadata("tempoMinerar", new FixedMetadataValue(plugin, System.currentTimeMillis())); } else { player.sendMessage(ChatColor.RED + "Voce nao tem permissao para isso"); System.out.println("sem permissao"); return true; } } return false; }
  2. @edit Post duplicado. Se algum MOD puder apagar eu agradeço.
  3. Daria na mesma coisa do quê? Pelo que foi informado acima, ele só precisa se comunicar entre os MODS dele (rodando no CLIENTE), não com um servidor e nem entre clientes. Dá pra pensar nesse MOD intermediário como aqueles "COREs/Libs" que alguns usam. A diferença é que esses COREs têm funcionalidades/módulos/'utils' que serão utilizadas pelos plugins do desenvolvedor, e o MOD intermediário seria, a princípio, para guardar dados que seriam compartilhados entre os MODS. Então dá pra fazer algo mais simples ainda: você pode usar o sistema de arquivos. Basta criar um arquivo que será acessado pelos seus MODS.
  4. Não tenho muita experiência com mods, mas talvez você possa usar um mod intermediário, que seja usado como dependência dos seus outros mods. Assim você pode salvar dados (como a ultima vez que a mensagem foi enviada) no mod intermediário e acessá-los a partir dos outros mods. http://www.minecraftforge.net/forum/topic/60566-solved-access-to-other-mods-requirements-1121/
  5. Seriam mods diferentes né...? Quem usaria 10 mods iguais '-' Essa mensagem seria enviada apenas no chat do jogo (da pessoa)?
  6. Os clientes precisam se comunicar entre si ou com um servidor? Você pode ser mais especifico sobre o que deseja fazer? Talvez possamos te ajudar melhor.
  7. leonardosc

    Cache

    Quer um cache bem simples? Para leitura: Pega o dado do jogador do banco de dados quando ele entrar no servidor e salva na memoria. Geralmente, é usado uma HashMap, tendo como chave o identificador do jogador (idealmente é o UUID) e como valor o dado que você deseja 'cachear', pois ela tem um tempo de leitura/escrita, na maioria das vezes, constante (fora que é o que você geralmente precisa em um cache: uma estrutura de dados que mapeie um determinado valor a uma chave.) Para escrita: Você pode simplesmente atualizar o dado no cache (de leitura) e depois executar uma query assincronamente (ou seja, fora da thread principal do servidor) para atualizar o dado no banco de dados.
  8. Foi só analogia com Bukkit ou você vai usar isso em plugins?
  9. Isso vai dar erro se for uma List e você tentar fazer o cast para String. Sabe como eu fiz no meu? Viu aquele @ApplyConverter(ChatColorConverter.class)? Ele que é responsável por dar replace nas cores caso eu queira. Funciona tanto para String quanto para uma lista de strings. É simples, basta verificar o tipo do objeto que está naquele path: - Se for uma string basta usar o ChatColor.translateAlternateColorCodes; - Se for uma lista, basta percorrer os items, verificar se são Strings e fazer a mesma coisa do 1° caso.
  10. Também fiz uma parecida no ultimo PL q fiz. Btw, acho que você quis dizer path (que é o caminho na config) e não patch
  11. Basta salvar o currentTimeMillis de quando o delay iniciou e a duração do delay em milisegundos. Para verificar se o delay expirou é só fazer: (currentTimeMillis que tu salvou) + (delay em milisegundos) < System.currentTimeMillis()
  12. Lá no final, tenta trocar isso flags: use: 63,68 pra isso flags: use: 63,68 pve: true https://github.com/IntellectualSites/PlotSquared/wiki/Usage:-Plot-flags#default-flags
  13. Você precisa chamar o método Run em algum lugar.
  14. Dever ser algo relacionado a sua host. Ela tá recusando a conexão da api (Como pode ver no erro: "Connection refused")...
×
×
  • Criar Novo...