mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-04-02 01:15:46 +02:00
Method renaming and moving data around + only cache and update really
used permissions
This commit is contained in:
parent
6a5b9f2a20
commit
5d0585d546
@ -274,11 +274,12 @@ public class NoCheat extends JavaPlugin {
|
||||
return player.isOp();
|
||||
else {
|
||||
PermissionData data = PermissionData.get(player);
|
||||
if(data.permissionsLastUpdate + 10000 < System.currentTimeMillis()) {
|
||||
data.permissionsLastUpdate = System.currentTimeMillis();
|
||||
updatePermissions(player, data);
|
||||
long time = System.currentTimeMillis();
|
||||
if(data.lastUpdate[permission] + 10000 < time) {
|
||||
data.lastUpdate[permission] = time;
|
||||
data.cache[permission] = permissions.has(player, PermissionData.permissionNames[permission]);
|
||||
}
|
||||
return data.permissionsCache[permission];
|
||||
return data.cache[permission];
|
||||
}
|
||||
}
|
||||
catch(Throwable e) {
|
||||
@ -296,19 +297,6 @@ public class NoCheat extends JavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePermissions(Player player, PermissionData data) {
|
||||
|
||||
data.permissionsCache[PermissionData.PERMISSION_AIRBUILD] = permissions.has(player, "nocheat.airbuild");
|
||||
data.permissionsCache[PermissionData.PERMISSION_BEDTELEPORT] = permissions.has(player, "nocheat.bedteleport");
|
||||
data.permissionsCache[PermissionData.PERMISSION_FLYING] = permissions.has(player, "nocheat.flying");
|
||||
data.permissionsCache[PermissionData.PERMISSION_MOVING] = permissions.has(player, "nocheat.moving");
|
||||
data.permissionsCache[PermissionData.PERMISSION_BOGUSITEMS] = permissions.has(player, "nocheat.bogusitems");
|
||||
data.permissionsCache[PermissionData.PERMISSION_SPEEDHACK] = permissions.has(player, "nocheat.speedhack");
|
||||
data.permissionsCache[PermissionData.PERMISSION_NOTIFY] = permissions.has(player, "nocheat.notify");
|
||||
data.permissionsCache[PermissionData.PERMISSION_ITEMDUPE] = permissions.has(player, "nocheat.itemdupe");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the config file
|
||||
*/
|
||||
@ -339,7 +327,7 @@ public class NoCheat extends JavaPlugin {
|
||||
String s = "";
|
||||
|
||||
for(Check c : checks) {
|
||||
s = s + (!c.isActive() ? c.getName() + "* " : (c.hasPermission(p) ? c.getName() + " " : ""));
|
||||
s = s + (!c.isActive() ? c.getName() + "* " : (c.skipCheck(p) ? c.getName() + " " : ""));
|
||||
}
|
||||
|
||||
s = s + (!movingCheck.isActive() || movingCheck.allowFlying ? "flying* " : (hasPermission(p, PermissionData.PERMISSION_FLYING) ? "flying " : ""));
|
||||
|
@ -42,7 +42,7 @@ public class AirbuildCheck extends Check {
|
||||
public void check(BlockPlaceEvent event) {
|
||||
|
||||
// Should we check at all?
|
||||
if(hasPermission(event.getPlayer())) return;
|
||||
if(skipCheck(event.getPlayer())) return;
|
||||
|
||||
// Are all 6 sides "air-blocks" -> cancel the event
|
||||
if(event.getBlockAgainst().getType() == Material.AIR) {
|
||||
|
@ -25,7 +25,7 @@ public class BedteleportCheck extends Check {
|
||||
public void check(PlayerMoveEvent event) {
|
||||
|
||||
// Should we check at all?
|
||||
if(hasPermission(event.getPlayer()))
|
||||
if(skipCheck(event.getPlayer()))
|
||||
return;
|
||||
|
||||
if(event.getPlayer().isSleeping())
|
||||
|
@ -28,7 +28,7 @@ public class BogusitemsCheck extends Check {
|
||||
public void check(PlayerPickupItemEvent event) {
|
||||
|
||||
// Should we check at all?
|
||||
if(hasPermission(event.getPlayer())) return;
|
||||
if(skipCheck(event.getPlayer())) return;
|
||||
|
||||
Item i = event.getItem();
|
||||
if(i != null) {
|
||||
@ -47,7 +47,7 @@ public class BogusitemsCheck extends Check {
|
||||
|
||||
public void check(PlayerInteractEvent event) {
|
||||
|
||||
if(hasPermission(event.getPlayer())) return;
|
||||
if(skipCheck(event.getPlayer())) return;
|
||||
|
||||
if(event.hasItem() && event.getItem().getAmount() <= 0) {// buggy item
|
||||
event.setCancelled(true);
|
||||
@ -60,7 +60,7 @@ public class BogusitemsCheck extends Check {
|
||||
|
||||
public void check(PlayerDropItemEvent event) {
|
||||
|
||||
if(hasPermission(event.getPlayer())) return;
|
||||
if(skipCheck(event.getPlayer())) return;
|
||||
|
||||
Item item = event.getItemDrop();
|
||||
|
||||
|
@ -24,7 +24,7 @@ public abstract class Check {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean hasPermission(Player player) {
|
||||
public boolean skipCheck(Player player) {
|
||||
// Should we check at all?
|
||||
return !active || plugin.hasPermission(player, permission);
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ public class ItemdupeCheck extends Check {
|
||||
public void check(EntityDeathEvent event) {
|
||||
|
||||
if(event.getEntity() instanceof CraftPlayer) {
|
||||
if(hasPermission((CraftPlayer)event.getEntity())) return;
|
||||
if(skipCheck((CraftPlayer)event.getEntity())) return;
|
||||
|
||||
((CraftPlayer)event.getEntity()).getHandle().x(); // close all inventory screens
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import cc.co.evenprime.bukkit.nocheat.actions.CancelAction;
|
||||
import cc.co.evenprime.bukkit.nocheat.actions.CustomAction;
|
||||
import cc.co.evenprime.bukkit.nocheat.actions.LogAction;
|
||||
import cc.co.evenprime.bukkit.nocheat.data.MovingData;
|
||||
import cc.co.evenprime.bukkit.nocheat.data.MovingData.BlockType;
|
||||
import cc.co.evenprime.bukkit.nocheat.data.PermissionData;
|
||||
import cc.co.evenprime.bukkit.nocheat.listeners.MovingEntityListener;
|
||||
import cc.co.evenprime.bukkit.nocheat.listeners.MovingPlayerListener;
|
||||
@ -75,105 +76,6 @@ public class MovingCheck extends Check {
|
||||
private static final double magic = 0.30000001192092896D;
|
||||
private static final double magic2 = 0.69999998807907103D;
|
||||
|
||||
// Block types that may be treated specially
|
||||
private enum BlockType {
|
||||
SOLID, NONSOLID, LADDER, LIQUID, UNKNOWN, FENCE;
|
||||
}
|
||||
|
||||
// Until I can think of a better way to determine if a block is solid or not, this is what I'll do
|
||||
private static BlockType types[] = new BlockType[256];
|
||||
static {
|
||||
|
||||
for(int i = 0; i < types.length; i++) {
|
||||
types[i] = BlockType.UNKNOWN;
|
||||
}
|
||||
|
||||
types[Material.AIR.getId()] = BlockType.NONSOLID;
|
||||
types[Material.STONE.getId()] = BlockType.SOLID;
|
||||
types[Material.GRASS.getId()] = BlockType.SOLID;
|
||||
types[Material.DIRT.getId()] = BlockType.SOLID;
|
||||
types[Material.COBBLESTONE.getId()] = BlockType.SOLID;
|
||||
types[Material.WOOD.getId()] = BlockType.SOLID;
|
||||
types[Material.SAPLING.getId()] = BlockType.NONSOLID;
|
||||
types[Material.BEDROCK.getId()] = BlockType.SOLID;
|
||||
types[Material.WATER.getId()] = BlockType.LIQUID;
|
||||
types[Material.STATIONARY_WATER.getId()] = BlockType.LIQUID;
|
||||
types[Material.LAVA.getId()] = BlockType.LIQUID;
|
||||
types[Material.STATIONARY_LAVA.getId()] = BlockType.LIQUID;
|
||||
types[Material.SAND.getId()] = BlockType.SOLID;
|
||||
types[Material.GRAVEL.getId()] = BlockType.SOLID;
|
||||
types[Material.GOLD_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.IRON_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.COAL_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.LOG.getId()] = BlockType.SOLID;
|
||||
types[Material.LEAVES.getId()] = BlockType.SOLID;
|
||||
types[Material.SPONGE.getId()] = BlockType.SOLID;
|
||||
types[Material.GLASS.getId()] = BlockType.SOLID;
|
||||
types[Material.LAPIS_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.LAPIS_BLOCK.getId()] = BlockType.SOLID;
|
||||
types[Material.DISPENSER.getId()] = BlockType.SOLID;
|
||||
types[Material.SANDSTONE.getId()] = BlockType.SOLID;
|
||||
types[Material.NOTE_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.WOOL.getId()]= BlockType.SOLID;
|
||||
types[Material.YELLOW_FLOWER.getId()]= BlockType.NONSOLID;
|
||||
types[Material.RED_ROSE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.BROWN_MUSHROOM.getId()]= BlockType.NONSOLID;
|
||||
types[Material.RED_MUSHROOM.getId()]= BlockType.NONSOLID;
|
||||
types[Material.GOLD_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.IRON_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.DOUBLE_STEP.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.STEP.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.BRICK.getId()]= BlockType.SOLID;
|
||||
types[Material.TNT.getId()]= BlockType.SOLID;
|
||||
types[Material.BOOKSHELF.getId()]= BlockType.SOLID;
|
||||
types[Material.MOSSY_COBBLESTONE.getId()] = BlockType.SOLID;
|
||||
types[Material.OBSIDIAN.getId()]= BlockType.SOLID;
|
||||
types[Material.TORCH.getId()]= BlockType.NONSOLID;
|
||||
types[Material.FIRE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.MOB_SPAWNER.getId()]= BlockType.SOLID;
|
||||
types[Material.WOOD_STAIRS.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.CHEST.getId()]= BlockType.SOLID;
|
||||
types[Material.REDSTONE_WIRE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.DIAMOND_ORE.getId()]= BlockType.SOLID;
|
||||
types[Material.DIAMOND_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.WORKBENCH.getId()]= BlockType.SOLID;
|
||||
types[Material.CROPS.getId()]= BlockType.NONSOLID;
|
||||
types[Material.SOIL.getId()]= BlockType.SOLID;
|
||||
types[Material.FURNACE.getId()]= BlockType.SOLID;
|
||||
types[Material.BURNING_FURNACE.getId()]= BlockType.SOLID;
|
||||
types[Material.SIGN_POST.getId()]= BlockType.NONSOLID;
|
||||
types[Material.WOODEN_DOOR.getId()]= BlockType.NONSOLID;
|
||||
types[Material.LADDER.getId()]= BlockType.LADDER;
|
||||
types[Material.RAILS.getId()]= BlockType.NONSOLID;
|
||||
types[Material.COBBLESTONE_STAIRS.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.WALL_SIGN.getId()]= BlockType.NONSOLID;
|
||||
types[Material.LEVER.getId()]= BlockType.NONSOLID;
|
||||
types[Material.STONE_PLATE.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.IRON_DOOR_BLOCK.getId()]= BlockType.NONSOLID;
|
||||
types[Material.WOOD_PLATE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.REDSTONE_ORE.getId()]= BlockType.SOLID;
|
||||
types[Material.GLOWING_REDSTONE_ORE.getId()]= BlockType.SOLID;
|
||||
types[Material.REDSTONE_TORCH_OFF.getId()]= BlockType.NONSOLID;
|
||||
types[Material.REDSTONE_TORCH_ON.getId()]= BlockType.NONSOLID;
|
||||
types[Material.STONE_BUTTON.getId()]= BlockType.NONSOLID;
|
||||
types[Material.SNOW.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.ICE.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.SNOW_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.CACTUS.getId()]= BlockType.SOLID;
|
||||
types[Material.CLAY.getId()]= BlockType.SOLID;
|
||||
types[Material.SUGAR_CANE_BLOCK.getId()]= BlockType.NONSOLID;
|
||||
types[Material.JUKEBOX.getId()]= BlockType.SOLID;
|
||||
types[Material.FENCE.getId()]= BlockType.FENCE;
|
||||
types[Material.PUMPKIN.getId()]= BlockType.SOLID;
|
||||
types[Material.NETHERRACK.getId()]= BlockType.SOLID;
|
||||
types[Material.SOUL_SAND.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.GLOWSTONE.getId()]= BlockType.SOLID;
|
||||
types[Material.PORTAL.getId()]= BlockType.NONSOLID;
|
||||
types[Material.JACK_O_LANTERN.getId()]= BlockType.SOLID;
|
||||
types[Material.CAKE_BLOCK.getId()]= BlockType.UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
public void check(final PlayerMoveEvent event) {
|
||||
|
||||
long startTime = System.nanoTime();
|
||||
@ -181,7 +83,7 @@ public class MovingCheck extends Check {
|
||||
final Player player = event.getPlayer();
|
||||
|
||||
// Should we check at all
|
||||
if(hasPermission(player)) {
|
||||
if(skipCheck(player)) {
|
||||
statisticElapsedTimeNano += System.nanoTime() - startTime;
|
||||
statisticTotalEvents++;
|
||||
return;
|
||||
@ -565,6 +467,8 @@ public class MovingCheck extends Check {
|
||||
*/
|
||||
private static boolean playerIsOnGround(World w, int values[], Location l) {
|
||||
|
||||
BlockType types[] = MovingData.types;
|
||||
|
||||
// Check the four borders of the players hitbox for something he could be standing on
|
||||
if(types[w.getBlockTypeIdAt(values[0], values[2]-1, values[3])] != BlockType.NONSOLID ||
|
||||
types[w.getBlockTypeIdAt(values[1], values[2]-1, values[3])] != BlockType.NONSOLID ||
|
||||
|
@ -48,7 +48,7 @@ public class SpeedhackCheck extends Check {
|
||||
|
||||
Player player = event.getPlayer();
|
||||
// Should we check at all?
|
||||
if(hasPermission(player)) return;
|
||||
if(skipCheck(player)) return;
|
||||
|
||||
// Ignore events of players in vehicles (these can be the cause of event spam between server and client)
|
||||
// Ignore events if the player has positive y-Velocity (these can be the cause of event spam between server and client)
|
||||
|
@ -3,6 +3,7 @@ package cc.co.evenprime.bukkit.nocheat.data;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import cc.co.evenprime.bukkit.nocheat.NoCheatData;
|
||||
@ -28,6 +29,104 @@ public class MovingData {
|
||||
|
||||
public Location teleportInitializedByMe = null;
|
||||
|
||||
// Block types that may be treated specially
|
||||
public enum BlockType {
|
||||
SOLID, NONSOLID, LADDER, LIQUID, UNKNOWN, FENCE;
|
||||
}
|
||||
|
||||
// Until I can think of a better way to determine if a block is solid or not, this is what I'll do
|
||||
public static BlockType types[] = new BlockType[256];
|
||||
static {
|
||||
|
||||
for(int i = 0; i < types.length; i++) {
|
||||
types[i] = BlockType.UNKNOWN;
|
||||
}
|
||||
|
||||
types[Material.AIR.getId()] = BlockType.NONSOLID;
|
||||
types[Material.STONE.getId()] = BlockType.SOLID;
|
||||
types[Material.GRASS.getId()] = BlockType.SOLID;
|
||||
types[Material.DIRT.getId()] = BlockType.SOLID;
|
||||
types[Material.COBBLESTONE.getId()] = BlockType.SOLID;
|
||||
types[Material.WOOD.getId()] = BlockType.SOLID;
|
||||
types[Material.SAPLING.getId()] = BlockType.NONSOLID;
|
||||
types[Material.BEDROCK.getId()] = BlockType.SOLID;
|
||||
types[Material.WATER.getId()] = BlockType.LIQUID;
|
||||
types[Material.STATIONARY_WATER.getId()] = BlockType.LIQUID;
|
||||
types[Material.LAVA.getId()] = BlockType.LIQUID;
|
||||
types[Material.STATIONARY_LAVA.getId()] = BlockType.LIQUID;
|
||||
types[Material.SAND.getId()] = BlockType.SOLID;
|
||||
types[Material.GRAVEL.getId()] = BlockType.SOLID;
|
||||
types[Material.GOLD_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.IRON_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.COAL_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.LOG.getId()] = BlockType.SOLID;
|
||||
types[Material.LEAVES.getId()] = BlockType.SOLID;
|
||||
types[Material.SPONGE.getId()] = BlockType.SOLID;
|
||||
types[Material.GLASS.getId()] = BlockType.SOLID;
|
||||
types[Material.LAPIS_ORE.getId()] = BlockType.SOLID;
|
||||
types[Material.LAPIS_BLOCK.getId()] = BlockType.SOLID;
|
||||
types[Material.DISPENSER.getId()] = BlockType.SOLID;
|
||||
types[Material.SANDSTONE.getId()] = BlockType.SOLID;
|
||||
types[Material.NOTE_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.WOOL.getId()]= BlockType.SOLID;
|
||||
types[Material.YELLOW_FLOWER.getId()]= BlockType.NONSOLID;
|
||||
types[Material.RED_ROSE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.BROWN_MUSHROOM.getId()]= BlockType.NONSOLID;
|
||||
types[Material.RED_MUSHROOM.getId()]= BlockType.NONSOLID;
|
||||
types[Material.GOLD_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.IRON_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.DOUBLE_STEP.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.STEP.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.BRICK.getId()]= BlockType.SOLID;
|
||||
types[Material.TNT.getId()]= BlockType.SOLID;
|
||||
types[Material.BOOKSHELF.getId()]= BlockType.SOLID;
|
||||
types[Material.MOSSY_COBBLESTONE.getId()] = BlockType.SOLID;
|
||||
types[Material.OBSIDIAN.getId()]= BlockType.SOLID;
|
||||
types[Material.TORCH.getId()]= BlockType.NONSOLID;
|
||||
types[Material.FIRE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.MOB_SPAWNER.getId()]= BlockType.SOLID;
|
||||
types[Material.WOOD_STAIRS.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.CHEST.getId()]= BlockType.SOLID;
|
||||
types[Material.REDSTONE_WIRE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.DIAMOND_ORE.getId()]= BlockType.SOLID;
|
||||
types[Material.DIAMOND_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.WORKBENCH.getId()]= BlockType.SOLID;
|
||||
types[Material.CROPS.getId()]= BlockType.NONSOLID;
|
||||
types[Material.SOIL.getId()]= BlockType.SOLID;
|
||||
types[Material.FURNACE.getId()]= BlockType.SOLID;
|
||||
types[Material.BURNING_FURNACE.getId()]= BlockType.SOLID;
|
||||
types[Material.SIGN_POST.getId()]= BlockType.NONSOLID;
|
||||
types[Material.WOODEN_DOOR.getId()]= BlockType.NONSOLID;
|
||||
types[Material.LADDER.getId()]= BlockType.LADDER;
|
||||
types[Material.RAILS.getId()]= BlockType.NONSOLID;
|
||||
types[Material.COBBLESTONE_STAIRS.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.WALL_SIGN.getId()]= BlockType.NONSOLID;
|
||||
types[Material.LEVER.getId()]= BlockType.NONSOLID;
|
||||
types[Material.STONE_PLATE.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.IRON_DOOR_BLOCK.getId()]= BlockType.NONSOLID;
|
||||
types[Material.WOOD_PLATE.getId()]= BlockType.NONSOLID;
|
||||
types[Material.REDSTONE_ORE.getId()]= BlockType.SOLID;
|
||||
types[Material.GLOWING_REDSTONE_ORE.getId()]= BlockType.SOLID;
|
||||
types[Material.REDSTONE_TORCH_OFF.getId()]= BlockType.NONSOLID;
|
||||
types[Material.REDSTONE_TORCH_ON.getId()]= BlockType.NONSOLID;
|
||||
types[Material.STONE_BUTTON.getId()]= BlockType.NONSOLID;
|
||||
types[Material.SNOW.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.ICE.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.SNOW_BLOCK.getId()]= BlockType.SOLID;
|
||||
types[Material.CACTUS.getId()]= BlockType.SOLID;
|
||||
types[Material.CLAY.getId()]= BlockType.SOLID;
|
||||
types[Material.SUGAR_CANE_BLOCK.getId()]= BlockType.NONSOLID;
|
||||
types[Material.JUKEBOX.getId()]= BlockType.SOLID;
|
||||
types[Material.FENCE.getId()]= BlockType.FENCE;
|
||||
types[Material.PUMPKIN.getId()]= BlockType.SOLID;
|
||||
types[Material.NETHERRACK.getId()]= BlockType.SOLID;
|
||||
types[Material.SOUL_SAND.getId()]= BlockType.UNKNOWN;
|
||||
types[Material.GLOWSTONE.getId()]= BlockType.SOLID;
|
||||
types[Material.PORTAL.getId()]= BlockType.NONSOLID;
|
||||
types[Material.JACK_O_LANTERN.getId()]= BlockType.SOLID;
|
||||
types[Material.CAKE_BLOCK.getId()]= BlockType.UNKNOWN;
|
||||
}
|
||||
|
||||
public static MovingData get(Player p) {
|
||||
|
||||
NoCheatData data = NoCheatData.getPlayerData(p);
|
||||
|
@ -6,9 +6,11 @@ import cc.co.evenprime.bukkit.nocheat.NoCheatData;
|
||||
|
||||
public class PermissionData {
|
||||
|
||||
public long permissionsLastUpdate = 0;
|
||||
public boolean permissionsCache[] = new boolean[8];
|
||||
|
||||
public long lastUpdate[] = new long[8];
|
||||
public boolean cache[] = new boolean[8];
|
||||
|
||||
public static final String[] permissionNames = new String[8];
|
||||
|
||||
public static final int PERMISSION_MOVING = 0;
|
||||
public static final int PERMISSION_FLYING = 1;
|
||||
public static final int PERMISSION_SPEEDHACK = 2;
|
||||
@ -17,7 +19,18 @@ public class PermissionData {
|
||||
public static final int PERMISSION_BOGUSITEMS = 5;
|
||||
public static final int PERMISSION_NOTIFY = 6;
|
||||
public static final int PERMISSION_ITEMDUPE = 7;
|
||||
|
||||
|
||||
static {
|
||||
permissionNames[PERMISSION_AIRBUILD] = "nocheat.airbuild";
|
||||
permissionNames[PERMISSION_BEDTELEPORT] = "nocheat.bedteleport";
|
||||
permissionNames[PERMISSION_FLYING] = "nocheat.flying";
|
||||
permissionNames[PERMISSION_MOVING] = "nocheat.moving";
|
||||
permissionNames[PERMISSION_BOGUSITEMS] = "nocheat.bogusitems";
|
||||
permissionNames[PERMISSION_SPEEDHACK] = "nocheat.speedhack";
|
||||
permissionNames[PERMISSION_NOTIFY] = "nocheat.notify";
|
||||
permissionNames[PERMISSION_ITEMDUPE] = "nocheat.itemdupe";
|
||||
}
|
||||
|
||||
public static PermissionData get(Player p) {
|
||||
|
||||
NoCheatData data = NoCheatData.getPlayerData(p);
|
||||
|
Loading…
Reference in New Issue
Block a user