Ir para conteúdo
  • 0

Criar custom enchants, estilo o plugin CustomEnchants


TequilAxBr

Pergunta

Oi pessoas

Gostaria de saber se alguém ai sabe como criar Custom Enchants, estilo o plugin CustomEnchants do bukkit...

Encontrei isso: https://bukkit.org/threads/custom-enchantments-you-say-what.160684/

Mas slá kk..

 

Plugin CustomEnchantsment que me refiro no tópico: https://dev.bukkit.org/projects/custom-enchantments

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

20 respostass a esta questão

Posts Recomendados

É assim mesmo

 

https://bukkit.org/threads/custom-enchantments-you-say-what.160684/

 

Você cria uma classe extendendo a classe enchant, e coloca ela usando reflection, só essa parte aqui que acho que você irá mudar

public static CustomEnchantment ench = new CustomEnchantment(69);

 

Pois o ID ai esta 69, e se não me engano, da ultima vez que mexi com bukkit, o spigot já tinha ultrapassado este valor nos enchants, lembro que até usei +100 de id, da uma olhada na classe que tu vai saber, se for pra 1.5.2 se não me engano tu pode usar 70 por ai, não lembro, mas é isso ai

Link para o comentário
Compartilhar em outros sites

É assim mesmo

 

https://bukkit.org/threads/custom-enchantments-you-say-what.160684/

 

Você cria uma classe extendendo a classe enchant, e coloca ela usando reflection, só essa parte aqui que acho que você irá mudar

 

Pois o ID ai esta 69, e se não me engano, da ultima vez que mexi com bukkit, o spigot já tinha ultrapassado este valor nos enchants, lembro que até usei +100 de id, da uma olhada na classe que tu vai saber, se for pra 1.5.2 se não me engano tu pode usar 70 por ai, não lembro, mas é isso ai

Saquei, então só seguir o passo a passo né?

E tipo posso por um id, por exemplo: 78789997 ?

Link para o comentário
Compartilhar em outros sites

Pode até o limite do int se não me engano, mas usa tipo +200, não vai passar disso, e se passar, vai demorar ainda

Consegui fazer aqui.

Tenho outras dúvidas, se souber a resposta:

1º: Dei uma lida nos posts lá do tópico do bukkit, e o pessoal disse que não daria para encantar por exemplo algum item com o encantamento que eu criei na mesa de encantamentos. Queria saber se da para encantar ou não?

2º: Se eu criar um enchanted book, adicionar esse encantamento e tentar juntar na bigorna, se eu fizer isso funcionaria? Ou eu teria que criar um sistema para juntar o livro com o item?

3º: E para eu definir as funcionalidades dos encantamentos, seria assim: Iria usar listeners e pá, verifica se por exemplo no item tinha o encantamento se tivesse realizava a ação, seria isso?

Link para o comentário
Compartilhar em outros sites

Consegui fazer aqui.

Tenho outras dúvidas, se souber a resposta:

1º: Dei uma lida nos posts lá do tópico do bukkit, e o pessoal disse que não daria para encantar por exemplo algum item com o encantamento que eu criei na mesa de encantamentos. Queria saber se da para encantar ou não?

2º: Se eu criar um enchanted book, adicionar esse encantamento e tentar juntar na bigorna, se eu fizer isso funcionaria? Ou eu teria que criar um sistema para juntar o livro com o item?

3º: E para eu definir as funcionalidades dos encantamentos, seria assim: Iria usar listeners e pá, verifica se por exemplo no item tinha o encantamento se tivesse realizava a ação, seria isso?

1º - Não, ela não irá aparecer na mesa de encantamento

2º - Essa questão da bigorna eu nunca tinha parado para pensar, só testando mesmo

3º - Viável, sim, pode-se fazer desde modo também, fica até mais fácil, basta saber fazer.

Link para o comentário
Compartilhar em outros sites

