mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2025-02-14 21:22:09 +00:00
Block removing hats with curse of binding using direct-hat (#3895)
Fixed loophole that allowed users to bypass curse of binding when using direct hat feature. Related to #3299, which added similar checks to `/hat`.
This commit is contained in:
parent
01987a0374
commit
cb7b2dabf5
1 changed files with 12 additions and 5 deletions
|
@ -19,6 +19,7 @@ import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
@ -782,8 +783,8 @@ public class EssentialsPlayerListener implements Listener {
|
||||||
clickedInventory = event.getRawSlot() < top.getSize() ? top : event.getView().getBottomInventory();
|
clickedInventory = event.getRawSlot() < top.getSize() ? top : event.getView().getBottomInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final User user = ess.getUser((Player) event.getWhoClicked());
|
||||||
if (type == InventoryType.PLAYER) {
|
if (type == InventoryType.PLAYER) {
|
||||||
final User user = ess.getUser((Player) event.getWhoClicked());
|
|
||||||
final InventoryHolder invHolder = top.getHolder();
|
final InventoryHolder invHolder = top.getHolder();
|
||||||
if (invHolder instanceof HumanEntity) {
|
if (invHolder instanceof HumanEntity) {
|
||||||
final User invOwner = ess.getUser((Player) invHolder);
|
final User invOwner = ess.getUser((Player) invHolder);
|
||||||
|
@ -793,19 +794,16 @@ public class EssentialsPlayerListener implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (type == InventoryType.ENDER_CHEST) {
|
} else if (type == InventoryType.ENDER_CHEST) {
|
||||||
final User user = ess.getUser((Player) event.getWhoClicked());
|
|
||||||
if (user.isEnderSee() && !user.isAuthorized("essentials.enderchest.modify")) {
|
if (user.isEnderSee() && !user.isAuthorized("essentials.enderchest.modify")) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
refreshPlayer = user.getBase();
|
refreshPlayer = user.getBase();
|
||||||
}
|
}
|
||||||
} else if (type == InventoryType.WORKBENCH) {
|
} else if (type == InventoryType.WORKBENCH) {
|
||||||
final User user = ess.getUser((Player) event.getWhoClicked());
|
|
||||||
if (user.isRecipeSee()) {
|
if (user.isRecipeSee()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
refreshPlayer = user.getBase();
|
refreshPlayer = user.getBase();
|
||||||
}
|
}
|
||||||
} else if (type == InventoryType.CHEST && top.getSize() == 9) {
|
} else if (type == InventoryType.CHEST && top.getSize() == 9) {
|
||||||
final User user = ess.getUser((Player) event.getWhoClicked());
|
|
||||||
final InventoryHolder invHolder = top.getHolder();
|
final InventoryHolder invHolder = top.getHolder();
|
||||||
if (invHolder instanceof HumanEntity && user.isInvSee() && event.getClick() != ClickType.MIDDLE) {
|
if (invHolder instanceof HumanEntity && user.isInvSee() && event.getClick() != ClickType.MIDDLE) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -815,7 +813,8 @@ public class EssentialsPlayerListener implements Listener {
|
||||||
if (ess.getSettings().isDirectHatAllowed() && event.getClick() == ClickType.LEFT && event.getSlot() == 39
|
if (ess.getSettings().isDirectHatAllowed() && event.getClick() == ClickType.LEFT && event.getSlot() == 39
|
||||||
&& event.getCursor().getType() != Material.AIR && event.getCursor().getType().getMaxDurability() == 0
|
&& event.getCursor().getType() != Material.AIR && event.getCursor().getType().getMaxDurability() == 0
|
||||||
&& !MaterialUtil.isSkull(event.getCursor().getType())
|
&& !MaterialUtil.isSkull(event.getCursor().getType())
|
||||||
&& ess.getUser(event.getWhoClicked()).isAuthorized("essentials.hat") && !ess.getUser(event.getWhoClicked()).isAuthorized("essentials.hat.prevent-type." + event.getCursor().getType().name().toLowerCase())) {
|
&& user.isAuthorized("essentials.hat") && !user.isAuthorized("essentials.hat.prevent-type." + event.getCursor().getType().name().toLowerCase())
|
||||||
|
&& !isPreventBindingHat(user, (PlayerInventory) clickedInventory)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
final PlayerInventory inv = (PlayerInventory) clickedInventory;
|
final PlayerInventory inv = (PlayerInventory) clickedInventory;
|
||||||
final ItemStack head = inv.getHelmet();
|
final ItemStack head = inv.getHelmet();
|
||||||
|
@ -829,6 +828,14 @@ public class EssentialsPlayerListener implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isPreventBindingHat(User user, PlayerInventory inventory) {
|
||||||
|
if (VersionUtil.getServerBukkitVersion().isHigherThan(VersionUtil.v1_9_4_R01)) {
|
||||||
|
final ItemStack head = inventory.getHelmet();
|
||||||
|
return head != null && head.getEnchantments().containsKey(Enchantment.BINDING_CURSE) && !user.isAuthorized("essentials.hat.ignore-binding");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onInventoryCloseEvent(final InventoryCloseEvent event) {
|
public void onInventoryCloseEvent(final InventoryCloseEvent event) {
|
||||||
Player refreshPlayer = null;
|
Player refreshPlayer = null;
|
||||||
|
|
Loading…
Reference in a new issue