Ir para conteúdo

smgabriel

Membros
  • Total de itens

    227
  • Registro em

  • Última visita

Tudo que smgabriel postou

  1. Valeu :) Eu pensei em fazer em diversos métodos, mas todos teriam um padrão, ou seja, mais simples de criar/registrar, mas nem sempre todos querem manter um padrão. Valeu
  2. Olá, hoje apresento um método de registrar comandos com facilidade. As vantagens da utilização desse método são diversas, como: comando configurável ou não precisar registrar comando em dois, três locais. Esqueceu de registrar o comando? Jamais! Atualizações TÓPICO O Tópico está divido em quatro partes, confira: • CRIANDO COMANDO • REGISTRANDO COMANDOS DE FORMA "AUTOMÁTICA" • Baixando recursos e conferindo documentações • Porquês CRIANDO COMANDO Vamos utilizar a classe Command para criar nosso comando. O primeiro passo é criar uma classe para ser a sub-classe da nossa classe Command, tornando ela, a classe Command, como super classe. Por questões de organização, dentro do seu pacote principal, crie um pacote chamado command, vamos deixar todos os comandos lá. Obviamente, não é necessário a criação desse pacote. Crie uma classe chamada HelloWorld. Defina a classe Command como super-classe, para isso, devemos utilizar extends Command onde informamos o nome da classe, exemplo: import org.bukkit.command.Command; public class HelloWorld extends Command{ } Sua classe ficará mais ou menos assim. Após definir a super classe, devemos criar um construtor publico e sem parâmetros. public HelloWorld() { } Ainda no construtor, vamos recuperar o construtor da super-classe que requisita de um parâmetro do tipo String. Nesse parâmetro vamos definir o comando helloworld: public HelloWorld() { super("helloworld"); } Pronto, nosso comando está pronto, agora precisamos dar alguma função para ele. Provavelmente sua IDE está requisitando que você implemente um método no seu código, implemente o mesmo. Caso não tenha pedido, adicione: @Override public boolean execute(CommandSender sender, String commandLabel, String[] args) { // TODO Auto-generated method stub return false; } Agora vamos enviar uma mensagem pro sender/responsável: @Override public boolean execute(CommandSender sender, String commandLabel, String[] args) { sender.sendMessage("Hello, World!"); return false; } Pronto, agora devemos registrar esse Comando, confira a próxima etapa. REGISTRANDO COMANDOS Como o título informa, "registrando automaticamente", chegamos à essa parte. Com o comando pronto, devemos registrar ele, você pode baixar a classe clicando aqui. Crie um novo objeto CommandBuilder(classe baixada), ele requisitará de uma String, essa String é a package do local onde se encontra os comandos. Ele procurará todas classes que pertencem a aquele pacote ou a um sub-pacote que tem uma super classe do tipo Command. Lembrando que você deve fazer isso quando o servidor inicia, ou seja, no método #onEnable da sua classe principal. Resultado: @Override public void onEnable() { new CommandBuilder("me.smgabriel.development.testes.commands"); } Baixar • CommandBuilder • Command • #execute • #onEnable Por que eu usaria? Por onde eu começo? Pela parte que você não precisa registrar comandos em todo lugar, pela parte onde você não precisará registrar mais comando ou pela parte que você pode deixar o publico feliz de poder escolher o comando que ele deseja? Informações adicionais Eu apresentei apenas 1% da classe Command, você pode acessar a documentação dela e conferir tudo que ela tem para você utilizar. Também, não existe limitações para o uso desse método, aqui apresentamos uma maneira, mas existem diversas maneiras de uso, tais como: registro automático de kits, ranks, classes(ctf), etc.
  3. Remove o PHP atual e instala esses pacotes: mod_php70u php70u-cli php70u-mysqlnd
  4. ''Caso queira remover o item ignorando os itens que estão agrupados, pode usar p.getInventory().remove(Material.CACUS);'' Se você quer remover um por um, use o código abaixo: for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.CACTUS)){ //verifica se o item é o que você está procurando if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); break; } } O que ele faz? Basicamente, percorre todos os itens do inventario, verifica se algum deles é do material Cacus, se for, verifica a quantidade estacada e verifica se é maior que um, se for, remove um, se não, remove o item do inventario. Para entender melhor... public static void toRemove(ItemStack item, int amount, Player p){ if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); } public static void toRemove(Material type, int amount, Player p){ for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(type)){ //verifica se o item é o que você está procurando if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); break; } } } // para usar public static void test(){ toRemove(new ItemStack(Material.CACTUS), 1, Bukkit.getPlayer("GB")); toRemove(Material.CACTUS, 1, Bukkit.getPlayer("GB")); } Usando: [...] onCommand[bla..blalbl...]{ if(sender instanceof Player){ // checa se o sender é um player Player p = (Player)sender; toRemove(Material.CACTUS, 1, p); } } }
  5. Está certo, pode usar ItemStack para verificar. for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.CACTUS)){ //verifica se o item é o que você está procurando if(item.getAmount() > 1) // verifica a quantidade de itens stacados, se for maior que um item.setAmount(item.getAmount() -1 ); // remove um item else // se menor ou igual a um, remove o item. p.getInventory().remove(item); break; } } Caso queira remover o item ignorando os itens que estão agrupados, pode usar p.getInventory().remove(Material.CACUS);
  6. [...] onCommand[bla..blalbl...]{ if(sender instanceof Player){ // checa se o sender é um player Player p = (Player)sender; if(p.getInventory().contains(Material.ITEM)){ // checa se o player tem o item no inventario ItemStack meuItem; for(ItemStack item : p.getInventory()){ // percorre todos os itens do inventario if(item.getType().equals(Material.ITEM)){ //verifica se o item é o que você está procurando meuItem = item; break; } } if(meuItem.getAmount() > 1) //verifica se a quantidade do item é maior do que um meuItem.setAmount(meuItem.getAmount()-1); // se sim, remove um item apenas else // se não, remove o item do inventario. p.getInventory().remove(Material.ITEM); } } } Eu não sei se tem algo de errado, fiz pelo navegador mesmo.
  7. Era para testar apenas, esqueci de remover. Valeu Valeu
  8. Carregue a chunk antes de colocar qualquer bloco ou até mesmo teletransportar para evitar que eles fiquem bugados no bloco(dentro do chão). Verifique se a chunk está carregada, se não estiver, carregue. if(!bloc.getChunk().isLoaded()) bloc.getChunk().load(); Fiz alguns testes e o deu o mesmo problema.
  9. Olá pessoal, hoje venho apresentar uma pequena classe que está em desenvolvimento de serialize/deserialize de itens. A classe está disponível no meu GitHub, mas para lhe ajudar, está aqui: https://github.com/smgabriel/MINECRAFT/tree/master/UTILIDADES/ITEMSTACKBUILDER Para usar, é bem simples. Basta fazer uma declaração e desfrutar dos métodos. ItemStackBuilder isb = new ItemStackBuilder(); /*|| new ItemStackBuilder("seu diretorio", "seu arquivo.extensão");*/ List<ItemStack> itens = Arrays.asList(new ItemStack(Material.APPLE), new ItemStack(Material.REDSTONE, 2), new ItemStack(Material.GOLD_AXE, 3), new ItemStack(Material.ARMOR_STAND, 4), new ItemStack(Material.ARROW, 5)); try { isb.serializar(itens); System.out.println(isb.deserializar().toString()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } Por enquanto, a classe não tem suporte à dados em String(Para quem pretende fazer consultas SQL).
  10. Está legal(8/10), agora falta fazer um sistema para vender plugins, ai sim fica 10/10.
  11. Com as informações que você deu, você não está chamando o método #register() em nenhum local ou seja, a variável economia sempre será nula. Como você verifica se a variável economia não é nula, ele já retorna false no método #contains(), porque ela é nula. if(economia != null /*retorna null pq essa varivel é nula*/ && economia.getBalance(p) >= valor){}
  12. Você não está chamando o método #register() em nenhum local de acordo com o as informações que você passou, não seria esse o problema? Resultando em variável economia null. Como você checa se a economia não é nula no método contains, ele já define como falso, já que a variável é nula.
  13. Mande o código completo dessa classe Money.
  14. Bem, no servidor que eu atualmente cuido, ele não tem muitos dados na tabela, não passa de 2k, nunca me deu problema. Mas como você acha que provavelmente está lagando ou está lagando, recomendo a opção do Pica-Pau mesmo. Tem um sistema que ele abre a conexão e quando algum player entra, ele faz a consulta, ai só fecha quando desliga.
  15. Abrir(quando o servidor ligar), fazer cache e fechar(assim que a consulta for terminada), acredito que seja a melhor opção.
  16. Parabéns pelo tutorial, apesar de já saber, eu não tinha nenhum tema foda. Esses temas são fodas dms.
  17. Engrenagem, se for só a parte marcada.
  18. Também ficaria legal, adicionei a print como exemplo.
  19. Sua sugestão: Adicionar em algum local uma informação de quantas melhores respostas você tem, exemplo: Primeiro: Segundo: Segundo exemplo criado por @champS Porque nós devíamos adicionar ela: Porque é legal, as vezes queremos saber quantas melhores respostas temos, mas não temos acesso para descobrir.
  20. O próprio nome já define sua função, um construtor de Strings. Ou seja, com essa classe você pode criar uma String, editar, fazer o que quiser(até onde ela lhe permite) Para usar, basta criar um objeto, os construtores delas permitem você criar uma nova String ou editar uma String existente StringBuilder sb = new StringBuilder(); // Criando uma String do zero, de acordo com a descrição, o tamanho inicial é 16 chars String text = "Eae galerinha"; StringBuilder sb2 = new StringBuilder(text); // Editando uma String. Além disso, você pode criar uma String definindo o tamanho dela. Eu gosto de usar o método append. Basicamente, ele acrescenta um novo objeto(int, double, long, String, char entre outros) à String, exemplo: String text = "Eae galerinha"; StringBuilder sb = new StringBuilder(); sb.append(text); Além de acrescentar, você pode remover também. String text = "Eae galerinha"; StringBuilder sb = new StringBuilder(); sb.delete(0, 3); // Deleta do primeiro caractere até o quarto caractere sb.deleteCharAt(0); // Remove um char de uma determinada localização, a diferença entre o método delete e esse, é visível. Existe diversas possibilidades nesse Builder(exemplo insert), olhe a javadocs.
  21. smgabriel

    Chance

    Usa o método random() da classe Math. Exemplo: double random = Math.random(); if(random <= 0.7D) // 70% de chance else if(random <= 0.01D) // 1% de chance
×
×
  • Criar Novo...