Fixed anvil dupe

This commit is contained in:
BuildTools
2020-11-13 12:18:34 +00:00
parent 6c0f977824
commit fede492f11
2 changed files with 21 additions and 61 deletions

View File

@@ -3,9 +3,9 @@ package com.willfp.ecoenchants.enchantments.support.merging.anvil;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.nms.RepairCost;
import com.willfp.ecoenchants.util.EcoBukkitRunnable;
import com.willfp.ecoenchants.util.NumberUtils;
import com.willfp.ecoenchants.util.tuplets.Pair;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -46,32 +46,29 @@ public class AnvilListeners implements Listener {
modCost = newOut.getSecond();
}
new EcoBukkitRunnable(player.getTicksLived()) {
@Override
public void onRun() {
int preCost = event.getInventory().getRepairCost();
ItemStack item = newOut.getFirst();
Bukkit.getScheduler().runTask(EcoEnchantsPlugin.getInstance(), () -> {
int preCost = event.getInventory().getRepairCost();
ItemStack item = newOut.getFirst();
if(event.getInventory().getItem(0) == null) return;
if(event.getInventory().getItem(0) == null) return;
if(!Objects.requireNonNull(event.getInventory().getItem(0)).getType().equals(item.getType())) return;
if(!Objects.requireNonNull(event.getInventory().getItem(0)).getType().equals(item.getType())) return;
if(ConfigManager.getConfig().getBool("anvil.rework-cost")) {
int repairCost = RepairCost.getRepairCost(item);
int reworkCount = NumberUtils.log2(repairCost + 1);
if (repairCost == 0) reworkCount = 0;
reworkCount++;
repairCost = (int) Math.pow(2, reworkCount) - 1;
item = RepairCost.setRepairCost(item, repairCost);
}
int cost = preCost + modCost;
event.getInventory().setRepairCost(cost);
event.setResult(item);
event.getInventory().setItem(2, item);
player.updateInventory();
if(ConfigManager.getConfig().getBool("anvil.rework-cost")) {
int repairCost = RepairCost.getRepairCost(item);
int reworkCount = NumberUtils.log2(repairCost + 1);
if (repairCost == 0) reworkCount = 0;
reworkCount++;
repairCost = (int) Math.pow(2, reworkCount) - 1;
item = RepairCost.setRepairCost(item, repairCost);
}
}.runTask(EcoEnchantsPlugin.getInstance());
int cost = preCost + modCost;
event.getInventory().setRepairCost(cost);
event.setResult(item);
event.getInventory().setItem(2, item);
player.updateInventory();
});
}
}

View File

@@ -1,37 +0,0 @@
package com.willfp.ecoenchants.util;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.HashSet;
import java.util.Set;
public abstract class EcoBukkitRunnable extends BukkitRunnable {
private static final Set<Integer> tasks = new HashSet<>();
private final int ecoID;
public EcoBukkitRunnable(int ecoID) {
this.ecoID = ecoID;
}
public int getEcoID() {
return ecoID;
}
@Override
public final void run() {
if(tasks.contains(this.getEcoID())) {
Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> {
tasks.remove(this.getEcoID());
}, 1);
return;
}
onRun();
tasks.add(this.getEcoID());
}
public abstract void onRun();
}