EpicEnchants/src/main/java/com/songoda/epicenchants/listeners/item/DustListener.java

65 lines
2.3 KiB
Java

package com.songoda.epicenchants.listeners.item;
import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem;
import com.songoda.epicenchants.EpicEnchants;
import com.songoda.epicenchants.objects.Enchant;
import com.songoda.epicenchants.objects.Group;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import java.util.concurrent.ThreadLocalRandom;
public class DustListener extends ItemListener {
public DustListener(EpicEnchants instance) {
super(instance);
}
@Override
void onApply(InventoryClickEvent event, NBTItem cursor, NBTItem current) {
if (!cursor.hasKey("dust") || !cursor.getBoolean("dust")) {
return;
}
if (!current.hasKey("book-item") || !current.getBoolean("book-item")) {
return;
}
Enchant enchant = instance.getEnchantManager().getValue(current.getString("enchant")).orElseThrow(() -> new IllegalStateException("Book without enchant!"));
if (!enchant.getGroup().equals(instance.getGroupManager().getValue(cursor.getString("group")).orElseThrow(() -> new IllegalStateException("Dust without group!")))) {
return;
}
int successRate = current.getInteger("success-rate");
if (successRate == 100) {
return;
}
successRate = Math.min(successRate + cursor.getInteger("percentage"), 100);
event.setCurrentItem(enchant.getBook().get(enchant, current.getInteger("level"), successRate, current.getInteger("destroy-rate")));
event.setCancelled(true);
useItem(event);
}
@Override
void onClick(PlayerInteractEvent event, NBTItem clicked) {
if (!clicked.hasKey("secret-dust") || !clicked.getBoolean("secret-dust")) {
return;
}
event.setCancelled(true);
if (event.getItem().getAmount() != 1 && event.getPlayer().getInventory().firstEmpty() == -1) {
return;
}
Group group = instance.getGroupManager().getValueUnsafe(clicked.getString("group"));
int rate = ThreadLocalRandom.current().nextInt(clicked.getInteger("min-rate"), clicked.getInteger("max-rate"));
useItem(event);
event.getPlayer().getInventory().addItem(instance.getSpecialItems().getDust(group, null, rate, false));
}
}