Add the ability to use "opponent_holding" on Living_Entities

This commit is contained in:
Brianna 2020-03-21 08:48:30 -04:00
parent 4a43c4d562
commit a40ddd325b
2 changed files with 25 additions and 9 deletions

View File

@ -5,7 +5,9 @@ import com.songoda.epicenchants.enums.TriggerType;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.player.PlayerInteractEvent;
@ -68,17 +70,31 @@ public class GeneralUtils {
return triggers == null ? Collections.emptySet() : Arrays.stream(triggers.replaceAll("\\s+", "").split(",")).map(TriggerType::valueOf).collect(Collectors.toSet());
}
public static ItemStack getHeldItem(Player player, Event event) {
int slot = player.getInventory().getHeldItemSlot();
public static ItemStack getHeldItem(LivingEntity entity, Event event) {
if (entity instanceof Player) {
Player player = (Player)entity;
int slot = player.getInventory().getHeldItemSlot();
try {
if (event instanceof PlayerInteractEvent && ((PlayerInteractEvent) event).getHand() == EquipmentSlot.OFF_HAND) {
slot = 40;
try {
if (event instanceof PlayerInteractEvent && ((PlayerInteractEvent) event).getHand() == EquipmentSlot.OFF_HAND) {
slot = 40;
}
} catch (NoSuchMethodError ignore) {
}
} catch (NoSuchMethodError ignore) {
}
return player.getInventory().getItem(slot);
return player.getInventory().getItem(slot);
} else if (entity.getEquipment() != null){
ItemStack item = entity.getEquipment().getItemInHand();
try {
if (item.getType() == Material.AIR) {
return entity.getEquipment().getItemInOffHand();
}
} catch (NoSuchMethodError ignore) {
}
return item;
}
return null;
}
public static Object parseJS(String toParse, String type, Object def) {

View File

@ -58,7 +58,7 @@ public class Placeholders {
put("{opponent_is_sneaking}", (user, opponent) -> opponent instanceof Player && ((Player) opponent).isSneaking());
put("{user_holding}", (user, opponent) -> Optional.ofNullable(getHeldItem(user, null)).map(ItemStack::getType).orElse(Material.AIR));
put("{opponent_holding}", (user, opponent) -> opponent instanceof Player ? Optional.ofNullable(getHeldItem((Player) opponent, null)).map(ItemStack::getType).orElse(Material.AIR) : "N/A");
put("{opponent_holding}", (user, opponent) -> opponent != null ? Optional.ofNullable(getHeldItem(opponent, null)).map(ItemStack::getType).orElse(Material.AIR) : "N/A");
put("{user_is_swimming}", (user, opponent) -> user.getLocation().getBlock().isLiquid());
put("{opponent_is_swimming}", (user, opponent) -> opponent != null && opponent.getLocation().getBlock().isLiquid());