mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-09-29 23:17:41 +02:00
[BLIND] Attempt to catch open inventories for portals and world changes.
This commit is contained in:
parent
fa2d0360a6
commit
3880808d06
@ -3,20 +3,24 @@ package fr.neatmonster.nocheatplus.checks.inventory;
|
|||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.entity.EntityPortalEnterEvent;
|
||||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.event.inventory.InventoryEvent;
|
import org.bukkit.event.inventory.InventoryEvent;
|
||||||
|
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
import org.bukkit.event.player.PlayerItemHeldEvent;
|
||||||
|
import org.bukkit.event.player.PlayerPortalEvent;
|
||||||
import org.bukkit.inventory.InventoryView;
|
import org.bukkit.inventory.InventoryView;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
@ -25,6 +29,8 @@ import fr.neatmonster.nocheatplus.checks.CheckListener;
|
|||||||
import fr.neatmonster.nocheatplus.checks.CheckType;
|
import fr.neatmonster.nocheatplus.checks.CheckType;
|
||||||
import fr.neatmonster.nocheatplus.checks.combined.Combined;
|
import fr.neatmonster.nocheatplus.checks.combined.Combined;
|
||||||
import fr.neatmonster.nocheatplus.checks.combined.Improbable;
|
import fr.neatmonster.nocheatplus.checks.combined.Improbable;
|
||||||
|
import fr.neatmonster.nocheatplus.config.ConfPaths;
|
||||||
|
import fr.neatmonster.nocheatplus.config.ConfigManager;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* M""M dP
|
* M""M dP
|
||||||
@ -318,4 +324,63 @@ public class InventoryListener extends CheckListener {
|
|||||||
Items.checkIllegalEnchantments(player, inv.getItem(event.getNewSlot()));
|
Items.checkIllegalEnchantments(player, inv.getItem(event.getNewSlot()));
|
||||||
Items.checkIllegalEnchantments(player, inv.getItem(event.getPreviousSlot()));
|
Items.checkIllegalEnchantments(player, inv.getItem(event.getPreviousSlot()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void onPlayerChangedWorld(final PlayerChangedWorldEvent event){
|
||||||
|
if (shouldEnsureCloseInventories()){
|
||||||
|
closePlayerInventoryRecursively(event.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void onPlayerPortal(final PlayerPortalEvent event){
|
||||||
|
if (shouldEnsureCloseInventories()){
|
||||||
|
closePlayerInventoryRecursively(event.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void onEntityPortal(final EntityPortalEnterEvent event){
|
||||||
|
if (shouldEnsureCloseInventories()){
|
||||||
|
closePlayerInventoryRecursively(event.getEntity());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if global config has set the flag.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean shouldEnsureCloseInventories(){
|
||||||
|
return ConfigManager.getConfigFile().getBoolean(ConfPaths.INVENTORY_ENSURECLOSE, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for players / passengers.
|
||||||
|
* @param entity
|
||||||
|
*/
|
||||||
|
public static void closePlayerInventoryRecursively(Entity entity){
|
||||||
|
// Find a player.
|
||||||
|
while (entity != null){
|
||||||
|
if (entity instanceof Player){
|
||||||
|
closeInventory((Player) entity);
|
||||||
|
}
|
||||||
|
final Entity passenger = entity.getPassenger();
|
||||||
|
if (entity.equals(passenger)){
|
||||||
|
// Just in case :9.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
entity = passenger;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close one players inventory, if open.
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public static void closeInventory(final Player player){
|
||||||
|
// TODO: Better check if any !?.
|
||||||
|
player.closeInventory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -529,6 +529,9 @@ public abstract class ConfPaths {
|
|||||||
private static final String INVENTORY_ITEMS = INVENTORY + ".items";
|
private static final String INVENTORY_ITEMS = INVENTORY + ".items";
|
||||||
public static final String INVENTORY_ITEMS_CHECK = INVENTORY_ITEMS + ".active";
|
public static final String INVENTORY_ITEMS_CHECK = INVENTORY_ITEMS + ".active";
|
||||||
|
|
||||||
|
@GlobalConfig
|
||||||
|
public static final String INVENTORY_ENSURECLOSE = INVENTORY + ".ensureclose";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* e e ,e,
|
* e e ,e,
|
||||||
* d8b d8b e88 88e Y8b Y888P " 888 8e e88 888
|
* d8b d8b e88 88e Y8b Y888P " 888 8e e88 888
|
||||||
|
@ -392,6 +392,8 @@ public class DefaultConfig extends ConfigFile {
|
|||||||
|
|
||||||
set(ConfPaths.INVENTORY_ITEMS_CHECK, true);
|
set(ConfPaths.INVENTORY_ITEMS_CHECK, true);
|
||||||
|
|
||||||
|
set(ConfPaths.INVENTORY_ENSURECLOSE, true);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* e e ,e,
|
* e e ,e,
|
||||||
* d8b d8b e88 88e Y8b Y888P " 888 8e e88 888
|
* d8b d8b e88 88e Y8b Y888P " 888 8e e88 888
|
||||||
|
Loading…
Reference in New Issue
Block a user