-
Total de itens
227 -
Registro em
-
Última visita
Respostas na Comunidade
-
smgabriel's postagem in Java + Base de dados was marked as the answer
Você pode usar o JDBC para se conectar com o banco de dados e checar essas informações.
Lembrando que você precisa de um driver para se conectar com o banco de dados(caso esteja usando spigot/bukkit e bla bla, já vem com o driver mysql/sqlite).
As URL's abaixo são dos drivers mysql e sqlite, elas serão necessárias para o driver informado se conectar com o banco de dados:
MySQL:
"jdbc:mysql://" + ip_do_host + ":" + porta + "/" + nome_da_database SQLITE:
"jdbc:sqlite:" + nome_do_arquivo_sqlite Cada driver tem sua url, caso você não use nenhuma desses bancos, dê uma procurada pelo Google. (jdbc nome do driver url)
Podemos usar o método #getConnection, da classe DriverManager, para recuperar a classe java.sql.Connection. A classe Connection mexe com o banco de dados, recuperando, inserindo, deletando, resumindo, podemos fazer tudo com essa classe.
Bem, essa é uma explicação bem resumida mesmo, recomendo dar uma estudada para aprender mais coisas sobre JDBC.
A classe Connection contém um método chamado #prepareStatement ele pode fazer algumas ações como: inserir, recuperar, deletar e atualizar um dado de uma tabela ou até mesmo a tabela. Esse método retorna a classe PreparedStatement.
Exemplo:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/minhadatabase", "root", "456"); Alguns drivers podem receber usuário e senha, o método #getConnection recebe os parâmetros usuário e senha.
Temos:
public boolean contains(String info) { try { Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/minhadatabase", "root", "456"); // Cria a conexão com o banco de dados PreparedStatement ps = con.prepareStatement("SELECT * FROM tabela WHERE info=?"); // Prepara o statement, informando a seguinte operação: SELECIONE TUDO EM tabela QUE info FOR IGUAL A ?(O valor deve ser informado) ps.setString(1, info); // Para informar o valor, usamos o método #setString, onde ele aceita a posição e a String que deve ser verificada. return ps.executeQuery().next(); // Aqui executamos a consulta, ele retorna uma classe chamada ResultSet, que tem os resultados da consulta. https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html // Esse método checa se existe ou não, caso exista, retorna true, caso contrário retorna false ou sqlexception. } catch (Exception e) { return false; // caso tenha dado algum erro, retorna falso, informando que não existe. } } Eu sinceramente não sei se existe outra forma de verificar se existe ou não um dado na tabela sem ser dessa forma, mas acredito que não. Nunca pesquisei.
Agora podemos usar:
String info = user.getText() + ":" + "senha.getPassword().toString(); String array[] = new String[2]; array = frase.split(":"); if(contains(info)){ // checando se contém. System.out.println("Infos encontradas na database"); } Acho que deu para entender.
OBS:
Tome cuidado com essa consulta, ela cria uma conexão com o banco de dados sempre que vai consultar algo.
Recomendações:
Tentar manter essa conexão sempre ativa e não abrir mais, armazenar as informações em cache ou abrir só quando necessário.
-
smgabriel's postagem in [1.11] chest com item was marked as the answer
O Bukkit/Spigot não permite que você altere alguns dados do jogo de forma "asynchronous", que não é sincronizado com a thread principal.
Este evento ChatMessageEvent, é async, ou seja, você não pode fazer praticamente nenhuma alteração do jogo aí e modificar o mundo é uma delas.
Recomendo criar uma espécie de ''ouvinte'' para executar essas funções, por exemplo: o evento ocorre, você faz suas operações e verifica se é para criar o bloco, se for, você envia esses dados para uma Lista por exemplo, o ouvinte vai, obviamente, ouvir e executar a função na thread principal.
Outra é usar o evento PlayerChatEvent, mas é um método depreciado, em alguns dias, ele pode deixar de existir.
-
smgabriel's postagem in [Duvida] getEnchantments para String list was marked as the answer
List<String> enchants = new ArrayList<>(); for(Enchantment enc : itemstack.getItemMeta().getEnchants().keySet()){ enchants.add(enc.getName()+":"+itemstack.getItemMeta().getEnchants().get(enc)); } FILECONFIGURATION.set("meuitem.enchantments", enchants); Crie uma lista, faça um foreach, adicione os encantamentos na lista e depois sete na config.
Lembre-se de salvar a config.
Acho que foi isso que vc quer.
Eu recomendo você usar essa classe, ela te auxilia a salvar/carregar itens com facilidade.
-
smgabriel's postagem in [Centos7] Conflitos ao instalar phpMyAdmin, alguém sabe resolver? was marked as the answer
Como a instalação ''automática'' não funciona, faça a instalação manual.
Tutorial retirado de: https://stackoverflow.com/questions/34060036/have-trouble-installing-phpmyadmin-on-php7-apache-2-4-7-ubuntu
-
smgabriel's postagem in [Duvida][Centos7] Como atualizo o PHP? was marked as the answer
Remove o PHP atual e instala esses pacotes:
mod_php70u php70u-cli php70u-mysqlnd -
smgabriel's postagem in Erro/duvida money configuravel was marked as the answer
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){} -
smgabriel's postagem in StringBuilder was marked as the answer
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.
-
smgabriel's postagem in Como crio uma db local? was marked as the answer
Aparece algum erro? ou coisa do tipo? provavelmente não existe esse arquivo...
Como eu uso:
File fileDB = new File[...]; if (!fileDB.exists()) { fileDB.createNewFile(); } Class.forName("org.sqlite.JDBC"); connection = DriverManager.getConnection("jdbc:sqlite:" + fileDB.getAbsolutePath()); -
smgabriel's postagem in [Ajuda] Ao clicar em uma entidade + Ao bater em uma entidade was marked as the answer
1 - Utilize o evento PlayerInteractAtEntityEvent
2 - Utilize o evento EntityDamageByEntityEvent
Se não conseguiu, olhe os exemplos:
@EventHandler public void onClickNPC(PlayerInteractAtEntityEvent e) { Entity et = e.getRightClicked(); if(et != null && et instanceof Villager && et.getName() != null && et.getName().equalsIgnoreCase("Aderbal")) { e.getPlayer().sendMessage("O SAM É BRABO"); } } @EventHandler public void onDamageNPC(EntityDamageByEntityEvent e) { Entity et = e.getEntity(); if(e.getDamager() instanceof Player) { if(et instanceof Villager) { Player dmg =(Player)e.getDamager(); ItemStack item = dmg.getItemInHand(); if(item != null && item.getType().equals(Material.STONE_SWORD) && item.getItemMeta() != null && item.getItemMeta().getDisplayName() != null && item.getItemMeta().getDisplayName().equalsIgnoreCase("HIT KILL")){ et.remove(); } } } } Ah, não testei.
-
smgabriel's postagem in AJUDA COM VILLAGER! API DO CITIZENS was marked as the answer
void spawnVillager(){
Villager v = (Villager) Bukkit.getWorld("world").spawn(new Location(Bukkit.getWorld("world"), 100, Bukkit.getWorld("world").getHighestBlockYAt(100, 100), 100), Villager.class);
noAI(v);
v.setBaby();
v.setCustomName("JUBILEU");
v.setCustomNameVisible(true);
}
@EventHandler
public void onClickEntity(PlayerInteractAtEntityEvent e){
Entity et = e.getRightClicked();
if(et.getCustomName().equalsIgnoreCase("JUBILEU")){
Inventory inv = Bukkit.createInventory(null, 9 , "Inventario do Jubileu");
e.getPlayer().openInventory(inv);
}
}
void noAI(Entity bukkitEntity) {
net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) bukkitEntity).getHandle();
NBTTagCompound tag = nmsEntity.getNBTTag();
if (tag == null) {
tag = new NBTTagCompound();
}
nmsEntity.c(tag);
tag.setInt("NoAI", 1);
nmsEntity.f(tag);
}
-
smgabriel's postagem in XP HELP. was marked as the answer
É bem complexo mexer com EXP...
Tente o método abaixo, o ruim é por que vai ficar com um som que ele ganhou exp..:
if (getPlayer().getTotalExperience() >= 1000) { int exp = getPlayer().getTotalExperience() - 1000; getPlayer().setTotalExperience(0); getPlayer().setLevel(0); getPlayer().setExp(0); getPlayer().giveExp(exp); Bukkit.broadcastMessage("" + /*????*/getPlayer().getTotalExperience()); } getPlayer() == Player p;
-
smgabriel's postagem in [AJUDA] ITENS EM GUI was marked as the answer
Dye d = new Dye(); d.setColor(DyeColor.BLUE); ItemStack i = d.toItemStack(); i.setAmount(10); p.getInventory().addItem(i); -
smgabriel's postagem in [AJUDA] ICONOMY was marked as the answer
Você terá que fazer um ''hook'' utilizando o Vault, após baixar o vault, abra sua classe principal e siga esses passos:
No topo, coloque esse objeto:
public static Economy eco = null; Agora, adicione esse método em sua classe:
private boolean setupEconomy(){ RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); if (economyProvider != null) { eco = economyProvider.getProvider(); } return (eco != null); } No onEnable, ''chame'' o método setupEconomy():
@Override public void onEnable() { m = this; setupEconomy(); } Agora, você pode adicionar/retirar o money do player:
eco.getBalance("GabrielSm_"); // retorna o money do player eco.bankDeposit("GabrielSm_"/*nick do player, pode usar o método p.getName() também.*/, 10/*quantia que vai ser depositada*/); // deposita money eco.withdrawPlayer("GabrielSm_"/*nick do player, pode usar o método p.getName() também.*/, 10/*quantia que vai ser retirada*/); //retira o money do player -
smgabriel's postagem in [Duvida] Comparar Strings was marked as the answer
Faça um debugg e veja aonde para.
Você falou que mesmo usando replace, não adiantou, você usou replace nas duas strings ou apenas em uma?
Já verificou se o diretorio da config está certo?
Eu fiz um debugg e aqui funcionou perfeitamente: http://imgur.com/AHxuxJd
Bukkit.broadcastMessage("[1]"); String a = e.getLine(0).replace("&", "§"); String b = getConfig().getString("placa.linha0").replace("&", "§"); if(a.equalsIgnoreCase(b)){ Bukkit.broadcastMessage("[2]"); System.out.println("SIM"); }else{ Bukkit.broadcastMessage("[3]"); System.out.println("Não"); } Bukkit.broadcastMessage("[4F]"); } Caso não tenha resultados positivos, mostre seu método.
-
smgabriel's postagem in [Dúvida] Lista de enchantment was marked as the answer
Eu fiz uma gambiarra aqui, não sei se vai funcionar, não testei...
void setEnchantment(List<String> location, ItemStack item) { ItemMeta m = item.getItemMeta(); for (String enc : location) { // retorna uma string por vez da lista if (enc.indexOf(":") >= 1) { // verifica se na string contem mais de um caractere : String[] partes = enc.split(":"); String encNome = partes[0]; // Pega o encantamento int level = Integer.parseInt(partes[1]); // Pega o level do encantamento boolean ignore = Boolean.parseBoolean(partes[2]); // Pega o valor logico(se quer que ultrapasse ou não o limite dos encantamentos) m.addEnchant(Enchantment.getByName(encNome), level, ignore); // adiciona o encantamento ao item } } item.setItemMeta(m); } Na config os encantamentos devem ficar assim:
Sword: Encantamentos: - "FIRE_ASPECT:1:true" - "ARROW_INFINITE:1:true" -
smgabriel's postagem in [DÚVIDA] COMO REMOVER APENAS 1 ITEM DO INVENTÁRIO? was marked as the answer
Fiz esse método mas não cheguei a testar, presumo que vá funcionar:
void removeItem(ItemStack item, Player p) { int amount = item.getAmount(); if (amount > 1) { // Se for maior que um item.setAmount(amount - 1); //tira um } else { // caso contrario... p.getInventory().remove(item); //remove o item(se for igual a 1) } } -
smgabriel's postagem in Como checar itens inventario was marked as the answer
Você pode fazer um loop pegando todos os itens do player, verificar se algum item do inventario é o que você quer e verificar a quantia, por exemplo:
public Boolean checkItem(Player p, Material type) { Inventory inv = p.getInventory(); for (ItemStack s : inv.getContents()) { if (s != null) { // (não sei se é necessario isso) if (s.getType().equals(type)) { if (s.getAmount() == 30) { Bukkit.broadcastMessage("Yeeaahh"); return true; } } } } return false; } Ah, não testei.
-
smgabriel's postagem in Como faço isso? Verificar item e quantidade was marked as the answer
Simples, olhe os métodos dessa classe:
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/ItemStack.html
(o link acima esta bugado)https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/ItemStack.html
Ok ok, observou que tinha getAmount();?
Então, este método retorna um INTEGER.
Só verificar se a quantia do itemstack (getItem(4)) é igual a 1, exemplo:
Inventory inventory = Bukkit.createInventory(null, 54); ItemStack diamante = new ItemStack(Material.DIAMOND); if(inventory.getItem(4) != null){ // Verifica se o item não é nulo if(inventory.getItem(4).equals(diamante)){ if(inventory.getItem(4).getAmount() == 1){ // Caso o item seja um diamante e a quantia dele é igual 1, vai acontecer algo. }else{ // Caso item seja um diamante e a quantia dele é maior que 1, vai acontecer algo. } }else{ // Caso o item não seja um diamante, vai acontecer algo. } -
smgabriel's postagem in SimplesClan was marked as the answer
Para fazer o hook: https://dev.bukkit.org/projects/simpleclans/pages/simple-clans1-api
Para pegar a tag do clan:
ClanPlayer cp = sc.getClanManager().getClanPlayer(p).getTag(); De uma forma que não causa erros(é... eu acho):
public void getTag(CommandSender sender, String player) { Player p = Bukkit.getPlayer(player); if(p != null) { if (sc != null) { ClanPlayer cp = sc.getClanManager().getClanPlayer(p); if (cp != null) { Clan clan = cp.getClan(); clan.getTag(); sender.sendMessage("A tag do clan é: "+clan.getTag()); }else{ sender.sendMessage("Este player não tem clan!"); return; } }else{ sender.sendMessage("Algo de errado não esta certo..."); return; } }else{ sender.sendMessage("Player offline!"); } } -
smgabriel's postagem in [Resolvido] [Duvida] Erro no version: was marked as the answer
Você esta compilando o plugin em uma versão do java e executando ele em outra, exemplo: fiz em java 8 e estou tentando iniciar em java 7 = erro.
Se você compila em java 7, tem que ser executado no java 7;
Se você compila em java 8, tem que ser executado no java 8;
-
smgabriel's postagem in [Resolvido] Duvida-MenuGui was marked as the answer
Eu compilei o código anterior e não funcionou também, a parte de cancelar que o player pegue o item, não esta registrada, registre o evento na onEnable e ele vai funcionar, aqui o código: http://hastebin.com/fecejakibe.java
Funcionou aqui, creio eu que deve funcionar ai também.
@edit
Link atualizado.