PlaytimeReloaded/src/main/java/li/inc/PlaytimeReloaded/Playtime.java

288 lines
11 KiB
Java
Raw Normal View History

2016-09-15 18:16:32 +00:00
/*
2020-12-28 08:11:09 +00:00
* Copyright (c) 2016
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* This file is part of the spigot Minecraft server plugin 'PlaytimeReloaded'.
*
* PlaytimeReloaded is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlaytimeReloaded is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PlaytimeReloaded. If not, see <http://www.gnu.org/licenses/>.
*/
2016-09-15 18:16:32 +00:00
2016-09-12 20:19:11 +00:00
package li.inc.PlaytimeReloaded;
import li.inc.PlaytimeReloaded.DataStore.Config;
2017-02-09 00:27:20 +00:00
import li.inc.PlaytimeReloaded.DataStore.DB.DB;
2017-02-07 21:59:17 +00:00
import li.inc.PlaytimeReloaded.DataStore.TimeCommand;
2016-09-12 21:14:34 +00:00
import li.inc.PlaytimeReloaded.DataStore.UUIDCache;
2016-09-12 20:19:11 +00:00
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
2020-12-28 08:11:09 +00:00
import java.util.List;
import java.util.UUID;
2016-09-12 20:57:07 +00:00
2020-12-28 08:11:09 +00:00
public class Playtime extends JavaPlugin implements Listener {
2020-12-28 08:06:18 +00:00
private Config m_config = null;
private DB m_db = null;
2016-09-12 20:19:11 +00:00
2020-12-28 08:11:09 +00:00
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch (NumberFormatException e) {
return false;
} catch (NullPointerException e) {
return false;
}
// only got here if we didn't return false
return true;
}
2016-09-12 20:19:11 +00:00
@Override
2020-12-28 08:11:09 +00:00
public void onEnable() {
2016-09-12 20:19:11 +00:00
//Load config from file into Config class.
m_config = new Config(this);
//Load the text from the lang config.
2020-12-28 08:11:09 +00:00
if (m_db == null)
2020-12-28 08:10:40 +00:00
m_db = new DB(this, m_config);
2016-09-12 20:19:11 +00:00
getServer().getPluginManager().registerEvents(this, this);
int id = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
public void run() {
refreshPlaytime();
2020-12-28 08:11:09 +00:00
}
}, 0, 1200);
2016-09-12 20:19:11 +00:00
}
2020-12-28 08:10:40 +00:00
@Override
2020-12-28 08:11:09 +00:00
public void onDisable() {
2020-12-28 08:10:40 +00:00
//Load the text from the lang config.
2020-12-28 08:11:09 +00:00
if (m_db != null) {
2020-12-28 08:10:40 +00:00
m_db.close();
m_db = null;
}
}
2020-12-28 08:11:09 +00:00
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (cmd.getName().equalsIgnoreCase("toptime")) {
2017-02-23 20:04:00 +00:00
int _count = 5;
2020-12-28 08:11:09 +00:00
if (args.length == 1) {
if (isInteger(args[0])) {
2017-02-23 20:04:00 +00:00
_count = Integer.parseInt(args[0]);
}
}
2020-12-28 08:11:09 +00:00
if (sender instanceof Player) {
Player _player = (Player) sender;
2017-02-08 00:23:11 +00:00
2020-12-28 08:11:09 +00:00
if (_player.hasPermission("playtime.top")) {
2017-02-23 20:04:00 +00:00
_player.sendMessage(getChatMessage(m_config.getTextTopPlayerListHead(), _player.getName(), 0, _count, true));
2017-02-08 00:23:11 +00:00
2017-02-23 20:04:00 +00:00
List<String[]> _topPlayers = m_db.getTopPlayers(_count);
2017-02-08 00:28:42 +00:00
int _rang = 1;
2020-12-28 08:11:09 +00:00
for (String[] _playerData : _topPlayers) {
if (_playerData.length >= 2) {
2017-02-08 00:28:42 +00:00
_player.sendMessage(getChatMessage(m_config.getTextPlayerEntry(), _playerData[0], Integer.parseInt(_playerData[1]), _rang++, true));
2017-02-08 00:23:11 +00:00
}
}
2020-12-28 08:11:09 +00:00
} else {
2017-02-08 00:03:01 +00:00
_player.sendMessage(getChatMessage(m_config.getTextNoPermission(), _player.getName(), 0, 0, true));
}
2020-12-28 08:11:09 +00:00
} else {
2017-02-23 20:04:00 +00:00
this.getLogger().info(getChatMessage(m_config.getTextTopPlayerListHead(), "", 0, _count, false));
List<String[]> _topPlayers = m_db.getTopPlayers(_count);
int _rang = 1;
2020-12-28 08:11:09 +00:00
for (String[] _playerData : _topPlayers) {
if (_playerData.length >= 2) {
2017-02-23 20:04:00 +00:00
this.getLogger().info(getChatMessage(m_config.getTextPlayerEntry(), _playerData[0], Integer.parseInt(_playerData[1]), _rang++, false));
}
}
2017-02-08 00:03:01 +00:00
}
}
2020-12-28 08:11:09 +00:00
if (cmd.getName().equalsIgnoreCase("playtime")) {
if (args.length == 0) {
2016-09-12 20:19:11 +00:00
//Player will seine eigene Playtime wissen.
2020-12-28 08:11:09 +00:00
if (sender instanceof Player) {
Player _player = (Player) sender;
2016-09-12 20:19:11 +00:00
2020-12-28 08:11:09 +00:00
if (_player.hasPermission("playtime.use")) {
2017-02-09 00:27:20 +00:00
_player.sendMessage(getChatMessage(m_config.getTextYourCurrentPlaytime(), _player.getName(), m_db.getPlayerTime(_player.getUniqueId()), 0, true));
2020-12-28 08:11:09 +00:00
} else {
2016-09-14 07:03:50 +00:00
_player.sendMessage(getChatMessage(m_config.getTextNoPermission(), _player.getName(), 0, 0, true));
2016-09-12 20:19:11 +00:00
}
2020-12-28 08:11:09 +00:00
} else {
2016-09-12 20:19:11 +00:00
this.getLogger().info("Ey you bread! You cant display the playtime from the console!");
}
2020-12-28 08:11:09 +00:00
} else {
2016-09-12 20:19:11 +00:00
//Player will andere Spielzeit wissen.
UUID _searchPlayer = getPlayerUUID(args[0]);
2020-12-28 08:11:09 +00:00
if (_searchPlayer != null) {
2016-09-12 20:19:11 +00:00
//Spieler wurde gefunden.
2020-12-28 08:11:09 +00:00
if (sender instanceof Player) {
Player _player = (Player) sender;
if (_player.hasPermission("playtime.use.others")) {
2017-02-09 00:27:20 +00:00
_player.sendMessage(getChatMessage(m_config.getTextPlayerPlaytimeIs(), args[0], m_db.getPlayerTime(_searchPlayer), 0, true));
2020-12-28 08:11:09 +00:00
} else {
2016-09-14 07:03:50 +00:00
_player.sendMessage(getChatMessage(m_config.getTextNoPermission(), args[0], 0, 0, true));
2016-09-12 20:19:11 +00:00
}
2020-12-28 08:11:09 +00:00
} else {
2017-02-09 00:27:20 +00:00
this.getLogger().info(getChatMessage(m_config.getTextPlayerPlaytimeIs(), args[0], m_db.getPlayerTime(_searchPlayer), 0, false));
2016-09-12 20:19:11 +00:00
}
2020-12-28 08:11:09 +00:00
} else {
2016-09-12 20:19:11 +00:00
//Spieler wurde nicht gefunden / Hat noch nicht auf dem Server gespielt.
2020-12-28 08:11:09 +00:00
if (sender instanceof Player) {
Player _player = (Player) sender;
2016-09-14 07:03:50 +00:00
_player.sendMessage(getChatMessage(m_config.getTextPlayerNotFound(), "", 0, 0, true));
2020-12-28 08:11:09 +00:00
} else {
2016-09-14 07:03:50 +00:00
this.getLogger().info(getChatMessage(m_config.getTextPlayerNotFound(), "", 0, 0, false));
2016-09-12 20:19:11 +00:00
}
}
}
}
return true;
}
@EventHandler
2020-12-28 08:11:09 +00:00
public void onPlayerJoin(PlayerJoinEvent event) {
if (event.getPlayer().hasPermission("playtime.use") && event.getPlayer().hasPermission("playtime.login")) {
2017-02-09 00:27:20 +00:00
event.getPlayer().sendMessage(getChatMessage(m_config.getTextYourCurrentPlaytime(), event.getPlayer().getName(), m_db.getPlayerTime(event.getPlayer().getUniqueId()), 0, true));
2016-09-12 20:19:11 +00:00
}
2016-09-12 21:14:34 +00:00
UUIDCache.update(event.getPlayer().getName(), event.getPlayer().getUniqueId());
addPlayTime(event.getPlayer().getUniqueId(), 0);
2016-09-12 20:19:11 +00:00
}
2020-12-28 08:11:09 +00:00
private void refreshPlaytime() {
for (Player _dieserSpieler : getServer().getOnlinePlayers()) {
2020-12-24 03:49:28 +00:00
addPlayTime(_dieserSpieler.getUniqueId(), 1);
}
}
2016-09-12 20:19:11 +00:00
2020-12-28 08:11:09 +00:00
private void addPlayTime(UUID _playerUUID, int _time) {
2017-02-09 00:27:20 +00:00
int _spielerPlaytime = m_db.getPlayerTime(_playerUUID);
2016-09-12 20:19:11 +00:00
_spielerPlaytime = _spielerPlaytime + _time;
2017-02-09 00:27:20 +00:00
m_db.update(_playerUUID, _spielerPlaytime);
2017-02-07 21:59:17 +00:00
checkPlaytimeCommand(_playerUUID, _spielerPlaytime);
2016-09-12 20:19:11 +00:00
}
2020-12-28 08:11:09 +00:00
private UUID getPlayerUUID(String _playerName) {
2016-09-13 18:48:52 +00:00
Player _returnPlayer = Bukkit.getPlayerExact(_playerName);
2020-12-28 08:11:09 +00:00
if (_returnPlayer != null)
2016-09-13 18:48:52 +00:00
return _returnPlayer.getUniqueId();
2020-12-28 08:11:09 +00:00
for (Player _dieserSpieler : getServer().getOnlinePlayers()) {
if (_dieserSpieler.getName() == _playerName) {
2016-09-12 20:19:11 +00:00
return _dieserSpieler.getUniqueId();
}
}
2016-09-12 21:14:34 +00:00
UUID _playerUUID = UUIDCache.get(_playerName);
2016-09-12 20:19:11 +00:00
2020-12-28 08:11:09 +00:00
if (_playerUUID == null)
2016-09-12 21:15:19 +00:00
return null;
2016-09-12 21:14:34 +00:00
OfflinePlayer _offlinePlayer = Bukkit.getOfflinePlayer(_playerUUID);
2016-09-12 20:19:11 +00:00
2020-12-28 08:11:09 +00:00
if (_offlinePlayer != null) {
if (!_offlinePlayer.hasPlayedBefore())
2016-09-12 21:14:34 +00:00
return null;
2016-09-12 20:19:11 +00:00
2016-09-12 21:14:34 +00:00
return _offlinePlayer.getUniqueId();
2020-12-28 08:11:09 +00:00
} else {
return null;
2016-09-12 20:19:11 +00:00
}
}
2020-12-28 08:11:09 +00:00
private long[] calculateTime(long seconds) {
2016-09-12 20:19:11 +00:00
long sec = seconds % 60;
long minutes = seconds % 3600 / 60;
long hours = seconds % 86400 / 3600;
long days = seconds / 86400;
return new long[]{days, hours, minutes, sec};
}
2020-12-28 08:11:09 +00:00
private String getTimeString(int _timeInMin) {
2016-09-12 20:19:11 +00:00
String _ausgabe = "";
long seconds = _timeInMin * 60;
2020-12-28 08:11:09 +00:00
if (seconds != 0) {
2016-09-12 20:19:11 +00:00
long[] _time = calculateTime(seconds);
2020-12-28 08:11:09 +00:00
if (_time[0] > 0)
2016-09-12 20:19:11 +00:00
_ausgabe += _time[0] + " " + m_config.getTextDateDays() + " ";
2020-12-28 08:11:09 +00:00
if (_time[1] > 0)
2016-09-12 20:19:11 +00:00
_ausgabe += _time[1] + " " + m_config.getTextDateHours() + " ";
2020-12-28 08:11:09 +00:00
if (_time[2] > 0)
2016-09-12 20:19:11 +00:00
_ausgabe += _time[2] + " " + m_config.getTextDateMinutes();
2020-12-28 08:11:09 +00:00
} else {
2016-09-12 20:19:11 +00:00
_ausgabe += "0 " + m_config.getTextDateMinutes();
}
return _ausgabe;
}
2020-12-28 08:11:09 +00:00
private String getChatMessage(String _plainText, String _player, int _time, int _rang, boolean _color) {
2016-09-12 20:19:11 +00:00
String returnText = m_config.getTextPrefix() + _plainText;
returnText = returnText.replace("%s", _player);
returnText = returnText.replace("%t", "" + getTimeString(_time));
returnText = returnText.replace("%r", "" + _rang);
returnText = ChatColor.translateAlternateColorCodes('&', returnText);
2016-09-14 07:03:50 +00:00
2020-12-28 08:11:09 +00:00
if (_color == false)
2016-09-14 07:03:50 +00:00
returnText = ChatColor.stripColor(returnText);
2016-09-12 20:19:11 +00:00
return returnText;
}
2017-02-07 21:59:17 +00:00
2020-12-28 08:11:09 +00:00
private void checkPlaytimeCommand(UUID _player, int _time) {
2017-02-07 21:59:17 +00:00
List<TimeCommand> _timeCommands = m_config.getTimeCommandList();
2020-12-28 08:11:09 +00:00
for (TimeCommand _tc : _timeCommands) {
if (_tc.getTime() == _time) {
2017-02-07 23:11:40 +00:00
String _commandWithParas = _tc.getCommand();
_commandWithParas = _commandWithParas.replace("%%player%%", UUIDCache.get(_player));
_commandWithParas = _commandWithParas.replace("%%time%%", "" + _time);
_commandWithParas = ChatColor.translateAlternateColorCodes('&', _commandWithParas);
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), _commandWithParas);
2017-02-07 21:59:17 +00:00
}
}
}
2016-09-12 20:19:11 +00:00
}