Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z automatycznym dropem do ekwipunku


blinkz8

Rekomendowane odpowiedzi

Opublikowano

Mam problem z automatycznym dodawaniem przedmiotu przy zniszczeniu bloku do ekwipunku.

Mianowicie narzędzie, którego użył gracz do zniszczenia bloku, nie traci swojej wytrzymałości. Próbowałem większości rozwiązań z internetu ale nie działały. Same dodawanie przedmiotów działa.

Piszę na spigocie-1.8.8R0.1.

 

public class SetDurabilityTask implements Runnable {
	
	private StoneDrops plugin;
	private ItemStack item;
	private int tid;
	
	
	public SetDurabilityTask(StoneDrops plugin, ItemStack item, int tid) {
		this.plugin = plugin;
		this.item = item;
		this.tid = tid;
	}
	
	
	
	public void run() {
		int taskid = plugin.getTasks().get(tid);
		Bukkit.getScheduler().cancelTask(taskid);
		plugin.getTasks().remove(taskid);
		
		item.setDurability((short) (item.getDurability() - 1));
	}
}
@EventHandler
public void onBreak(BlockBreakEvent e) {
	Player p = e.getPlayer();
	ItemStack tool = p.getItemInHand();
	Block b = e.getBlock();
    	
	setDurability(tool);
	b.setType(Material.AIR);
}
      

public void setDurability(ItemStack item) {
	int id = ids+1;
		
	SetDurabilityTask task = new SetDurabilityTask(plugin, item, id);
	int taskid = Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, task, 15).getTaskId();
	plugin.getTasks().put(id, taskid);
}
 

Po zmienieniu typu bloku na AIR żadne przedmioty nie dropią po zniszczeniu bloku ale narzędzie nie traci wytrzymałości :(.

 

Wyżej wkleiłem jedną z moich prób. Próbowałem zmienić wytrzymałość narzędzia po wykonaniu wydarzenia ale nadal nie otrzymałem zamierzonego celu.

Przez ubogie API nie mam więcej pomysłów.

Liczę na waszą pomoc :13_upside_down:.

Opublikowano

Po jednym dniu udało mi się to zrobić samemu.

Jakby był ktoś ciekawy jak to zroobiłem, to zmieniłem moją metodę setDurability na:

 

public static void setDurability(Player player, ItemStack item) {
	if(item.getType().getMaxDurability() == 0) {
		return;
	}
		
	ItemStack cloned = item.clone();
	int enchantLevel = item.getEnchantmentLevel(Enchantment.DURABILITY);
	int slot = player.getInventory().getHeldItemSlot();
		
	if(enchantLevel > 0) {
		int damage = calculateDamage(enchantLevel);
			
		cloned.setDurability((short) (item.getDurability() + damage));
		player.getInventory().setItem(slot, cloned);
	}
		
	if(cloned.getDurability() == cloned.getType().getMaxDurability()) {
		player.getInventory().setItem(slot, new ItemStack(Material.AIR, 1));
		player.getWorld().playSound(player.getLocation(), Sound.ITEM_BREAK, 1.0F, 1.0F);
	}
}

 

  • Amove zmienił(a) tytuł na Problem z automatycznym dropem do ekwipunku
  • sk8erace1 zablokował(a) ten temat

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...