/*
* Copyright or © or Copr. Amaury Carrade (2014 - 2016)
*
* http://amaury.carrade.eu
*
* This software is governed by the CeCILL-B license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL-B
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-B license and that you accept its terms.
*/
package eu.carrade.amaury.UHCReloaded.protips;
import eu.carrade.amaury.UHCReloaded.UHCReloaded;
import eu.carrade.amaury.UHCReloaded.UHConfig;
import eu.carrade.amaury.UHCReloaded.utils.UHSound;
import fr.zcraft.zlib.components.i18n.I;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* A ProTip, sent to a player only once.
*/
public class ProTip
{
private static final UHSound proTipsSound = new UHSound(UHConfig.PROTIPS.SOUND);
private String text;
private Boolean enabled;
private Set<UUID> sentTo = new CopyOnWriteArraySet<>();
/**
* @param enabled {@code false} to avoid this ProTip from being sent when {@link #sendTo(Player)} is called.
* @param text The ProTip text.
*/
public ProTip(Boolean enabled, String text)
{
this.text = text;
this.enabled = enabled;
}
/**
* @param name A name registered in the UHCReloaded config file, used to disable the powerup if needed, following the configuration.
* @param text The ProTip text.
*/
public ProTip(String name, String text)
{
this(UHCReloaded.get().getConfig().getBoolean("protips." + name), text);
}
public void setEnabled(Boolean enabled)
{
this.enabled = enabled;
}
public String getText()
{
return text;
}
public Boolean isEnabled()
{
return enabled;
}
/**
* Checks if this ProTip was sent to this player.
*
* @param id The player's UUID.
* @return {@code true} if already sent.
*/
public Boolean wasSentTo(UUID id)
{
return sentTo.contains(id);
}
/**
* Checks if this ProTip was sent to this player.
*
* @param player The player.
* @return {@code true} if already sent.
*/
public Boolean wasSentTo(Player player)
{
return wasSentTo(player.getUniqueId());
}
/**
* Sends a ProTip, if this ProTip wasn't sent before to this player.
*
* @param player The receiver of this ProTip.
*/
public void sendTo(Player player)
{
if (!isEnabled() || wasSentTo(player))
return;
sentTo.add(player.getUniqueId());
/// ProTip invite, displayed before a ProTip.
player.sendMessage(I.t("{darkpurple}ProTip!") + " " + ChatColor.RESET + text);
proTipsSound.play(player);
}
/**
* Sends a ProTip, if this ProTip wasn't sent before to this player and this player is online.
*
* @param id The receiver of this ProTip.
*/
public void sendTo(UUID id)
{
Player player = Bukkit.getPlayer(id);
if (player != null && player.isOnline())
sendTo(player);
}
}