Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/main/java/ru/nightmirror/wlbytime/shared/database/Database.java
  • Loading branch information
NightMirror committed Mar 17, 2023
2 parents 9509d3e + 1bb6433 commit 572bbb4
Show file tree
Hide file tree
Showing 14 changed files with 219 additions and 163 deletions.
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
**/whitelist add [nickname] (time)** - *whitelistbytime.add*\
**/whitelist remove [nickname]** - *whitelistbytime.remove*\
**/whitelist check [nickname]** - *whitelistbytime.check*\
**/whitelist checkme** - *whitelistbytime.checkme*\
**/whitelist time [nickname] [time]** - *whitelistbytime.time"*\
**/whitelist reload** - *whitelistbytime.reload*\
**/whitelist getall** - *whitelistbytime.getall*
Expand Down Expand Up @@ -94,6 +95,7 @@ type: 'sqlite'
# If not sqlite or h2
address: 'localhost:3030'
name: 'minecraft'
table: 'whitelist'

# If using user and password
use-user-and-password: false
Expand All @@ -111,6 +113,10 @@ in-whitelist-false: '&c✖'
# %wlbytime_time_left% - How much is left in whitelist
time-left: '&a%time%'

# Show less information (without hours, minutes, seconds) when time left more than one day
less-info-time-left: false
less-info-expires-today: 'Expires in'

####### MESSAGES #######

minecraft-commands:
Expand All @@ -133,10 +139,12 @@ minecraft-commands:
# For command with time
successfully-added-for-time: '&a%player% &fadded to whitelist for &a%time%'
still-in-whitelist-for-time: '&a%player% &fwill be in whitelist still &a%time%'
checkme-still-in-whitelist-for-time: '&fYou will remain on the whitelist for &a%time%'

# For command without time
successfully-added: '&a%player% &fadded to whitelist forever'
still-in-whitelist: '&a%player% &fwill be in whitelist forever'
checkme-still-in-whitelist: '&fYou are permanently whitelisted'

list-title: '&a> Whitelist:'
list-player: '&a| &f%player% &7[%time%]'
Expand All @@ -154,6 +162,7 @@ minecraft-commands:
- '&a| &f/whitelist add [nickname] (time)'
- '&a| &f/whitelist remove [nickname]'
- '&a| &f/whitelist check [nickname]'
- '&a| &f/whitelist checkme'
- '&a| &f/whitelist reload'
- '&a| &f/whitelist getall'
- '&a| &f/whitelist time set/add/remove [nickname] [time]'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ru.nightmirror.wlbytime.interfaces.api;

import java.util.List;
import java.util.Map;