Já tentei fazer isso, e criando uma classe que extende encantamento não dá certo porque quando eu fiz, não apareceu no item, fiz um debug e dizia que estava encantado mas não aparecia no item, então para aparecer eu teria que adicionar algo na lore, e para isso nem valia a pena criar a tal classe, apenas colocava na lore..

Além que esse id do encantamento tem limite sim, só não sei qual é.

 

Resumindo, vai precisar de mexer na lore de qualquer maneira, então o melhor é só mexer na lore mesmo.

Tem um plugin de encantamentos muito baixado no spigot, o CrazyEnchantments que é open-src, pode dar uma olhada lá.. Também usam a lore apenas.

Link para o comentário
Compartilhar em outros sites

Já tentei fazer isso, e criando uma classe que extende encantamento não dá certo porque quando eu fiz, não apareceu no item, fiz um debug e dizia que estava encantado mas não aparecia no item, então para aparecer eu teria que adicionar algo na lore, e para isso nem valia a pena criar a tal classe, apenas colocava na lore..

Além que esse id do encantamento tem limite sim, só não sei qual é.

 

Resumindo, vai precisar de mexer na lore de qualquer maneira, então o melhor é só mexer na lore mesmo.

Tem um plugin de encantamentos muito baixado no spigot, o CrazyEnchantments que é open-src, pode dar uma olhada lá.. Também usam a lore apenas.

O limite é o int só, e a questão de aparecer, para aparecer no lore, não tem como mesmo pq não é do minecraft, então isso é óbvio, e usar apenas lore tem suas falhas, a lore só se usa para "mostrar" que aquele item possui tal encantamento, fora isto, tende-se utilizar uma classe de custom enchant, para quem quer fazer coisas básicas tudo bem, pode usar só lore.

Link para o comentário
Compartilhar em outros sites

O limite é o int só, e a questão de aparecer, para aparecer no lore, não tem como mesmo pq não é do minecraft, então isso é óbvio, e usar apenas lore tem suas falhas, a lore só se usa para "mostrar" que aquele item possui tal encantamento, fora isto, tende-se utilizar uma classe de custom enchant, para quem quer fazer coisas básicas tudo bem, pode usar só lore.

Entendo, custom enchant é mais viável para verificar se tem tal encantamento, mas se não usar nenhum plugin que mexa com lore ou que coloque alguma lore com o mesmo nome de algum encantamento, não vejo nenhuma falha em usar apenas a lore..

Usar o custom enchant e a lore acaba por ser mais seguro, para usar apenas a lore acaba por ser mais fácil porém tem que ser mais cauteloso com a compatibilidade com outros plugins.

Link para o comentário
Compartilhar em outros sites

1º - Não, ela não irá aparecer na mesa de encantamento

2º - Essa questão da bigorna eu nunca tinha parado para pensar, só testando mesmo

3º - Viável, sim, pode-se fazer desde modo também, fica até mais fácil, basta saber fazer.

Tem alguma ideia de como fazer para aparecer na mesa de encantamento? O plugin CustomEnchantments faz isso kk...

Link para o comentário
Compartilhar em outros sites

Tem alguma ideia de como fazer para aparecer na mesa de encantamento? O plugin CustomEnchantments faz isso kk...

ele deve usar o evento EnchantItemEvent e verifica os enchants compatíveis/incompatíveis com o enchant custom alem de colocar um chance do enchant desejado ser adicionado no item que esta sendo encantado.

Link para o comentário
Compartilhar em outros sites

ele deve usar o evento EnchantItemEvent e verifica os enchants compatíveis/incompatíveis com o enchant custom alem de colocar um chance do enchant desejado ser adicionado no item que esta sendo encantado.

Vou dar uma olhada e testar aqui, valeu

Link para o comentário
Compartilhar em outros sites

Vou dar uma olhada e testar aqui, valeu

Pode usar também o PrepareItemEnchantEvent, usa o .getOffers() que retorna uma lista de EnchantmentOffer, em cada EnchantmentOffer você pode usar .setCost() , .setLevel() e .setEnchantment(CustomEnchant) ou .setEnchantment(Enchantment.getById(69)). Ae o próprio bukkit randomiza as 3 ofertas e encanta com uma delas.

 

