Ir para conteúdo
  • 0

[Resolvido] [Erro] - Por que a lore não está setando?


Arkasher

Pergunta

Não estou entendendo porque a lore não está setando... Já usei isso váááárias vezes e nunca deu erro, ai agora vem e dá o erro.

 

Código: 

for(String s : cfg.getKeys(false)) {
							ItemStack item = new ItemStack(Material.getMaterial(cfg.getInt(s+".Id")), cfg.getInt(s+".Quantidade"));
							
							ItemMeta itemm = item.getItemMeta();
							
							if(cfg.getString(s+".Nome") != null) {
								itemm.setDisplayName(cfg.getString(s+".Nome").replaceAll("&", "§"));
							}
							
							if(cfg.getString(s+".Encantamentos") != null) {
								itemm.addEnchant(Enchantment.getByName(cfg.getString(s+".Encantamentos")), 1, true);
							}
							
							ArrayList<String> lore = new ArrayList<String>();
					        lore.add("§7 "+cfg.getString(s+".Descricao"));
					        lore.add("§b  ");
					        lore.add("§7Preço: §f"+cfg.getInt(s+".Preco"));
							
					        itemm.setLore(lore);
					        
							item.setItemMeta(itemm);
							
							itens.addItem(item);
							
						}

Obs > Não é erro que não está encontrando a string na config, até porque, tentei colocar o lore com qualquer texto, sem pegar nada da config.

 

Erro:

