/*******************************************************************************
* Copyright 2014 Tobias Welther
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.race.reminder;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import de.tobiyas.racesandclasses.RacesAndClasses;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractTraitHolder;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.util.consts.PermissionNode;
import de.tobiyas.util.schedule.DebugBukkitRunnable;
public class RaceReminder extends DebugBukkitRunnable {
private RacesAndClasses plugin;
public RaceReminder(){
super("RaceReminder");
plugin = RacesAndClasses.getPlugin();
int reminderTime = plugin.getConfigManager().getGeneralConfig().getConfig_reminder_interval() * 20 * 60;
this.runTaskTimer(plugin, reminderTime, reminderTime);
}
@Override
protected void runIntern() {
if(plugin.getConfigManager().getGeneralConfig().isConfig_activate_reminder()){
AbstractTraitHolder defaultContainer = plugin.getRaceManager().getDefaultHolder();
List<RaCPlayer> list = plugin.getRaceManager().getAllPlayersOfHolder(defaultContainer);
for(RaCPlayer player : list){
if(player == null || !player.isOnline()) continue;
postSelectRace(player);
}
}
}
/**
* Checks if the Player has any permission for any Race.
* This is only checked, when the Configuration option for checking is set.
*
* @param player
* @return
*/
private boolean hasAnyRacePermission(RaCPlayer player) {
if(!plugin.getConfigManager().getGeneralConfig().isConfig_usePermissionsForRaces()) return true;
String name = null;
for(OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()){
if(offlinePlayer.getUniqueId().equals(player)){
name = offlinePlayer.getName();
break;
}
}
if(name == null) return false;
//TODO fix with Utils.
if(plugin.getPermissionManager().checkPermissionsSilent(name, PermissionNode.racePermPre + "*")) return true;
for(String raceName : plugin.getRaceManager().listAllVisibleHolders()){
if(plugin.getPermissionManager().checkPermissionsSilent(name, PermissionNode.racePermPre + raceName)){
return true;
}
}
return false;
}
/**
* Tries posting the reminder to the {@link Player}.
* It also checks the Permissions if set in Configuration.
*
* @param player
*/
private void postSelectRace(RaCPlayer player){
if(!player.isOnline()) return;
if(!hasAnyRacePermission(player)) return;
boolean useGui = plugin.getConfigManager().getGeneralConfig().isConfig_useRaceGUIToSelect();
if(player != null){
player.sendMessage(ChatColor.YELLOW + "[PRIVATE-INFO]: You have not selected a race.");
player.sendMessage(ChatColor.YELLOW + "[PRIVATE-INFO]: Use " + ChatColor.RED + "/race select " + (useGui?"":"<racename>") + " " + ChatColor.YELLOW + "to select a race.");
player.sendMessage(ChatColor.YELLOW + "[PRIVATE-INFO]: To see all races use: " + ChatColor.LIGHT_PURPLE + "/race list");
}
}
}