Ou então usa o EnchantItemEvent, cancela o evento, adiciona os encantamentos que quiser e retiro o xp que quiser.

Link para o comentário
Compartilhar em outros sites

Pode usar também o PrepareItemEnchantEvent, usa o .getOffers() que retorna uma lista de EnchantmentOffer, em cada EnchantmentOffer você pode usar .setCost() , .setLevel() e .setEnchantment(CustomEnchant) ou .setEnchantment(Enchantment.getById(69)). Ae o próprio bukkit randomiza as 3 ofertas e encanta com uma delas.

 

Ou então usa o EnchantItemEvent, cancela o evento, adiciona os encantamentos que quiser e retiro o xp que quiser.

Entendi, vlw.

O limite é o int só, e a questão de aparecer, para aparecer no lore, não tem como mesmo pq não é do minecraft, então isso é óbvio, e usar apenas lore tem suas falhas, a lore só se usa para "mostrar" que aquele item possui tal encantamento, fora isto, tende-se utilizar uma classe de custom enchant, para quem quer fazer coisas básicas tudo bem, pode usar só lore.

Olha a parte que comentei no código, estou tendo alguns problemas:

	@Enchant(name = "Icemind", id = 110, startLevel = 1, maxLevel = 3)
	@EventHandler
	public void enchantmentIcemind(EntityDamageByEntityEvent event) {
		if (event.getDamager() instanceof Player) {
			// Player entity = (Player) event.getEntity();
			Player damager = (Player) event.getDamager();
			if (damager.getItemInHand() != null && damager.getItemInHand().getTypeId() != 0) {
				ItemStack item = damager.getItemInHand();
				Enchantment ench = plugin.getEnchantmentManager().getEnchamentFromName("Icemind");
				if (item.containsEnchantment(ench)) { //Sabe me dizer por que isso não me retorna verdadeiro?
					//Era pra funcionar, não? 
					//Já debuguei o "ench" e ele me retorna tudo certinho: Enchantment[110, Icemin]
					Bukkit.broadcastMessage("Enchants presentes: " + item.getEnchantments()); //Porem quando faço isso, ele me retorna uma arraylist sem nada...
					int level = item.getEnchantmentLevel(ench); //Consequentemente aqui me retorna 0.
					switch (level) {
					case 1:
						if ((Math.random() * 100) <= 10) {
							dropSnowballInTarget(damager, event.getEntity());
						}
						break;
					case 2:
						if ((Math.random() * 100) <= 20) {
							dropSnowballInTarget(damager, event.getEntity());
						}
						break;
					case 3:
						if ((Math.random() * 100) <= 30) {
							dropSnowballInTarget(damager, event.getEntity());
						}
						break;
					}
				}
			}
		}
	}
Link para o comentário
Compartilhar em outros sites

Em vez do .getEnchantmentFromName tenta

.getById(id)

Se isso não der esqueçe isso e tenta item.containsEnchantment(classe do encantamento)

O método getEnchantmentFromName é eu que fiz, pq fiz de um jeito mais fácil para criar encantamentos, olha a anotação lá em cima do evento

Link para o comentário
Compartilhar em outros sites

Dessa maneira não vai dar a lado nenhum.. para ver que tem encantamento precisa da lore.

Pode até ver na página do plugin a que se refere, tem lá a src..

Saquei...

Então vou fazer uma classe utilitária para criar os encantamentos, vlw ai...

 

Agora, em quem dou resolvido? Os dois colaboraram...

Link para o comentário
Compartilhar em outros sites

Saquei...

Então vou fazer uma classe utilitária para criar os encantamentos, vlw ai...

 

Agora, em quem dou resolvido? Os dois colaboraram...

kkkk pede para fechar o tópico, senão dá ao mike, não ligo muito à melhor resposta

Link para o comentário
Compartilhar em outros sites

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