Add action and handler for gliding, equip, refactored PolicyParser and implementations to support world matching
Some checks are pending
Build / build (push) Waiting to run
Some checks are pending
Build / build (push) Waiting to run
This commit is contained in:
parent
96005d8c86
commit
f4a362c1c7
35 changed files with 651 additions and 177 deletions
|
|
@ -1,34 +1,126 @@
|
|||
package io.github.adrianvic.nemesiseye;
|
||||
|
||||
import io.github.adrianvic.nemesiseye.policy.Action;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.player.PlayerHarvestBlockEvent;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Events {
|
||||
|
||||
public static void onBlockBreak(BlockBreakEvent event) {
|
||||
event.setCancelled(!Validator.can(event.getPlayer(), List.of(Action.BREAK, Action.USE_ENCHANTMENT), event));
|
||||
event.setCancelled(
|
||||
!Validator.can(
|
||||
event.getPlayer(),
|
||||
List.of(Action.BREAK, Action.USE_ENCHANTMENT),
|
||||
event
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public static void onInteractionEvent(PlayerInteractEvent event) {
|
||||
if (event.getItem() != null) {
|
||||
event.setCancelled(!Validator.can(event.getPlayer(), Action.INTERACT, event));
|
||||
ItemStack item = event.getItem();
|
||||
|
||||
if (item == null || item.getType().isAir()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Right-click armor equipping
|
||||
if (isArmor(item)
|
||||
&& !Validator.can(event.getPlayer(), Action.EQUIP, event)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Normal item interaction
|
||||
event.setCancelled(
|
||||
!Validator.can(event.getPlayer(), Action.INTERACT, event)
|
||||
);
|
||||
}
|
||||
|
||||
public static void onBlockPlaceEvent(BlockPlaceEvent event) {
|
||||
event.setCancelled(!Validator.can(event.getPlayer(), Action.PLACE, event));
|
||||
event.setCancelled(
|
||||
!Validator.can(event.getPlayer(), Action.PLACE, event)
|
||||
);
|
||||
}
|
||||
|
||||
public static void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
|
||||
if (event.getDamager() instanceof Player) {
|
||||
event.setCancelled(!Validator.can((HumanEntity) event.getDamager(), List.of(Action.HIT, Action.USE_ENCHANTMENT), event));
|
||||
if (event.getDamager() instanceof Player player) {
|
||||
event.setCancelled(
|
||||
!Validator.can(
|
||||
player,
|
||||
List.of(Action.HIT, Action.USE_ENCHANTMENT),
|
||||
event
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void onPlayerMoveEvent(PlayerMoveEvent event) {
|
||||
if (event.getPlayer().isGliding()
|
||||
&& !Validator.can(
|
||||
event.getPlayer(),
|
||||
List.of(Action.GLYDE),
|
||||
event
|
||||
)) {
|
||||
event.getPlayer().setGliding(false);
|
||||
}
|
||||
}
|
||||
|
||||
public static void onInventoryClickEvent(InventoryClickEvent event) {
|
||||
if (!isArmorEquipAttempt(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
HumanEntity entity = event.getWhoClicked();
|
||||
|
||||
if (!Validator.can(entity, Action.EQUIP, event)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isArmorEquipAttempt(InventoryClickEvent event) {
|
||||
if (event.getSlotType() == InventoryType.SlotType.ARMOR) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (event.isShiftClick()) {
|
||||
return isArmor(event.getCurrentItem());
|
||||
}
|
||||
|
||||
if (event.getClick() == ClickType.NUMBER_KEY
|
||||
&& event.getSlotType() == InventoryType.SlotType.ARMOR
|
||||
&& event.getWhoClicked() instanceof Player player) {
|
||||
return isArmor(
|
||||
player.getInventory().getItem(event.getHotbarButton())
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isArmor(ItemStack item) {
|
||||
if (item == null || item.getType().isAir()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Material type = item.getType();
|
||||
String name = type.name();
|
||||
|
||||
return name.endsWith("_HELMET")
|
||||
|| name.endsWith("_CHESTPLATE")
|
||||
|| name.endsWith("_LEGGINGS")
|
||||
|| name.endsWith("_BOOTS")
|
||||
|| type == Material.ELYTRA;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue