Ir para conteúdo
  • 0

Clear Drops em Runnable


zNicolas__

Pergunta

Bom dia, quero que quando um Player morrer apos o BukkitRunable rodar, os itens do Player que morreu que peguei apartir do evento PlayerDeathEvent sumir

 

Estou com um erro, quando coloco e.getDrops().clear(); fora do task funciona, eu mato o Player e some na hora..

 

agora quando coloco dentro do Task ele n funciona.. abaixo está meu codigo.

@EventHandler
	public void aoMorrer(PlayerDeathEvent e) {
		Player killer = e.getEntity().getKiller();
		killer.sendMessage("Voce venceu, voce tem 30 segundos para pegar os itens do chao!");
		
		new BukkitRunnable() {

			@Override
			public void run() {
				e.getDrops().clear();
				killer.teleport(Locations.getSaida());
			}
		}.runTaskLater(Main.plugin, 5 * 20);
	}
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

O problema é que esse "getDrops()" retorna uma lista de "ItemStack" que depois que é "dropado", ele vira uma entidade, por isso não remove.

Você pode simplesmente "dropar" manualmente os items do jogador e salva-los em uma nova lista, ai sim, você poderá remove-los.

Link para o comentário
Compartilhar em outros sites

Você pode criar um método para "dropar" os items e salva-los em uma lista, tipo assim:

List<Item> spawnItems(Location loc, List<ItemStack> items){
		List<Item> droppeditems = new ArrayList<>();
		for(ItemStack it : items){
			Item item = loc.getWorld().dropItem(loc, it);
			droppeditems.add(item);
		}
		return droppeditems;
	}

no evento, ficaria assim:

@EventHandler
	private void onDeath(PlayerDeathEvent evt){
		List<Item> droppeditems = spawnItems(evt.getEntity().getLocation(), evt.getDrops());
		evt.getDrops().clear();
		new BukkitRunnable(){
			public void run(){
				if(droppeditems.size() > 0){
					for(Item i : droppeditems){
						if(i != null){
							i.remove();
						}
					}
				}
			}
		}.runTaskLaterAsynchronously(Main.instance, 20*30);
	}
Link para o comentário
Compartilhar em outros sites

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