-
Total de itens
206 -
Registro em
-
Última visita
Tudo que Manolo8 postou
-
Se tem que aprender java primeiro, se procurar por aprender java, vai encontrar em português... Depois que aprender java, fica fácil criar plugins... Se querer criar plugins sem aprender java, você vai aprender a escrever porcaria, não recomendo.
-
Quando o servidor é offline, o UUID é gerado pelo nick do jogador que é transformado para bytes, e então é usado o UUID.fromBytes()... Ou seja é único. (A menos que o nick seja trocado, letra maiúscula e minúscula importam... > Manolo != manolo) Os plugins de login geralmente bloqueiam isso...
-
Não queria votar no Bolsonaro... Mas meu professor de hist´ória me ensinou a votar no "menos pior", como já foi dito aí... (Se é pra continuar a mesma m*, pelo menos, votando no Bolsonaro, tem chance de mudar, não sei se melhor, ou pior, mas temos que arriscar)
-
PlayerPoints: bem, nunca mexi com esse plugins, mas na página dele está: private boolean hookPlayerPoints() { final Plugin plugin = this.getServer().getPluginManager().getPlugin("PlayerPoints"); playerPoints = PlayerPoints.class.cast(plugin); return playerPoints != null; } Para pegar o cash int balance = playerPoints.getAPI().look("Player"); PlayerPoints playerPoints; public void onEnable() { hookPlayerPoints(); } private boolean hookPlayerPoints() { final Plugin plugin = this.getServer().getPluginManager().getPlugin("PlayerPoints"); playerPoints = PlayerPoints.class.cast(plugin); return playerPoints != null; } onCommand(CommandSender...) { if(sender instanceof Player) { int points = playerPoints.getAPI().look(sender.getName); //... } } Para pegar o PREFIXO, recomendo usar o vault...
-
Um exemplo do que eu uso: https://gist.github.com/Manolo8/76b105b649a0c79175ed123fde50d31a Uso um MAP para mapear o ID, uso SoftReference para manter na memória quando está sendo utilizado, e faço um LOOP pelas entities para checar se há modificações (cade e entity tem um boolean avisando se foi modificado) Se foi modificado, adiciono em uma Queue, para ir salvando aos poucos, tudo safe-thread para acessar pela thread principal (do mine) e para ser salvo Um exemplo usando agora NamedCache https://gist.github.com/Manolo8/b690c41f15c450f244183a4abb435f87 Uso TABCOMPLETE com as entidades, por tanto, uso um TreeMap para salvar os nomes (e posteriormente, pegar com muita eficiência os nomes para TABCOMPLETE) -> Não tanto, pelo fato de se, não houver no mínimo 20 nomes, uma query é feita no banco de dados... Um sistema de Grupos em funcionamento: https://gist.github.com/Manolo8/7bb46c14bd65ba647bd222bd89528955 Basicamente, você não precisa se preocupar com o banco de dados... https://gist.github.com/Manolo8/7bb46c14bd65ba647bd222bd89528955#file-group_groupservice-java-L53 -> Como os comandos são mapeados...
-
Olá galera, queria fazer um servidor, entretanto, é um pouco difícil divulgar.. '-' Então resolvi vender sistemas parecidos. O que eles possuem? (Antes da compra, você pode testar, pedir para adicionar novos, ou remover) * LOGIN * ECONOMIA * SKILLS (Você pode pedir a mim para criar skills customizadas) * KITS (EM GUI, TABCOMPLETE, você criar os kits in-game) * PLOT (EM GUI, TABCOMPLETE), OU SKYBLOCK; * CLAN (Em GUI, com informações do último login, KDR...) * CLAN-AREA (Áreas que o clan pode dominar, fiz no estilo do meu servidor, você pode pedir para alterar, remover, etc...) * MOB-AREA (Áreas em que você pode por para nascer MOBS, alterar a VIDA, o DANO, a VELOCIDADE, o NOME ETC, tudo por comando, com TABCOMPLETE) ---> (Você pode colocar qualquer tipo de drop para esses MOBS, chances, ETC) * REGION -> Proteção padrão * SHOP (EM GUI, Totalmente diferente dos demais) * MERCADO (EM GUI, pode escolher limites, categorias (na hora da compra, posso alterar depois) * MINAS (pode escolher blocos, porcentagens, drops, porcentagens etc) * WARPS (Com informações de quantas pessoas estão em cada warp) * RANKUP, GROUP, PORTAIS, SKINS (Para usar skin, só digitar /skin <nome>) * ScoreBoard e TabList totalmente em sincronia com o servidor, com atualização instantânea *** Posso fazer sistema de RANKUP com limitador de jogadors (Quem armazenar mais COINS, fica no melhor RANK) *** Você pode colocar nas REGIONS, o RANK mínimo para um jogador entrar! OBS: Plot, Clan-Area, Mob-Area, REGION, mostra informações no SCOREBOARD, de quantos jogadores tem, pvp ativo-inativo Exemplo de uma parte do código (Módulo PLOT): https://gist.github.com/Manolo8/c1d0b8dda6b7d70a96e15a8dcf1791b2 OBS: Por enquanto não faço FACTIONS, nem MINIGAMES - Site de graça, exemplo simplecraft.com.br (com o SHOP para comprar CASH, fica um pouco mais caro) - Adicionar/remover comandos de graça! (Desde que use o que já tem, e não precise adicionar coisas novas...) - Você pode pedir para adicionar QUALQUER coisa, (Desde que não seja algo que demore muito para ser feito) ---> No entanto, não vai ser de graça, e o preço vai depender da dificuldade, será mais barato se eu já estiver um exemplar... Outros plugins para usar em CONJUNTO: WorldEdit, ProtocolSupport, NoCheatPlus Obs: Posso adicionar suporte ao VAULT, entretanto, o provedor de economia será o feito por mim - Posso importar informações de economia, login de outros plugins, entretanto fica mais caro - Não faço mapas - O exemplo de site (simplecraft.com.br) só estará disponível se você usar MYSQL - Você precisa usar o spigot 1.12+, ou uma versão alterada por mim para aumentar um pouquinho a performance - Tudo está interligado por um sistema de CACHE, usando SoftReference Você pode testar o servidor aqui: jogar.simplecraft.com.br (Tem os plugins: SimpleCraft, ProtocolSupport, NoCheatPluts e WorldEdit) Se você querer, meu discord: Manolo8#8345: Preços: Do jeito que está, sem edição alguma: 300 reais -> Após o momento que o orçamento for aceito, vou fazer tudo, abrir em um servidor de teste para você testar, e só vou passar a .jar após você pagar. Qualquer bug encontrado: Não tem bugs sérios no momento, mas qualquer bug encontrado, eu terei 1 SEMANA para corrigir (geralmente mais rápido), você precisa passar as informações do bug para o meu discord
-
o plugin ta usando uma versão antiga do spigot... Nas novas versões, as particulas, sons, tiveram algumas mudanças, tem que pedir pro autor do plugin consertar...
-
https://gist.github.com/Manolo8/9a0adbb701629c8dfc1d2abdd5c19934 Isso é o que eu uso no meu servidor (jogar.simplecraft.com.br)
-
dúvida resolvida Preciso mais uma vez resolver essa duvida IMQUIETANTE!
tópico respondeu ao Intrometimido de Manolo8 em Dúvidas resolvidas
for (int i = 0; i < 15; i++) { //21 = slot que vai começar, 5 = quantas colunas (5= 5 colunas) int index = 21 + (i / 5) * 9 + i % 5; bau.setItem(index, ItemStack...); } -
Adicionado /mercado Feito com 300 linhas de código em < 6h :) https://www.youtube.com/watch?v=NtyGIFkSJZM&feature=youtu.be https://gist.github.com/Manolo8/7d547a9a9e7705844cc04c648040f5d8
-
Vê se está funcionando aí: https://mega.nz/#!bw5UVSgY!fQsNSgtFAcViOZETIIjxDD1ys7lCp7Sx2Ap_J2vMmYE
-
inativo [Sistema de GUI] Qual vocês preferem?
tópico respondeu ao ramon-bernardo de Manolo8 em Arquivos
eu prefiro com os 2 keppo -
Obrigado :) Se querer entrar na equipe, manda uma mp
-
Vou adicionar uma opção para colocar com . (100.000.000) e também com M(milhão),B(Bilhão),T(trilhão)... Mas só quando o tópico tiver 3 curtidas :)
-
Você poderia colocar para pedir um texto de entrada, e o autor teria que escrever a resposta, ai daria de colocar formular mais difíceis, multiplicação é muito fácil...
-
O plugin só adiciona os itens que foram minerados ao inventário, não dropando nem um item no chão... (O evento BlockBreak é cancelado, nem um item é dropado pelo evento, logo funciona...) Só que isso pode causar bugs com o NoCheatPlus como falei logo a cima... Enfim, testa ai, se querer
-
Como verificar se o inventário de um player esta vazio
tópico respondeu ao RUSHyoutuber de Manolo8 em Tutoriais
public boolean isEmpty(Inventory inventory) { for (int i = 0; i < inventory.getSize(); i++) { if (inventory.getItem(i) != null) return false; } return true; } Os outros métodos cria uma array temporária, que não é necessária: protected ItemStack[] asCraftMirror(List<net.minecraft.server.v1_12_R1.ItemStack> mcItems) { int size = mcItems.size(); ItemStack[] items = new ItemStack[size]; for(int i = 0; i < size; ++i) { net.minecraft.server.v1_12_R1.ItemStack mcItem = (net.minecraft.server.v1_12_R1.ItemStack)mcItems.get(i); items[i] = mcItem.isEmpty() ? null : CraftItemStack.asCraftMirror(mcItem); } return items; } public ItemStack[] getContents() { List<net.minecraft.server.v1_12_R1.ItemStack> mcItems = this.getInventory().getContents(); return this.asCraftMirror(mcItems); } -
Eai pessoal, para quem querer ver o progresso do servidor: https://imgur.com/a/3gLlqNz Obs: Tem apenas 1 plugin, e tudo funciona perfeitamente em conjunto :) Adicionado SITE (simplecraft.com.br) Estou procurando 2 pessoas para ser admin no servidor: Funções dos ADMIN: - Ajudar a equilibrar o servidor; - A deixar mais intuitivo Se quiser ajudar, manda uma mensagem privada aqui no fórum!
-
Eai pessoal, quem quiser fazer um stackador de itens, fica aqui o código... Exemplo: https://imgur.com/a/JVTD4QQ Código: @EventHandler public void itemMergeEvent(ItemMergeEvent event) { Item one = event.getEntity(); Item two = event.getTarget(); if (one.getCustomName() != null && two.getCustomName() != null) { one.setCustomName(String.valueOf(toInt(one.getCustomName()) + toInt(two.getCustomName()))); two.remove(); } else if (one.getCustomName() != null && two.getCustomName() == null) { one.setCustomName(String.valueOf(toInt(one.getCustomName()) + two.getItemStack().getAmount())); two.remove(); } else if (one.getCustomName() == null && two.getCustomName() != null) { two.setCustomName(String.valueOf(toInt(two.getCustomName()) + one.getItemStack().getAmount())); one.remove(); } else { one.setCustomName(String.valueOf(one.getItemStack().getAmount() + two.getItemStack().getAmount())); one.getItemStack().setAmount(1); one.setCustomNameVisible(true); two.remove(); } event.setCancelled(true); } @EventHandler public void itemPickUp(EntityPickupItemEvent event) { if (event.getEntity() instanceof Player) { Inventory inventory = ((Player) event.getEntity()).getInventory(); Item item = event.getItem(); if (item.getCustomName() != null) { int quantity = NumberUtils.toInt(item.getCustomName()); if (quantity == 0) return; event.setCancelled(true); quantity = InventoryUtils.addItemTo(inventory, item.getItemStack(), quantity); if (quantity == 0) { item.remove(); } else { item.setCustomName(String.valueOf(quantity)); } } } } public static int addItemTo(Inventory inventory, ItemStack item, int amount) { int stackSize = item.getMaxStackSize(); int max = (inventory instanceof PlayerInventory) ? 36 : inventory.getSize(); ItemStack clone = item.clone(); for (int i = 0; i < max; i++) { ItemStack stack = inventory.getItem(i); if (stack == null) { if (amount >= stackSize) { clone.setAmount(stackSize); inventory.setItem(i, clone); amount -= stackSize; continue; } clone.setAmount(amount); inventory.setItem(i, clone); return 0; } else if (stack.isSimilar(item)) { int stackAmount = stack.getAmount(); int free = stackSize - stackAmount; if (amount > free) { stack.setAmount(stackAmount + free); amount -= free; continue; } stack.setAmount(stackAmount + amount); return 0; } } return amount; } Deixa o like ai :) '-'
-
Uma dica: Coloca uma opção para ativar: Um Math.min(dinheiroDoMatador,dinheiroDaVitima); por que se não, os jogadores vão depositar o dinheiro em outra ACC e ir pra arena... Ai assim, se matar um jogador que tem 10000, e você tem 1000, você vai receber % dos 1000, e não dos 10000... (A mesma coisa pro contrário)...
-
Exemplo: https://www.youtube.com/watch?v=AE4w0UtGSYE&feature=youtu.be
-
Bem pessoal, criei uma API para comandos, onde basicamente, para criar um comando, você usa: Exemplo em vídeo: https://www.youtube.com/watch?v=AE4w0UtGSYE&feature=youtu.be @CmdMapping("mobarea create <name>") @CmdDescription("Cria uma area de mobs") @CmdPermission("simplecraft.admin") @CmdParams({@Param(MobAreaProvider.class), @Param(SimpleArea.class)}) public void createMobArea(User user, String name, MobAreaProvider provider, SimpleArea area) throws SQLException { if (provider.exists(name)) { user.sendMessage(MessageType.ERROR, "Já existe uma MobArea com esse nome!"); return; } provider.create(area, name); user.sendMessage(MessageType.SUCCESS, "A MobArea foi criada com sucesso!"); } @CmdMapping("mobarea remove <area>") @CmdDescription("Remove uma area de mobs") @CmdPermission("simplecraft.admin") public void removeMobArea(Sender sender, MobArea area) { area.remove(); sender.sendMessage(MessageType.SUCCESS, "A area de mobs foi removida!"); } @CmdMapping("mobarea respawn <area>") @CmdDescription("Respawna os mobs de uma area") @CmdPermission("simplecraft.admin") public void mobAreaRespawn(Sender sender, MobArea area) { area.respawnMobs(true); sender.sendMessage(MessageType.SUCCESS, "Os mobs serão respawnados!"); } @CmdMapping("mobarea tp <area>") @CmdDescription("Teleporta para um local disponível na area") @CmdPermission("simplecraft.admin") public void mobAreaTp(User user, MobArea area) { if (user.teleport(area)) { user.sendMessage(MessageType.SUCCESS, "Teleportando..."); } else { user.sendMessage(MessageType.ERROR, "Não foi encontrado um local disponível para teleporte..."); } } @CmdMapping("mobarea change <area> mob add <mob> <quantity>") @CmdDescription("Adiciona uma mob a area") @CmdPermission("simplecraft.admin") public void mobAreaAdd(Sender sender, MobArea area, Mob mob, int value) { if (area.hasMob(mob)) { sender.sendMessage(MessageType.ERROR, "A area já tem esse mob!"); return; } if (value > 2000) { sender.sendMessage(MessageType.ERROR, "A quantidade não pode ser maior que 2000"); return; } area.create(mob, value); area.respawnMobs(false); sender.sendMessage(MessageType.SUCCESS, "O mob foi adicionado!"); } @CmdMapping("mobarea change <area> mob remove <mob>") @CmdDescription("Remove um mob da area") @CmdPermission("simplecraft.admin") public void mobAreaRemove(Sender sender, MobArea area, MobInfo mob) { area.removeMob(mob); area.respawnMobs(true); sender.sendMessage(MessageType.SUCCESS, "O mob foi removido!"); } @CmdMapping("mobarea change <area> mob update <mob> <quantity>") @CmdDescription("Atualiza a quantidade de mobs na area") @CmdPermission("simplecraft.admin") public void mobAreaUpdate(Sender sender, MobArea area, MobInfo info, int value) { if (value > 2000) { sender.sendMessage(MessageType.ERROR, "A quantidade não pode ser maior que 2000"); return; } info.setQuantity(value); area.respawnMobs(false); sender.sendMessage(MessageType.SUCCESS, "A quantidade de mobs foi alterada!"); } E para criar um provedor, usa-se: @SupplierOptions("area") class MobAreaConverter implements Supplier.Convert<MobArea> { @Override public void tabComplete(TabArguments arguments) throws SQLException { arguments.offerSafe(repository.findNames(arguments.getComplete())); } @Override public Result<MobArea> convert(ParameterBuilder builder, Sender sender, String value) throws SQLException { MobArea area = repository.findByName(value); if (area == null) return new Result.Error("A area com o nome " + value + " não foi encontrada!"); return new Result(area); } } @SupplierOptions("mob") class MobConverter implements Supplier.Convert<Mob> { @Override public void tabComplete(TabArguments arguments) { MobArea mobArea = arguments.parameters().getByType(MobArea.class); for (Mob mob : repository.getMobInfoRepository().getMobs()) { if (mobArea != null && mobArea.hasMob(mob)) continue; arguments.offer(mob.getName()); } } @Override public Result<Mob> convert(ParameterBuilder builder, Sender sender, String value) { Mob mob = repository.getMobInfoRepository().findByName(value); if (mob == null) return new Result.Error("O mob " + value + " não foi encontrado!"); return new Result<>(mob); } } @SupplierOptions("mob") class MobInfoConverter implements Supplier.Convert<MobInfo> { @Override public void tabComplete(TabArguments arguments) { MobArea mobArea = arguments.parameters().getByType(MobArea.class); if (mobArea != null) { for (MobInfo info : mobArea.getMobInfos()) { arguments.offer(info.getMob().getName()); } } } @Override public Result<MobInfo> convert(ParameterBuilder builder, Sender sender, String value) { MobArea mobArea = builder.getByType(MobArea.class); Mob mob = repository.getMobInfoRepository().findByName(value); if (mob == null) return new Result.Error("O mob " + value + " não foi encontrado!"); MobInfo info = mobArea.getMob(mob); if (info == null) return new Result.Error("A area não tem o Mob " + value + "!"); return new Result(info); } } Bem, deu um trabalho, e minha ideia é, talvez liberar aqui pro fórum... Queria saber quem gostaria de usar... (Daria trabalho fazer um tutorial para usar isso, e no fim das contas ser desperdicio '-') (Os comandos são basicamente daquele jeito ali, (o tab complete funciona perfeitamente :)) Deem um feedback se quererem que eu poste...
-
Saudades '-' Me lembro até hoje de tão triste que fiquei quando a serie aventureiros acabou
-
Geralmente os servidores colocam vários 0 nos coins (com o grande intuito de mais prejudicar do que facilitar...) Vai fazer qualquer coisa, tem que ficar contando os 0... Então, sugiro (minha ideia), usar centavos também na economia... Tipo, calcula para 1 min na mina 1, dar 5 coins 1 min na mina 2, dar 8... Aumentando sempre 60% (aumento sobre aumento) (Pra calcular isso, você tem que minerar, ver quanto consegue minerar, e depois fazer as divisões...) Ai o preço dos itens, faz baseado nisso... O preço do ferro fica barato a partir da mina 4, o da maça dourada a partir da mina 7, o do diamante a partir da mina 8... (Se quiser também...) Materiais feios (pedregulho, terra...) São 'meio' que de graça na mina 1, materiais medios, a partir da mina 3... E vai fazendo assim...