mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-06-26 06:14:42 +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.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityPortalEnterEvent;
|
||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryEvent;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
||||
import org.bukkit.event.player.PlayerPortalEvent;
|
||||
import org.bukkit.inventory.InventoryView;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
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.combined.Combined;
|
||||
import fr.neatmonster.nocheatplus.checks.combined.Improbable;
|
||||
import fr.neatmonster.nocheatplus.config.ConfPaths;
|
||||
import fr.neatmonster.nocheatplus.config.ConfigManager;
|
||||
|
||||
/*
|
||||
* 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.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";
|
||||
public static final String INVENTORY_ITEMS_CHECK = INVENTORY_ITEMS + ".active";
|
||||
|
||||
@GlobalConfig
|
||||
public static final String INVENTORY_ENSURECLOSE = INVENTORY + ".ensureclose";
|
||||
|
||||
/*
|
||||
* e e ,e,
|
||||
* d8b d8b e88 88e Y8b Y888P " 888 8e e88 888
|
||||
|
|
|
@ -391,6 +391,8 @@ public class DefaultConfig extends ConfigFile {
|
|||
set(ConfPaths.INVENTORY_FASTCONSUME_ACTIONS, "log:fastconsume:2:5:if cancel");
|
||||
|
||||
set(ConfPaths.INVENTORY_ITEMS_CHECK, true);
|
||||
|
||||
set(ConfPaths.INVENTORY_ENSURECLOSE, true);
|
||||
|
||||
/*
|
||||
* e e ,e,
|
||||
|
|
Loading…
Reference in New Issue
Block a user