[13:23:52 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'shop' in plugin arLojaSystem v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[Spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[Spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_91]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_91]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [Spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
Caused by: java.lang.NullPointerException
        at Loja.Comandos.onCommand(Comandos.java:119) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[Spigot.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more

O erro é no itemm.setLore(lore);

Link para o comentário
Compartilhar em outros sites

21 respostass a esta questão

Posts Recomendados

Guest gkovalechyn

Por algum motivo, as vezes o getItemMeta pode retornar null. Se for esse o caso (Se a linha 119 estiver usando a variável "itemm") você vai ter que usar isso para gerar o ItemMeta:

 

Bukkit.getItemFactory().getItemMeta(item.getType())
Link para o comentário
Compartilhar em outros sites

é o itemm.setLore(lore);

 

Eu vi que deu NPE, não sei de que, só se não estiver adicionando o valor na array...

Faz o Loop na array e Imprime o que tem Dentro Dela pra ver se ta sentando

Link para o comentário
Compartilhar em outros sites

 

Por algum motivo, as vezes o getItemMeta pode retornar null. Se for esse o caso (Se a linha 119 estiver usando a variável "itemm") você vai ter que usar isso para gerar o ItemMeta:

 

 

Bukkit.getItemFactory().getItemMeta(item.getType())

 

Ainda deu o msm erro

Faz o Loop na array e Imprime o que tem Dentro Dela pra ver se ta sentando

Já fiz isso, e tá adicionando normal o valor na array.

Link para o comentário
Compartilhar em outros sites

é o itemm.setLore(lore);

 

Eu vi que deu NPE, não sei de que, só se não estiver adicionando o valor na array...

Que estranho, teste isso:

for(String s : cfg.getKeys(false)) {
	ItemStack item = new ItemStack(Material.getMaterial(cfg.getInt(s+".Id")), cfg.getInt(s+".Quantidade"));
	
	ItemMeta itemm = item.getItemMeta();
	
	if(cfg.getString(s+".Nome") != null) {
		itemm.setDisplayName(cfg.getString(s+".Nome").replaceAll("&", "§"));
	}
	
	if(cfg.getString(s+".Encantamentos") != null) {
		itemm.addEnchant(Enchantment.getByName(cfg.getString(s+".Encantamentos")), 1, true);
	}
	
	List<String> lore = Arrays.asList("§7 "+cfg.getString(s+".Descricao"), "§b ", "§7Preço: §f"+cfg.getInt(s+".Preco"));
	itemm.setLore(lore);
	
	item.setItemMeta(itemm);
	
	itens.addItem(item);
	
}

É praticamente seu código

Outra coisa, você pode estar pegando um id de um item inválido aqui:

Material.getMaterial(cfg.getInt(s+".Id"))
Editado por Dery
Link para o comentário
Compartilhar em outros sites

 

Que estranho, teste isso:

for(String s : cfg.getKeys(false)) {
	ItemStack item = new ItemStack(Material.getMaterial(cfg.getInt(s+".Id")), cfg.getInt(s+".Quantidade"));
	
	ItemMeta itemm = item.getItemMeta();
	
	if(cfg.getString(s+".Nome") != null) {
		itemm.setDisplayName(cfg.getString(s+".Nome").replaceAll("&", "§"));
	}
	
	if(cfg.getString(s+".Encantamentos") != null) {
		itemm.addEnchant(Enchantment.getByName(cfg.getString(s+".Encantamentos")), 1, true);
	}
	
	List<String> lore = Arrays.asList("§7 "+cfg.getString(s+".Descricao"), "§b ", "§7Preço: §f"+cfg.getInt(s+".Preco"));
	itemm.setLore(lore);
	
	item.setItemMeta(itemm);
	
	itens.addItem(item);
	
}

É praticamente seu código

Outra coisa, você pode estar pegando um id de um item inválido aqui:

Material.getMaterial(cfg.getInt(s+".Id"))

Já havia tentado isso, e também deu erro (Sim, eu tirei o get da descrição para ver se era isso, e não é).

Sobre o ID, num é inválido, até porque, se eu tiro o código do lore ele abre normalmente.

 

;-;

Editado por Arkasher
Link para o comentário
Compartilhar em outros sites

				        lore.add("§7 "+cfg.getString(s+".Descricao"));
					        lore.add("§b  ");
					        lore.add("§7Preço: §f"+cfg.getInt(s+".Preco"));

Há chances de algum desses valores esta nulo..

 

 Porém a meta ou o item deve estar nulo 

 

 

Nem ta

ItemMeta itemm = Bukkit.getItemFactory().getItemMeta(item.getType());
item.setItemMeta(itemm);

 O correto não seria?

ItemMeta itemm = item.getItemMeta(); 
Link para o comentário
Compartilhar em outros sites

Guest gkovalechyn

 

Nem ta

ItemMeta itemm = Bukkit.getItemFactory().getItemMeta(item.getType());
item.setItemMeta(itemm);

 

Não estava dando erro em "itemm.setLore(lore);"? Se ainda estiver dando erro na mesma linha que você falout antes, a única coisa  que pode estar nula é o "itemm". No comando, mande uma mensagem para você para ver se o itemm está nulo mesno ou não.

 

Edit: Gramática.

Editado por gkovalechyn
Link para o comentário
Compartilhar em outros sites

Eu defino minha arraylist assim

ArrayList<String> lore = new ArrayList<>();

A sua está

ArrayList<String> lore = new ArrayList<String>();

Não sei se tem diferença .-.

Link para o comentário
Compartilhar em outros sites

Eu defino minha arraylist assim

ArrayList<String> lore = new ArrayList<>();

A sua está

ArrayList<String> lore = new ArrayList<String>();

Não sei se tem diferença .-.

 Não.. Não tem diferença

Link para o comentário
Compartilhar em outros sites

				        lore.add("§7 "+cfg.getString(s+".Descricao"));
					        lore.add("§b  ");
					        lore.add("§7Preço: §f"+cfg.getInt(s+".Preco"));

Há chances de algum desses valores esta nulo..

 

 Porém a meta ou o item deve estar nulo 

 

 O correto não seria?

ItemMeta itemm = item.getItemMeta(); 

Eu já chequei todos os NPE's, removi o que poderia ser e ainda nem foi.

Eu também já tentei com o item.getItemMeta(); e não foi ;-;

 

Não estava dando erro em "itemm.setLore(lore);"? Se ainda estiver dando erro na mesma linha que você falout antes,  que pode estar nula é o "itemm". No comando, mande uma mensagem para você para ver se o itemm está nulo mesno ou não.

Sim, está ainda na mesma linha. Vou fazer o que disse.

 

Eu defino minha arraylist assim

ArrayList<String> lore = new ArrayList<>();

A sua está

ArrayList<String> lore = new ArrayList<String>();

Não sei se tem diferença .-.

Já tentei das duas formas, e nada

Link para o comentário
Compartilhar em outros sites

Eu já chequei todos os NPE's, removi o que poderia ser e ainda nem foi.

Eu também já tentei com o item.getItemMeta(); e não foi ;-;

 

Sim, está ainda na mesma linha. Vou fazer o que disse.

 

Já tentei das duas formas, e nada

 Err agora eu não to conseguindo ver direito o código.. Mas nesse caso eu recomendo você fazer um debug..

 Basicamente em cada linha de um System.out.println() ou um sendMessage() e na hora de executar você ve quais linhas tão indo e quais não estão.. Ai você pode ter uma idéia aonde esta parando

Link para o comentário
Compartilhar em outros sites

 Err agora eu não to conseguindo ver direito o código.. Mas nesse caso eu recomendo você fazer um debug..

 Basicamente em cada linha de um System.out.println() ou um sendMessage() e na hora de executar você ve quais linhas tão indo e quais não estão.. Ai você pode ter uma idéia aonde esta parando

 

 Err agora eu não to conseguindo ver direito o código.. Mas nesse caso eu recomendo você fazer um debug..

 Basicamente em cada linha de um System.out.println() ou um sendMessage() e na hora de executar você ve quais linhas tão indo e quais não estão.. Ai você pode ter uma idéia aonde esta parando

Vou fazer isso.

Link para o comentário
Compartilhar em outros sites

 

Tenta assim

for(String s : cfg.getConfigurationSection("Nome").getKeys(false)) {

//seu codigo
}

Não tem como eu usar assim, até porque, ele salva na config por um número, por exemplo: Na config ta o 1, vai e seta o 2, sem usar seções.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...