mirror of
https://github.com/itHotL/PlayerStats.git
synced 2025-01-24 22:01:19 +01:00
Made an "execute" step in the API
This commit is contained in:
parent
a34bf32c5a
commit
3a9eb86c1e
@ -9,7 +9,7 @@ import com.gmail.artemis.the.gr8.playerstats.commands.TabCompleter;
|
|||||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.listeners.JoinListener;
|
import com.gmail.artemis.the.gr8.playerstats.listeners.JoinListener;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
|
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatManager;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatRetriever;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.utils.EnumHandler;
|
import com.gmail.artemis.the.gr8.playerstats.utils.EnumHandler;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||||
@ -112,9 +112,9 @@ public final class Main extends JavaPlugin {
|
|||||||
|
|
||||||
shareManager = new ShareManager(config);
|
shareManager = new ShareManager(config);
|
||||||
outputManager = new OutputManager(getAdventure(), config, shareManager);
|
outputManager = new OutputManager(getAdventure(), config, shareManager);
|
||||||
StatManager statManager = new StatManager(offlinePlayerHandler);
|
StatRetriever statRetriever = new StatRetriever(offlinePlayerHandler);
|
||||||
threadManager = new ThreadManager(config, statManager, outputManager);
|
threadManager = new ThreadManager(config, statRetriever, outputManager);
|
||||||
|
|
||||||
playerStatsAPI = new PlayerStatsAPI(statManager, outputManager, offlinePlayerHandler);
|
playerStatsAPI = new PlayerStatsAPI(statRetriever, outputManager, offlinePlayerHandler);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,7 +5,7 @@ import com.gmail.artemis.the.gr8.playerstats.enums.StandardMessage;
|
|||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
|
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.reload.ReloadThread;
|
import com.gmail.artemis.the.gr8.playerstats.reload.ReloadThread;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatManager;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatRetriever;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatThread;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatThread;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -25,17 +25,17 @@ public final class ThreadManager {
|
|||||||
|
|
||||||
private static ConfigHandler config;
|
private static ConfigHandler config;
|
||||||
private static OutputManager outputManager;
|
private static OutputManager outputManager;
|
||||||
private static StatManager statManager;
|
private static StatRetriever statRetriever;
|
||||||
|
|
||||||
private ReloadThread lastActiveReloadThread;
|
private ReloadThread lastActiveReloadThread;
|
||||||
private StatThread lastActiveStatThread;
|
private StatThread lastActiveStatThread;
|
||||||
private final HashMap<String, Thread> statThreads;
|
private final HashMap<String, Thread> statThreads;
|
||||||
private static long lastRecordedCalcTime;
|
private static long lastRecordedCalcTime;
|
||||||
|
|
||||||
public ThreadManager(ConfigHandler config, StatManager statManager, OutputManager outputManager) {
|
public ThreadManager(ConfigHandler config, StatRetriever statRetriever, OutputManager outputManager) {
|
||||||
ThreadManager.config = config;
|
ThreadManager.config = config;
|
||||||
ThreadManager.outputManager = outputManager;
|
ThreadManager.outputManager = outputManager;
|
||||||
ThreadManager.statManager = statManager;
|
ThreadManager.statRetriever = statRetriever;
|
||||||
|
|
||||||
statThreads = new HashMap<>();
|
statThreads = new HashMap<>();
|
||||||
statThreadID = 0;
|
statThreadID = 0;
|
||||||
@ -90,7 +90,7 @@ public final class ThreadManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void startNewStatThread(StatRequest statRequest) {
|
private void startNewStatThread(StatRequest statRequest) {
|
||||||
lastActiveStatThread = new StatThread(outputManager, statManager, statThreadID, statRequest, lastActiveReloadThread);
|
lastActiveStatThread = new StatThread(outputManager, statRetriever, statThreadID, statRequest, lastActiveReloadThread);
|
||||||
statThreads.put(statRequest.getCommandSender().getName(), lastActiveStatThread);
|
statThreads.put(statRequest.getCommandSender().getName(), lastActiveStatThread);
|
||||||
lastActiveStatThread.start();
|
lastActiveStatThread.start();
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.api;
|
package com.gmail.artemis.the.gr8.playerstats.api;
|
||||||
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.Main;
|
import com.gmail.artemis.the.gr8.playerstats.Main;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.PlayerStatRequest;
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.ServerStatRequest;
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.TopStatRequest;
|
|
||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@ -27,34 +24,7 @@ public interface PlayerStats {
|
|||||||
return Main.getPlayerStatsAPI();
|
return Main.getPlayerStatsAPI();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets a StatRequest object that can be used to look up a player-statistic.
|
StatManager getStatManager();
|
||||||
This StatRequest will have all default settings already configured,
|
|
||||||
and will be processed as soon as you call one of its methods.
|
|
||||||
|
|
||||||
@return a PlayerStatRequest that can be used to look up a statistic for the
|
|
||||||
Player whose name is provided*/
|
|
||||||
PlayerStatRequest playerStat(String playerName);
|
|
||||||
|
|
||||||
/** Gets a StatRequest object that can be used to look up a server-statistic.
|
|
||||||
This StatRequest will have all default settings already configured,
|
|
||||||
and will be processed as soon as you call one of its methods.
|
|
||||||
<br>
|
|
||||||
<br> Don't call this from the main Thread! (see class description)
|
|
||||||
|
|
||||||
@return a ServerStatRequest that can be used to look up a server total*/
|
|
||||||
ServerStatRequest serverStat();
|
|
||||||
|
|
||||||
/** Gets a StatRequest object that can be used to look up a top-x-statistic.
|
|
||||||
This StatRequest will have all default settings already configured, and will be
|
|
||||||
processed as soon as you call one of its methods.
|
|
||||||
<br>
|
|
||||||
<br> Don't call this from the main Thread! (see class description)
|
|
||||||
|
|
||||||
@param topListSize how big the top-x should be (10 by default)
|
|
||||||
@return a TopStatRequest that can be used to look up a top statistic*/
|
|
||||||
TopStatRequest topStat(int topListSize);
|
|
||||||
|
|
||||||
TopStatRequest totalTopStatList();
|
|
||||||
|
|
||||||
Formatter getFormatter();
|
Formatter getFormatter();
|
||||||
}
|
}
|
@ -1,48 +1,32 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.api;
|
package com.gmail.artemis.the.gr8.playerstats.api;
|
||||||
|
|
||||||
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatManager;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatRetriever;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.*;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.request.*;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||||
|
|
||||||
import static org.jetbrains.annotations.ApiStatus.Internal;
|
import static org.jetbrains.annotations.ApiStatus.Internal;
|
||||||
|
|
||||||
/** The implementation of the API Interface */
|
/** The implementation of the API Interface */
|
||||||
public final class PlayerStatsAPI implements PlayerStats {
|
public final class PlayerStatsAPI implements PlayerStats, StatManager {
|
||||||
|
|
||||||
private final OfflinePlayerHandler offlinePlayerHandler;
|
private final OfflinePlayerHandler offlinePlayerHandler;
|
||||||
private static StatCalculator statCalculator;
|
private static StatRetriever statRetriever;
|
||||||
private static StatFormatter statFormatter;
|
private static StatFormatter statFormatter;
|
||||||
|
|
||||||
@Internal
|
@Internal
|
||||||
public PlayerStatsAPI(StatManager stat, StatFormatter format, OfflinePlayerHandler offlinePlayers) {
|
public PlayerStatsAPI(StatRetriever stat, StatFormatter format, OfflinePlayerHandler offlinePlayers) {
|
||||||
statCalculator = stat;
|
statRetriever = stat;
|
||||||
statFormatter = format;
|
statFormatter = format;
|
||||||
offlinePlayerHandler = offlinePlayers;
|
offlinePlayerHandler = offlinePlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
static StatRetriever statCalculator() {
|
||||||
public PlayerStatRequest playerStat(String playerName) {
|
return statRetriever;
|
||||||
StatRequestHandler statRequestHandler = StatRequestHandler.playerRequestHandler(playerName);
|
|
||||||
return new PlayerStatRequest(statRequestHandler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
static StatFormatter statFormatter() {
|
||||||
public ServerStatRequest serverStat() {
|
return statFormatter;
|
||||||
StatRequestHandler statRequestHandler = StatRequestHandler.serverRequestHandler();
|
|
||||||
return new ServerStatRequest(statRequestHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TopStatRequest topStat(int topListSize) {
|
|
||||||
StatRequestHandler statRequestHandler = StatRequestHandler.topRequestHandler(topListSize);
|
|
||||||
return new TopStatRequest(statRequestHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TopStatRequest totalTopStatList() {
|
|
||||||
int playerCount = offlinePlayerHandler.getOfflinePlayerCount();
|
|
||||||
return topStat(playerCount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -50,11 +34,32 @@ public final class PlayerStatsAPI implements PlayerStats {
|
|||||||
return statFormatter;
|
return statFormatter;
|
||||||
}
|
}
|
||||||
|
|
||||||
static StatCalculator statCalculator() {
|
@Override
|
||||||
return statCalculator;
|
public StatManager getStatManager() {
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
static StatFormatter statFormatter() {
|
@Override
|
||||||
return statFormatter;
|
public RequestGenerator<Integer> getPlayerStat(String playerName) {
|
||||||
|
StatRequest request = StatRequestHandler.getBasicPlayerStatRequest(playerName);
|
||||||
|
return new PlayerStatRequest(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServerStatRequest calculateServerStat() {
|
||||||
|
StatRequest request = StatRequestHandler.getBasicServerStatRequest();
|
||||||
|
return new ServerStatRequest(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TopStatRequest calculateTopStat(int topListSize) {
|
||||||
|
StatRequest request = StatRequestHandler.getBasicTopStatRequest(topListSize);
|
||||||
|
return new TopStatRequest(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TopStatRequest calculateTotalTopStatList() {
|
||||||
|
int playerCount = offlinePlayerHandler.getOfflinePlayerCount();
|
||||||
|
return calculateTopStat(playerCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,51 +1,20 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.api;
|
package com.gmail.artemis.the.gr8.playerstats.api;
|
||||||
|
|
||||||
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatRetriever;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.Statistic;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.jetbrains.annotations.ApiStatus.Internal;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
/** Completes a basic {@link StatRequest} provided by the {@link PlayerStatsAPI}
|
/** Completes a basic {@link StatRequest} provided by the {@link PlayerStatsAPI}
|
||||||
and performs a statistic lookup with the information that is stored inside this StatRequest.*/
|
and performs a statistic lookup with the information that is stored inside this StatRequest.*/
|
||||||
public interface RequestExecutor<T> {
|
public interface RequestExecutor<T> {
|
||||||
|
|
||||||
@Internal
|
static StatRetriever getStatCalculator() {
|
||||||
default StatCalculator getStatCalculator() {
|
|
||||||
return PlayerStatsAPI.statCalculator();
|
return PlayerStatsAPI.statCalculator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Internal
|
static StatFormatter getStatFormatter() {
|
||||||
default StatFormatter getStatFormatter() {
|
|
||||||
return PlayerStatsAPI.statFormatter();
|
return PlayerStatsAPI.statFormatter();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets a StatResult for a Statistic of Statistic.Type {@code Untyped}.
|
StatResult<T> execute();
|
||||||
|
|
||||||
@param statistic a Statistic of Type.Untyped
|
|
||||||
@return a {@link StatResult}
|
|
||||||
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Untyped*/
|
|
||||||
StatResult<T> untyped(@NotNull Statistic statistic) throws IllegalArgumentException;
|
|
||||||
|
|
||||||
/** Gets a StatResult for a Statistic of Statistic.Type Block or Item.
|
|
||||||
|
|
||||||
@param statistic a Statistic of Type.Block or Type.Item
|
|
||||||
@param material a block if the <code>statistic</code> is of Type.Block,
|
|
||||||
and an item if the <code>statistic</code> is of Type.Item
|
|
||||||
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Block
|
|
||||||
(with a block as <code>material</code>), or <code>statistic</code> is not of Type.Item
|
|
||||||
(with an item as <code>material</code>)
|
|
||||||
@return a {@link StatResult} */
|
|
||||||
StatResult<T> blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException;
|
|
||||||
|
|
||||||
/** Gets a StatResult for a Statistic of Statistic.Type Entity.
|
|
||||||
|
|
||||||
@param statistic a Statistic of Type.Entity
|
|
||||||
@param entityType an EntityType
|
|
||||||
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Entity,
|
|
||||||
or <code>entityType</code> is not a valid EntityType
|
|
||||||
@return a {@link StatResult} */
|
|
||||||
StatResult<T> entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException;
|
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.api;
|
package com.gmail.artemis.the.gr8.playerstats.api;
|
||||||
|
|
||||||
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatRetriever;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Statistic;
|
import org.bukkit.Statistic;
|
||||||
@ -7,16 +8,16 @@ import org.bukkit.entity.EntityType;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
/** Turns user input into a completed {@link StatRequest}. This StatRequest should hold all
|
/** Turns user input into a completed {@link StatRequest}. This StatRequest should hold all
|
||||||
the information PlayerStats needs to work with, and is used by the {@link StatCalculator}
|
the information PlayerStats needs to work with, and is used by the {@link StatRetriever}
|
||||||
to get the desired statistic data.*/
|
to get the desired statistic data.*/
|
||||||
public interface RequestGenerator {
|
public interface RequestGenerator<T> {
|
||||||
|
|
||||||
/** Gets a StatRequest for a Statistic of Statistic.Type {@code Untyped}.
|
/** Gets a StatRequest for a Statistic of Statistic.Type {@code Untyped}.
|
||||||
|
|
||||||
@param statistic a Statistic of Type.Untyped
|
@param statistic a Statistic of Type.Untyped
|
||||||
@return a {@link StatRequest}
|
@return a {@link StatRequest}
|
||||||
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Untyped*/
|
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Untyped*/
|
||||||
StatRequest untyped(@NotNull Statistic statistic) throws IllegalArgumentException;
|
RequestExecutor<T> untyped(@NotNull Statistic statistic) throws IllegalArgumentException;
|
||||||
|
|
||||||
/** Gets a StatRequest for a Statistic of Statistic.Type Block or Item.
|
/** Gets a StatRequest for a Statistic of Statistic.Type Block or Item.
|
||||||
|
|
||||||
@ -27,7 +28,7 @@ public interface RequestGenerator {
|
|||||||
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Block
|
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Block
|
||||||
(with a block as <code>material</code>), or <code>statistic</code> is not of Type.Item
|
(with a block as <code>material</code>), or <code>statistic</code> is not of Type.Item
|
||||||
(with an item as <code>material</code>) */
|
(with an item as <code>material</code>) */
|
||||||
StatRequest blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException;
|
RequestExecutor<T> blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException;
|
||||||
|
|
||||||
/** Gets a StatRequest for a Statistic of Statistic.Type Entity.
|
/** Gets a StatRequest for a Statistic of Statistic.Type Entity.
|
||||||
|
|
||||||
@ -35,5 +36,5 @@ public interface RequestGenerator {
|
|||||||
@param entityType an EntityType
|
@param entityType an EntityType
|
||||||
@return a {@link StatRequest}
|
@return a {@link StatRequest}
|
||||||
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Entity*/
|
@throws IllegalArgumentException if <code>statistic</code> is not of Type.Entity*/
|
||||||
StatRequest entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException;
|
RequestExecutor<T> entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException;
|
||||||
}
|
}
|
@ -1,32 +0,0 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.api;
|
|
||||||
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
|
||||||
import org.jetbrains.annotations.ApiStatus.Internal;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
|
|
||||||
/** The {@link StatCalculator} is responsible for getting, calculating and/or ordering raw numbers.
|
|
||||||
It represents the actual statistic-getting magic that happens once a valid
|
|
||||||
{@link StatRequest} is passed to it.
|
|
||||||
<br>
|
|
||||||
<br>The StatCalculator gets its data from the vanilla statistic files (stored by the server). It can return three kinds of data,
|
|
||||||
depending on the chosen {@link Target}:
|
|
||||||
<br>- int (for {@link Target#PLAYER})
|
|
||||||
<br>- long (for {@link Target#SERVER})
|
|
||||||
<br>- LinkedHashMap[String player-name, Integer number] (for {@link Target#TOP})
|
|
||||||
<br>
|
|
||||||
<br>For more information on how to create a valid StatRequest,
|
|
||||||
see the class description for {@link StatRequest}.*/
|
|
||||||
@Internal
|
|
||||||
public interface StatCalculator {
|
|
||||||
|
|
||||||
/** Returns the requested Statistic*/
|
|
||||||
int getPlayerStat(StatRequest statRequest);
|
|
||||||
|
|
||||||
/** Don't call from main Thread!*/
|
|
||||||
long getServerStat(StatRequest statRequest);
|
|
||||||
|
|
||||||
/** Don't call from main Thread!*/
|
|
||||||
LinkedHashMap<String, Integer> getTopStats(StatRequest statRequest);
|
|
||||||
}
|
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.gmail.artemis.the.gr8.playerstats.api;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
|
public interface StatManager {
|
||||||
|
|
||||||
|
/** Gets a StatRequest object that can be used to look up a player-statistic.
|
||||||
|
This StatRequest will have all default settings already configured,
|
||||||
|
and will be processed as soon as you call one of its methods.
|
||||||
|
|
||||||
|
@return a PlayerStatRequest that can be used to look up a statistic for the
|
||||||
|
Player whose name is provided*/
|
||||||
|
RequestGenerator<Integer> getPlayerStat(String playerName);
|
||||||
|
|
||||||
|
/** Gets a StatRequest object that can be used to look up a server-statistic.
|
||||||
|
This StatRequest will have all default settings already configured,
|
||||||
|
and will be processed as soon as you call one of its methods.
|
||||||
|
<br>
|
||||||
|
<br> Don't call this from the main Thread! (see class description)
|
||||||
|
|
||||||
|
@return a ServerStatRequest that can be used to look up a server total*/
|
||||||
|
RequestGenerator<Long> calculateServerStat();
|
||||||
|
|
||||||
|
/** Gets a StatRequest object that can be used to look up a top-x-statistic.
|
||||||
|
This StatRequest will have all default settings already configured, and will be
|
||||||
|
processed as soon as you call one of its methods.
|
||||||
|
<br>
|
||||||
|
<br> Don't call this from the main Thread! (see class description)
|
||||||
|
|
||||||
|
@param topListSize how big the top-x should be (10 by default)
|
||||||
|
@return a TopStatRequest that can be used to look up a top statistic*/
|
||||||
|
RequestGenerator<LinkedHashMap<String, Integer>> calculateTopStat(int topListSize);
|
||||||
|
|
||||||
|
RequestGenerator<LinkedHashMap<String, Integer>> calculateTotalTopStatList();
|
||||||
|
}
|
@ -32,13 +32,14 @@ public final class StatCommand implements CommandExecutor {
|
|||||||
outputManager.sendExamples(sender);
|
outputManager.sendExamples(sender);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
StatRequestHandler statRequestHandler = StatRequestHandler.internalRequestHandler(sender);
|
StatRequest baseRequest = StatRequestHandler.getBasicInternalStatRequest(sender);
|
||||||
StatRequest statRequest = statRequestHandler.getRequestFromArgs(args);
|
StatRequestHandler statRequestHandler = new StatRequestHandler(baseRequest);
|
||||||
|
|
||||||
if (statRequest.isValid()) {
|
StatRequest completedRequest = statRequestHandler.getRequestFromArgs(args);
|
||||||
threadManager.startStatThread(statRequest);
|
if (completedRequest.isValid()) {
|
||||||
|
threadManager.startStatThread(completedRequest);
|
||||||
} else {
|
} else {
|
||||||
sendFeedback(statRequest);
|
sendFeedback(completedRequest);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import com.gmail.artemis.the.gr8.playerstats.enums.DebugLevel;
|
|||||||
import com.gmail.artemis.the.gr8.playerstats.enums.StandardMessage;
|
import com.gmail.artemis.the.gr8.playerstats.enums.StandardMessage;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
|
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatThread;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatThread;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatManager;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.StatRetriever;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -47,7 +47,7 @@ public final class ReloadThread extends Thread {
|
|||||||
/** This method will perform a series of tasks. If a {@link StatThread} is still running,
|
/** This method will perform a series of tasks. If a {@link StatThread} is still running,
|
||||||
it will join the statThread and wait for it to finish. Then, it will reload the config,
|
it will join the statThread and wait for it to finish. Then, it will reload the config,
|
||||||
update the offlinePlayerList in the {@link OfflinePlayerHandler}, update the {@link DebugLevel},
|
update the offlinePlayerList in the {@link OfflinePlayerHandler}, update the {@link DebugLevel},
|
||||||
update the share-settings in {@link ShareManager} and topListSize-settings in {@link StatManager},
|
update the share-settings in {@link ShareManager} and topListSize-settings in {@link StatRetriever},
|
||||||
and update the MessageBuilders in the {@link OutputManager}.*/
|
and update the MessageBuilders in the {@link OutputManager}.*/
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.statistic;
|
package com.gmail.artemis.the.gr8.playerstats.statistic;
|
||||||
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.ThreadManager;
|
import com.gmail.artemis.the.gr8.playerstats.ThreadManager;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.api.StatCalculator;
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.enums.DebugLevel;
|
import com.gmail.artemis.the.gr8.playerstats.enums.DebugLevel;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.request.StatRequest;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||||
@ -15,17 +14,15 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
import java.util.concurrent.ForkJoinPool;
|
import java.util.concurrent.ForkJoinPool;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public final class StatManager implements StatCalculator {
|
public final class StatRetriever {
|
||||||
|
|
||||||
private final OfflinePlayerHandler offlinePlayerHandler;
|
private final OfflinePlayerHandler offlinePlayerHandler;
|
||||||
|
|
||||||
public StatManager(OfflinePlayerHandler offlinePlayerHandler) {
|
public StatRetriever(OfflinePlayerHandler offlinePlayerHandler) {
|
||||||
this.offlinePlayerHandler = offlinePlayerHandler;
|
this.offlinePlayerHandler = offlinePlayerHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the statistic data for an individual player. If somehow the player
|
|
||||||
cannot be found, this returns 0.*/
|
|
||||||
@Override
|
|
||||||
public int getPlayerStat(StatRequest statRequest) {
|
public int getPlayerStat(StatRequest statRequest) {
|
||||||
OfflinePlayer player = offlinePlayerHandler.getOfflinePlayer(statRequest.getPlayerName());
|
OfflinePlayer player = offlinePlayerHandler.getOfflinePlayer(statRequest.getPlayerName());
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
@ -39,7 +36,6 @@ public final class StatManager implements StatCalculator {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public LinkedHashMap<String, Integer> getTopStats(StatRequest statRequest) {
|
public LinkedHashMap<String, Integer> getTopStats(StatRequest statRequest) {
|
||||||
return getAllStatsAsync(statRequest).entrySet().stream()
|
return getAllStatsAsync(statRequest).entrySet().stream()
|
||||||
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
|
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
|
||||||
@ -47,7 +43,6 @@ public final class StatManager implements StatCalculator {
|
|||||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getServerStat(StatRequest statRequest) {
|
public long getServerStat(StatRequest statRequest) {
|
||||||
List<Integer> numbers = getAllStatsAsync(statRequest)
|
List<Integer> numbers = getAllStatsAsync(statRequest)
|
||||||
.values()
|
.values()
|
@ -17,14 +17,14 @@ import java.util.*;
|
|||||||
public final class StatThread extends Thread {
|
public final class StatThread extends Thread {
|
||||||
|
|
||||||
private static OutputManager outputManager;
|
private static OutputManager outputManager;
|
||||||
private static StatManager statManager;
|
private static StatRetriever statRetriever;
|
||||||
|
|
||||||
private final ReloadThread reloadThread;
|
private final ReloadThread reloadThread;
|
||||||
private final StatRequest statRequest;
|
private final StatRequest statRequest;
|
||||||
|
|
||||||
public StatThread(OutputManager m, StatManager t, int ID, StatRequest s, @Nullable ReloadThread r) {
|
public StatThread(OutputManager m, StatRetriever t, int ID, StatRequest s, @Nullable ReloadThread r) {
|
||||||
outputManager = m;
|
outputManager = m;
|
||||||
statManager = t;
|
statRetriever = t;
|
||||||
|
|
||||||
reloadThread = r;
|
reloadThread = r;
|
||||||
statRequest = s;
|
statRequest = s;
|
||||||
@ -60,9 +60,9 @@ public final class StatThread extends Thread {
|
|||||||
Target selection = statRequest.getTarget();
|
Target selection = statRequest.getTarget();
|
||||||
try {
|
try {
|
||||||
TextComponent statResult = switch (selection) {
|
TextComponent statResult = switch (selection) {
|
||||||
case PLAYER -> outputManager.formatPlayerStat(statRequest, statManager.getPlayerStat(statRequest));
|
case PLAYER -> outputManager.formatPlayerStat(statRequest, statRetriever.getPlayerStat(statRequest));
|
||||||
case TOP -> outputManager.formatTopStat(statRequest, statManager.getTopStats(statRequest));
|
case TOP -> outputManager.formatTopStat(statRequest, statRetriever.getTopStats(statRequest));
|
||||||
case SERVER -> outputManager.formatServerStat(statRequest, statManager.getServerStat(statRequest));
|
case SERVER -> outputManager.formatServerStat(statRequest, statRetriever.getServerStat(statRequest));
|
||||||
};
|
};
|
||||||
if (statRequest.isAPIRequest()) {
|
if (statRequest.isAPIRequest()) {
|
||||||
String msg = ComponentUtils.getTranslatableComponentSerializer()
|
String msg = ComponentUtils.getTranslatableComponentSerializer()
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.statistic.request;
|
package com.gmail.artemis.the.gr8.playerstats.statistic.request;
|
||||||
|
|
||||||
|
import com.gmail.artemis.the.gr8.playerstats.api.RequestGenerator;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.api.RequestExecutor;
|
import com.gmail.artemis.the.gr8.playerstats.api.RequestExecutor;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.result.PlayerStatResult;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.result.PlayerStatResult;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
||||||
@ -9,36 +10,43 @@ import org.bukkit.Statistic;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public final class PlayerStatRequest implements RequestExecutor<Integer> {
|
public final class PlayerStatRequest implements RequestGenerator<Integer>, RequestExecutor<Integer> {
|
||||||
|
|
||||||
|
private final StatRequest statRequest;
|
||||||
private final StatRequestHandler statRequestHandler;
|
private final StatRequestHandler statRequestHandler;
|
||||||
|
|
||||||
public PlayerStatRequest(StatRequestHandler statRequestHandler) {
|
public PlayerStatRequest(StatRequest request) {
|
||||||
this.statRequestHandler = statRequestHandler;
|
statRequest = request;
|
||||||
|
statRequestHandler = new StatRequestHandler(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<Integer> untyped(@NotNull Statistic statistic) {
|
public RequestExecutor<Integer> untyped(@NotNull Statistic statistic) {
|
||||||
StatRequest completedRequest = statRequestHandler.untyped(statistic);
|
StatRequest completedRequest = statRequestHandler.untyped(statistic);
|
||||||
return getStatResult(completedRequest);
|
return new PlayerStatRequest(completedRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<Integer> blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) {
|
public RequestExecutor<Integer> blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) {
|
||||||
StatRequest completedRequest = statRequestHandler.blockOrItemType(statistic, material);
|
StatRequest completedRequest = statRequestHandler.blockOrItemType(statistic, material);
|
||||||
return getStatResult(completedRequest);
|
return new PlayerStatRequest(completedRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<Integer> entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) {
|
public RequestExecutor<Integer> entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) {
|
||||||
StatRequest completedRequest = statRequestHandler.entityType(statistic, entityType);
|
StatRequest completedRequest = statRequestHandler.entityType(statistic, entityType);
|
||||||
return getStatResult(completedRequest);
|
return new PlayerStatRequest(completedRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StatResult<Integer> execute() {
|
||||||
|
return getStatResult(statRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerStatResult getStatResult(StatRequest completedRequest) {
|
private PlayerStatResult getStatResult(StatRequest completedRequest) {
|
||||||
int stat = RequestExecutor.super.getStatCalculator()
|
int stat = RequestExecutor.getStatCalculator()
|
||||||
.getPlayerStat(completedRequest);
|
.getPlayerStat(completedRequest);
|
||||||
TextComponent prettyStat = RequestExecutor.super.getStatFormatter()
|
TextComponent prettyStat = RequestExecutor.getStatFormatter()
|
||||||
.formatPlayerStat(completedRequest, stat);
|
.formatPlayerStat(completedRequest, stat);
|
||||||
|
|
||||||
return new PlayerStatResult(stat, prettyStat);
|
return new PlayerStatResult(stat, prettyStat);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.statistic.request;
|
package com.gmail.artemis.the.gr8.playerstats.statistic.request;
|
||||||
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.api.RequestExecutor;
|
import com.gmail.artemis.the.gr8.playerstats.api.RequestExecutor;
|
||||||
|
import com.gmail.artemis.the.gr8.playerstats.api.RequestGenerator;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.result.ServerStatResult;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.result.ServerStatResult;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
@ -9,36 +10,43 @@ import org.bukkit.Statistic;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public final class ServerStatRequest implements RequestExecutor<Long> {
|
public final class ServerStatRequest implements RequestGenerator<Long>, RequestExecutor<Long> {
|
||||||
|
|
||||||
|
private final StatRequest statRequest;
|
||||||
private final StatRequestHandler statRequestHandler;
|
private final StatRequestHandler statRequestHandler;
|
||||||
|
|
||||||
public ServerStatRequest(StatRequestHandler statRequestHandler) {
|
public ServerStatRequest(StatRequest request) {
|
||||||
this.statRequestHandler = statRequestHandler;
|
statRequest = request;
|
||||||
|
statRequestHandler = new StatRequestHandler(statRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<Long> untyped(@NotNull Statistic statistic) {
|
public RequestExecutor<Long> untyped(@NotNull Statistic statistic) {
|
||||||
StatRequest completedRequest = statRequestHandler.untyped(statistic);
|
StatRequest completedRequest = statRequestHandler.untyped(statistic);
|
||||||
return getStatResult(completedRequest);
|
return new ServerStatRequest(completedRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<Long> blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) {
|
public RequestExecutor<Long> blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) {
|
||||||
StatRequest completedRequest = statRequestHandler.blockOrItemType(statistic, material);
|
StatRequest completedRequest = statRequestHandler.blockOrItemType(statistic, material);
|
||||||
return getStatResult(completedRequest);
|
return new ServerStatRequest(completedRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<Long> entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) {
|
public RequestExecutor<Long> entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) {
|
||||||
StatRequest completedRequest = statRequestHandler.entityType(statistic, entityType);
|
StatRequest completedRequest = statRequestHandler.entityType(statistic, entityType);
|
||||||
return getStatResult(completedRequest);
|
return new ServerStatRequest(completedRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StatResult<Long> execute() {
|
||||||
|
return getStatResult(statRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ServerStatResult getStatResult(StatRequest completedRequest) {
|
private ServerStatResult getStatResult(StatRequest completedRequest) {
|
||||||
long stat = RequestExecutor.super.getStatCalculator()
|
long stat = RequestExecutor.getStatCalculator()
|
||||||
.getServerStat(completedRequest);
|
.getServerStat(completedRequest);
|
||||||
TextComponent prettyStat = RequestExecutor.super.getStatFormatter()
|
TextComponent prettyStat = RequestExecutor.getStatFormatter()
|
||||||
.formatServerStat(completedRequest, stat);
|
.formatServerStat(completedRequest, stat);
|
||||||
|
|
||||||
return new ServerStatResult(stat, prettyStat);
|
return new ServerStatResult(stat, prettyStat);
|
||||||
|
@ -13,38 +13,43 @@ import org.bukkit.entity.EntityType;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public record StatRequestHandler(StatRequest statRequest) implements RequestGenerator {
|
public final class StatRequestHandler {
|
||||||
|
|
||||||
public static StatRequestHandler playerRequestHandler(String playerName) {
|
private final StatRequest statRequest;
|
||||||
|
|
||||||
|
public StatRequestHandler(StatRequest request) {
|
||||||
|
statRequest = request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static StatRequest getBasicPlayerStatRequest(String playerName) {
|
||||||
StatRequest request = StatRequest.getBasicAPIRequest();
|
StatRequest request = StatRequest.getBasicAPIRequest();
|
||||||
request.setTarget(Target.PLAYER);
|
request.setTarget(Target.PLAYER);
|
||||||
request.setPlayerName(playerName);
|
request.setPlayerName(playerName);
|
||||||
return new StatRequestHandler(request);
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StatRequestHandler serverRequestHandler() {
|
public static StatRequest getBasicServerStatRequest() {
|
||||||
StatRequest request = StatRequest.getBasicAPIRequest();
|
StatRequest request = StatRequest.getBasicAPIRequest();
|
||||||
request.setTarget(Target.SERVER);
|
request.setTarget(Target.SERVER);
|
||||||
return new StatRequestHandler(request);
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StatRequestHandler topRequestHandler(int topListSize) {
|
public static StatRequest getBasicTopStatRequest(int topListSize) {
|
||||||
StatRequest request = StatRequest.getBasicAPIRequest();
|
StatRequest request = StatRequest.getBasicAPIRequest();
|
||||||
request.setTarget(Target.TOP);
|
request.setTarget(Target.TOP);
|
||||||
request.setTopListSize(topListSize != 0 ? topListSize : Main.getConfigHandler().getTopListMaxSize());
|
request.setTopListSize(topListSize != 0 ? topListSize : Main.getConfigHandler().getTopListMaxSize());
|
||||||
return new StatRequestHandler(request);
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@param sender the CommandSender that requested this specific statistic
|
@param sender the CommandSender that requested this specific statistic
|
||||||
*/
|
*/
|
||||||
public static StatRequestHandler internalRequestHandler(CommandSender sender) {
|
public static StatRequest getBasicInternalStatRequest(CommandSender sender) {
|
||||||
StatRequest request = StatRequest.getBasicRequest(sender);
|
StatRequest request = StatRequest.getBasicRequest(sender);
|
||||||
request.setTopListSize(Main.getConfigHandler().getTopListMaxSize());
|
request.setTopListSize(Main.getConfigHandler().getTopListMaxSize());
|
||||||
return new StatRequestHandler(request);
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public StatRequest untyped(@NotNull Statistic statistic) throws IllegalArgumentException {
|
public StatRequest untyped(@NotNull Statistic statistic) throws IllegalArgumentException {
|
||||||
if (statistic.getType() == Statistic.Type.UNTYPED) {
|
if (statistic.getType() == Statistic.Type.UNTYPED) {
|
||||||
statRequest.setStatistic(statistic);
|
statRequest.setStatistic(statistic);
|
||||||
@ -53,7 +58,6 @@ public record StatRequestHandler(StatRequest statRequest) implements RequestGene
|
|||||||
throw new IllegalArgumentException("This statistic is not of Type.Untyped");
|
throw new IllegalArgumentException("This statistic is not of Type.Untyped");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public StatRequest blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException {
|
public StatRequest blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException {
|
||||||
Statistic.Type type = statistic.getType();
|
Statistic.Type type = statistic.getType();
|
||||||
if (type == Statistic.Type.BLOCK && material.isBlock()) {
|
if (type == Statistic.Type.BLOCK && material.isBlock()) {
|
||||||
@ -69,7 +73,6 @@ public record StatRequestHandler(StatRequest statRequest) implements RequestGene
|
|||||||
return statRequest;
|
return statRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public StatRequest entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException {
|
public StatRequest entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException {
|
||||||
if (statistic.getType() == Statistic.Type.ENTITY) {
|
if (statistic.getType() == Statistic.Type.ENTITY) {
|
||||||
statRequest.setSubStatEntryName(entityType.toString());
|
statRequest.setSubStatEntryName(entityType.toString());
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.gmail.artemis.the.gr8.playerstats.statistic.request;
|
package com.gmail.artemis.the.gr8.playerstats.statistic.request;
|
||||||
|
|
||||||
import com.gmail.artemis.the.gr8.playerstats.api.RequestExecutor;
|
import com.gmail.artemis.the.gr8.playerstats.api.RequestExecutor;
|
||||||
|
import com.gmail.artemis.the.gr8.playerstats.api.RequestGenerator;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.result.StatResult;
|
||||||
import com.gmail.artemis.the.gr8.playerstats.statistic.result.TopStatResult;
|
import com.gmail.artemis.the.gr8.playerstats.statistic.result.TopStatResult;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
@ -11,36 +12,43 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
public final class TopStatRequest implements RequestExecutor<LinkedHashMap<String, Integer>> {
|
public final class TopStatRequest implements RequestGenerator<LinkedHashMap<String, Integer>>, RequestExecutor<LinkedHashMap<String, Integer>> {
|
||||||
|
|
||||||
|
private final StatRequest statRequest;
|
||||||
private final StatRequestHandler statRequestHandler;
|
private final StatRequestHandler statRequestHandler;
|
||||||
|
|
||||||
public TopStatRequest(StatRequestHandler statRequestHandler) {
|
public TopStatRequest(StatRequest request) {
|
||||||
this.statRequestHandler = statRequestHandler;
|
statRequest = request;
|
||||||
|
statRequestHandler = new StatRequestHandler(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<LinkedHashMap<String, Integer>> untyped(@NotNull Statistic statistic) {
|
public TopStatRequest untyped(@NotNull Statistic statistic) {
|
||||||
StatRequest completedRequest = statRequestHandler.untyped(statistic);
|
StatRequest completedRequest = statRequestHandler.untyped(statistic);
|
||||||
return getStatResult(completedRequest);
|
return new TopStatRequest(completedRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<LinkedHashMap<String, Integer>> blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) {
|
public TopStatRequest blockOrItemType(@NotNull Statistic statistic, @NotNull Material material) {
|
||||||
StatRequest completedRequest = statRequestHandler.blockOrItemType(statistic, material);
|
StatRequest completedRequest = statRequestHandler.blockOrItemType(statistic, material);
|
||||||
return getStatResult(completedRequest);
|
return new TopStatRequest(completedRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StatResult<LinkedHashMap<String, Integer>> entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) {
|
public TopStatRequest entityType(@NotNull Statistic statistic, @NotNull EntityType entityType) {
|
||||||
StatRequest completedRequest = statRequestHandler.entityType(statistic, entityType);
|
StatRequest completedRequest = statRequestHandler.entityType(statistic, entityType);
|
||||||
return getStatResult(completedRequest);
|
return new TopStatRequest(completedRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StatResult<LinkedHashMap<String, Integer>> execute() {
|
||||||
|
return getStatResult(statRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
private TopStatResult getStatResult(StatRequest completedRequest) {
|
private TopStatResult getStatResult(StatRequest completedRequest) {
|
||||||
LinkedHashMap<String, Integer> stat = RequestExecutor.super.getStatCalculator()
|
LinkedHashMap<String, Integer> stat = RequestExecutor.getStatCalculator()
|
||||||
.getTopStats(completedRequest);
|
.getTopStats(completedRequest);
|
||||||
TextComponent prettyStat = RequestExecutor.super.getStatFormatter()
|
TextComponent prettyStat = RequestExecutor.getStatFormatter()
|
||||||
.formatTopStat(completedRequest, stat);
|
.formatTopStat(completedRequest, stat);
|
||||||
|
|
||||||
return new TopStatResult(stat, prettyStat);
|
return new TopStatResult(stat, prettyStat);
|
||||||
|
Loading…
Reference in New Issue
Block a user