public static void setGamemode(EntityPlayerMP player, int mode) {
    if (mode < 0
        || mode >= NEIActions.gameModes.length
        || NEIActions.nameActionMap.containsKey(NEIActions.gameModes[mode])
            && !NEIServerConfig.canPlayerPerformAction(
                player.getName(), NEIActions.gameModes[mode])) {
      return;
    }

    // creative+
    NEIServerConfig.forPlayer(player.getName()).enableAction("creative+", mode == 2);
    if (mode == 2
        && !(player.openContainer
            instanceof ContainerCreativeInv)) // open the container immediately for the client
    {
      NEISPH.processCreativeInv(player, true);
    }

    // change it on the server
    player.theItemInWorldManager.setGameType(getGameType(mode));

    // tell the client to change it
    new PacketCustom(NEISPH.channel, 14).writeByte(mode).sendToPlayer(player);
    player.addChatMessage(new ChatComponentTranslation("nei.chat.gamemode." + mode));
  }
  public static void sendNotice(ICommandSender sender, IChatComponent msg, String permission) {
    ChatComponentTranslation notice =
        new ChatComponentTranslation("chat.type.admin", sender.getName(), msg.createCopy());
    notice.getChatStyle().setColor(EnumChatFormatting.GRAY).setItalic(true);

    if (NEIServerConfig.canPlayerPerformAction("CONSOLE", permission)) {
      MinecraftServer.getServer().addChatMessage(notice);
    }

    for (EntityPlayer p : ServerUtils.getPlayers()) {
      if (p == sender) {
        p.addChatComponentMessage(msg);
      } else if (NEIServerConfig.canPlayerPerformAction(p.getName(), permission)) {
        p.addChatComponentMessage(notice);
      }
    }
  }
 public static int getCreativeMode(EntityPlayerMP player) {
   if (NEIServerConfig.forPlayer(player.getName()).isActionEnabled("creative+")) {
     return 2;
   } else if (player.theItemInWorldManager.isCreative()) {
     return 1;
   } else if (player.theItemInWorldManager.getGameType().isAdventure()) {
     return 3;
   } else {
     return 0;
   }
 }
  public static void advanceDisabledTimes(World world) {
    int dim = world.provider.getDimensionId();
    int hour = (int) (getTime(world) % 24000) / 1000;
    int newhour = hour;
    while (NEIServerConfig.isActionDisabled(dim, NEIActions.timeZones[newhour / 6])) {
      newhour = ((newhour / 6 + 1) % 4) * 6;
    }

    if (newhour != hour) {
      setHourForward(world, newhour, false);
    }
  }
  public static void cycleCreativeInv(EntityPlayerMP player, int steps) {
    InventoryPlayer inventory = player.inventory;

    // top down [row][col]
    ItemStack[][] slots = new ItemStack[10][9];
    PlayerSave playerSave = NEIServerConfig.forPlayer(player.getName());

    // get
    System.arraycopy(inventory.mainInventory, 0, slots[9], 0, 9);

    for (int row = 0; row < 3; row++) {
      System.arraycopy(inventory.mainInventory, (row + 1) * 9, slots[row + 6], 0, 9);
    }

    for (int row = 0; row < 6; row++) {
      System.arraycopy(playerSave.creativeInv, row * 9, slots[row], 0, 9);
    }

    ItemStack[][] newslots = new ItemStack[10][];

    // put back
    for (int row = 0; row < 10; row++) {
      newslots[(row + steps + 10) % 10] = slots[row];
    }

    System.arraycopy(newslots[9], 0, inventory.mainInventory, 0, 9);

    for (int row = 0; row < 3; row++) {
      System.arraycopy(newslots[row + 6], 0, inventory.mainInventory, (row + 1) * 9, 9);
    }

    for (int row = 0; row < 6; row++) {
      System.arraycopy(newslots[row], 0, playerSave.creativeInv, row * 9, 9);
    }

    playerSave.setDirty();
  }
 public static void toggleMagnetMode(EntityPlayerMP player) {
   PlayerSave playerSave = NEIServerConfig.forPlayer(player.getName());
   playerSave.enableAction("magnet", !playerSave.isActionEnabled("magnet"));
 }