public interface IAPI {
/**
Expand Down Expand Up @@ -44,7 +45,7 @@ public interface IAPI {
* Get all player's in whitelist
* @return Nicknames of players
*/
List<String> getAllPlayers();
Map<String, Long> getAllPlayers();

/**
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package ru.nightmirror.wlbytime.interfaces.database;

import java.util.List;
import java.util.Map;

public interface IDatabase {

void reload();
void addPlayer(String nickname, long until);
Boolean checkPlayer(String nickname);
Boolean checkPlayer(long until);
long getUntil(String nickname);
void setUntil(String nickname, long until);
void removePlayer(String nickname);
List<String> getAll();
Map<String, Long> getAll();
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public interface ICommandsExecutor {
void getAll(CommandSender sender, String[] strings);
void remove(CommandSender sender, String[] strings);
void check(CommandSender sender, String[] strings);
void checkme(CommandSender sender);
void add(CommandSender sender, String[] strings);
void time(CommandSender sender, String[] strings);
void turn(CommandSender sender, String[] strings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@

public class TimeConvertor {

public static String getTimeLine(Plugin plugin, long ms) {
public static String getTimeLine(Plugin plugin, long ms, Boolean placeHolder) {
String line = "";
long fullMs = ms;

if ((ms / 31536000000L) > 0L) {
line = ms / 31536000000L + plugin.getConfig().getStringList("time-units.year").get(0) + " ";
Expand All @@ -29,17 +30,30 @@ public static String getTimeLine(Plugin plugin, long ms) {
ms = ms - (ms / 86400000L)*86400000L;
}

if ((ms / 3600000L) > 0L) {
line = line + ms / 3600000L + plugin.getConfig().getStringList("time-units.hour").get(0) + " ";
ms = ms - (ms / 3600000L)*3600000L;
}
if (plugin.getConfig().getBoolean("less-info-time-left", false) && placeHolder) {
if((fullMs / 86400000L) < 1L) {
line = plugin.getConfig().getString("less-info-expires-today", "Expires in") + " ";
if (fullMs / 3600000L > 0) {
line = line + fullMs / 3600000L + plugin.getConfig().getStringList("time-units.hour").get(0);
} else {
line = line + fullMs / 60000L + plugin.getConfig().getStringList("time-units.minute").get(0);
}
}
} else {
if ((ms / 3600000L) > 0L) {
line = line + ms / 3600000L + plugin.getConfig().getStringList("time-units.hour").get(0) + " ";
ms = ms - (ms / 3600000L)*3600000L;
}

if ((ms / 60L) > 0L) {
line = line + ms / 60000L + plugin.getConfig().getStringList("time-units.minute").get(0) + " ";
ms = ms - (ms / 60000L)*60000L;
}

if ((ms / 60L) > 0L) {
line = line + ms / 60000L + plugin.getConfig().getStringList("time-units.minute").get(0) + " ";
ms = ms - (ms / 60000L)*60000L;
if (ms != 0L) line = line + (ms/1000L) + plugin.getConfig().getStringList("time-units.second").get(0) + " ";
}

if (ms != 0L) line = line + (ms/1000L) + plugin.getConfig().getStringList("time-units.second").get(0) + " ";
if (ms < 0L) line = plugin.getConfig().getString("minecraft-commands.forever", "forever");

return line.trim();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void onEnable() {
getCommand("wl").setTabCompleter(new WhitelistTabCompleter(database, this));

if (getConfig().getBoolean("checker-thread", true)) {
checker = new Checker(this, database).start(getConfig().getInt("checker-thread", 1));
checker = new Checker(this, database).start(getConfig().getInt("checker-delay", 1));
}

api = new API(database, this);
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/ru/nightmirror/wlbytime/shared/api/API.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import ru.nightmirror.wlbytime.shared.WhitelistByTime;

import java.util.List;
import java.util.Map;

@RequiredArgsConstructor
public class API implements IAPI {
Expand All @@ -33,7 +34,7 @@ public long getUntil(String nickname) {

@Override
public String getUntilString(String nickname) {
return TimeConvertor.getTimeLine(plugin, database.getUntil(nickname));
return TimeConvertor.getTimeLine(plugin, database.getUntil(nickname), false);
}

@Override
Expand All @@ -44,7 +45,7 @@ public boolean removePlayer(String nickname) {
}

@Override
public List<String> getAllPlayers() {
public Map<String, Long> getAllPlayers() {
return database.getAll();
}

Expand Down
65 changes: 63 additions & 2 deletions src/main/java/ru/nightmirror/wlbytime/shared/common/Checker.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,84 @@
package ru.nightmirror.wlbytime.shared.common;

import lombok.RequiredArgsConstructor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import ru.nightmirror.wlbytime.interfaces.database.IDatabase;
import ru.nightmirror.wlbytime.misc.convertors.ColorsConvertor;
import ru.nightmirror.wlbytime.shared.WhitelistByTime;
import ru.nightmirror.wlbytime.shared.api.events.PlayerRemovedFromWhitelistEvent;

import java.util.*;

@RequiredArgsConstructor
public class Checker {

private final WhitelistByTime plugin;
private final IDatabase database;
public static Map<String, Long> players = new HashMap<String, Long>();
final public static List<String> toKick = new ArrayList<>();

private String casedName(String nickname) {
if (!plugin.getConfig().getBoolean("case-sensitive", true)) {
nickname = nickname.toLowerCase(Locale.ROOT);
}
return nickname;
}

private void check() {
Map<String, Long> all = database.getAll();
synchronized (players) {
players = all;
}

for (Map.Entry<String, Long> playerEntry: all.entrySet()) {
if (!database.checkPlayer(playerEntry.getValue())) {
database.removePlayer(playerEntry.getKey());
}
}

for (Player player : plugin.getServer().getOnlinePlayers()) {
String name = casedName(player.getName());
if(!all.containsKey(name)) {
synchronized (toKick) {
toKick.add(casedName(name));
}
}
}
}

private void kick(String nickname) {
if (plugin.isWhitelistEnabled()) {
Player player = plugin.getServer().getPlayer(nickname);
if (player != null && player.isOnline()) {
List<String> message = ColorsConvertor.convert(plugin.getConfig().getStringList("minecraft-commands.you-not-in-whitelist-kick"));
player.kickPlayer(String.join("\n", message));
}
}
}

public BukkitTask start(final int delaySeconds) {
return new BukkitRunnable() {
new BukkitRunnable() {
@Override
public void run() {
database.getAll();
synchronized (toKick) {
for (String player : toKick) {
PlayerRemovedFromWhitelistEvent event = new PlayerRemovedFromWhitelistEvent(player);
Bukkit.getPluginManager().callEvent(event);

if (event.isCancelled()) return;

kick(player);
}

if(toKick.size() > 0) {
toKick.removeAll(toKick);
}
}
}
}.runTaskTimer(plugin, 20L * delaySeconds, 20L * delaySeconds);
return Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, this::check, 20L * delaySeconds, 20L * delaySeconds);
}
}
Loading

0 comments on commit 572bbb4

Please sign in to comment.