Optimised Decay Curse and Repairing
This commit is contained in:
@@ -7,10 +7,19 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||
import com.willfp.ecoenchants.util.DurabilityUtils;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDropItemEvent;
|
||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Repairable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public final class DecayCurse extends EcoEnchant implements EcoRunnable {
|
||||
public DecayCurse() {
|
||||
super(
|
||||
@@ -18,26 +27,61 @@ public final class DecayCurse extends EcoEnchant implements EcoRunnable {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private final Set<Player> players = new HashSet<>();
|
||||
private int amount;
|
||||
|
||||
@EventHandler
|
||||
public void onItemPickup(EntityPickupItemEvent event) {
|
||||
if(!(event.getEntity() instanceof Player))
|
||||
return;
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerLeave(PlayerQuitEvent event) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryDrop(EntityDropItemEvent event) {
|
||||
if(!(event.getEntity() instanceof Player))
|
||||
return;
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
players.clear();
|
||||
EcoEnchantsPlugin.getInstance().getServer().getOnlinePlayers().forEach(player -> {
|
||||
if(Arrays.stream(player.getInventory().getContents()).parallel().anyMatch(item -> EnchantChecks.item(item, EcoEnchants.DECAY_CURSE)))
|
||||
players.add(player);
|
||||
});
|
||||
amount = EcoEnchants.DECAY_CURSE.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "damage");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
EcoEnchantsPlugin.getInstance().getServer().getOnlinePlayers().forEach((player -> {
|
||||
if(Arrays.stream(player.getInventory().getContents()).parallel().noneMatch(item2 -> EnchantChecks.item(item2, EcoEnchants.DECAY_CURSE)))
|
||||
return;
|
||||
|
||||
for(ItemStack item : player.getInventory().getContents()) {
|
||||
if(!EnchantChecks.item(item, EcoEnchants.DECAY_CURSE)) continue;
|
||||
|
||||
if(!(item.getItemMeta() instanceof Repairable)) continue;
|
||||
|
||||
if(player.getInventory().getItemInMainHand().equals(item)) continue;
|
||||
if(player.getInventory().getItemInOffHand().equals(item)) continue;
|
||||
if(player.getItemOnCursor().equals(item)) continue;
|
||||
|
||||
|
||||
int damage = EcoEnchants.DECAY_CURSE.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "damage");
|
||||
|
||||
DurabilityUtils.damageItemNoBreak(item, damage, player);
|
||||
}
|
||||
players.forEach((player -> {
|
||||
Arrays.stream(player.getInventory().getContents())
|
||||
.filter(ItemStack::hasItemMeta)
|
||||
.filter(item -> item.getItemMeta().hasEnchant(EcoEnchants.DECAY_CURSE))
|
||||
.filter(item -> player.getInventory().getItemInOffHand().equals(item))
|
||||
.filter(item -> player.getInventory().getItemInMainHand().equals(item))
|
||||
.filter(item -> player.getItemOnCursor().equals(item))
|
||||
.forEach(item -> {
|
||||
DurabilityUtils.repairItem(item, amount);
|
||||
}
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
@@ -7,10 +7,19 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||
import com.willfp.ecoenchants.util.DurabilityUtils;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDropItemEvent;
|
||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Repairable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public final class Repairing extends EcoEnchant implements EcoRunnable {
|
||||
public Repairing() {
|
||||
super(
|
||||
@@ -18,28 +27,62 @@ public final class Repairing extends EcoEnchant implements EcoRunnable {
|
||||
);
|
||||
}
|
||||
|
||||
private final Set<Player> players = new HashSet<>();
|
||||
private int multiplier;
|
||||
|
||||
@EventHandler
|
||||
public void onItemPickup(EntityPickupItemEvent event) {
|
||||
if(!(event.getEntity() instanceof Player))
|
||||
return;
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerLeave(PlayerQuitEvent event) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryDrop(EntityDropItemEvent event) {
|
||||
if(!(event.getEntity() instanceof Player))
|
||||
return;
|
||||
refresh();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
players.clear();
|
||||
EcoEnchantsPlugin.getInstance().getServer().getOnlinePlayers().forEach(player -> {
|
||||
if(Arrays.stream(player.getInventory().getContents()).parallel().anyMatch(item -> EnchantChecks.item(item, EcoEnchants.REPAIRING)))
|
||||
players.add(player);
|
||||
});
|
||||
multiplier = EcoEnchants.REPAIRING.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "multiplier");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
EcoEnchantsPlugin.getInstance().getServer().getOnlinePlayers().parallelStream().forEach((player -> {
|
||||
if(Arrays.stream(player.getInventory().getContents()).parallel().noneMatch(item2 -> EnchantChecks.item(item2, EcoEnchants.REPAIRING)))
|
||||
return;
|
||||
|
||||
for(ItemStack item : player.getInventory().getContents()) {
|
||||
if(!EnchantChecks.item(item, EcoEnchants.REPAIRING)) continue;
|
||||
|
||||
if(!(item.getItemMeta() instanceof Repairable)) continue;
|
||||
|
||||
if(player.getInventory().getItemInMainHand().equals(item)) continue;
|
||||
if(player.getInventory().getItemInOffHand().equals(item)) continue;
|
||||
if(player.getItemOnCursor().equals(item)) continue;
|
||||
|
||||
|
||||
int level = EnchantChecks.getItemLevel(item, EcoEnchants.REPAIRING);
|
||||
int multiplier = EcoEnchants.REPAIRING.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "multiplier");
|
||||
int repairAmount = level * multiplier;
|
||||
|
||||
DurabilityUtils.repairItem(item, repairAmount);
|
||||
}
|
||||
players.forEach((player -> {
|
||||
Arrays.stream(player.getInventory().getContents())
|
||||
.filter(ItemStack::hasItemMeta)
|
||||
.filter(item -> item.getItemMeta().hasEnchant(EcoEnchants.REPAIRING))
|
||||
.filter(item -> player.getInventory().getItemInOffHand().equals(item))
|
||||
.filter(item -> player.getInventory().getItemInMainHand().equals(item))
|
||||
.filter(item -> player.getItemOnCursor().equals(item))
|
||||
.forEach(item -> {
|
||||
int level = EnchantChecks.getItemLevel(item, EcoEnchants.REPAIRING);
|
||||
int repairAmount = level * multiplier;
|
||||
DurabilityUtils.repairItem(item, repairAmount);
|
||||
}
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user