update task, documentation

Dieser Commit ist enthalten in:
Silent 2022-01-08 23:50:27 +01:00
Ursprung 5a9fb56953
Commit 3b1649dc63
8 geänderte Dateien mit 79 neuen und 15 gelöschten Zeilen

1
.gitignore vendored
Datei anzeigen

@ -1,5 +1,6 @@
target/ target/
.idea/ .idea/
src/test/
dependency-reduced-pom.xml dependency-reduced-pom.xml

Datei anzeigen

@ -6,7 +6,7 @@
<groupId>tsp.headdb</groupId> <groupId>tsp.headdb</groupId>
<artifactId>HeadDB</artifactId> <artifactId>HeadDB</artifactId>
<version>3.0.0</version> <version>3.0.1</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>HeadDB</name> <name>HeadDB</name>

Datei anzeigen

@ -6,6 +6,7 @@ import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import tsp.headdb.api.HeadAPI; import tsp.headdb.api.HeadAPI;
import tsp.headdb.command.CommandHeadDB; import tsp.headdb.command.CommandHeadDB;
import tsp.headdb.database.DatabaseUpdateTask;
import tsp.headdb.listener.JoinListener; import tsp.headdb.listener.JoinListener;
import tsp.headdb.listener.MenuListener; import tsp.headdb.listener.MenuListener;
import tsp.headdb.listener.PagedPaneListener; import tsp.headdb.listener.PagedPaneListener;
@ -13,6 +14,8 @@ import tsp.headdb.storage.PlayerDataFile;
import tsp.headdb.util.Log; import tsp.headdb.util.Log;
import tsp.headdb.util.Metrics; import tsp.headdb.util.Metrics;
import javax.annotation.Nullable;
public class HeadDB extends JavaPlugin { public class HeadDB extends JavaPlugin {
private static HeadDB instance; private static HeadDB instance;
@ -39,10 +42,9 @@ public class HeadDB extends JavaPlugin {
} }
long refresh = getConfig().getLong("refresh") * 20; long refresh = getConfig().getLong("refresh") * 20;
HeadAPI.getDatabase().updateAsync(heads -> Log.info("Fetched " + HeadAPI.getHeads().size() + " heads!")); // Update database on startup
Bukkit.getScheduler().runTaskTimerAsynchronously(this, new DatabaseUpdateTask(), refresh, refresh); // Update database on set interval (also saves data)
HeadAPI.getDatabase().setRefresh(refresh); HeadAPI.getDatabase().setRefresh(refresh);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, task ->
HeadAPI.getDatabase().updateAsync(heads -> Log.info("Fetched " + HeadAPI.getHeads().size() + " heads!")),
0L, refresh);
new JoinListener(this); new JoinListener(this);
new MenuListener(this); new MenuListener(this);
@ -69,6 +71,7 @@ public class HeadDB extends JavaPlugin {
return this.economy = economyProvider.getProvider(); return this.economy = economyProvider.getProvider();
} }
@Nullable
public Economy getEconomy() { public Economy getEconomy() {
return economy; return economy;
} }

Datei anzeigen

@ -9,6 +9,7 @@ import tsp.headdb.database.HeadDatabase;
import tsp.headdb.inventory.InventoryUtils; import tsp.headdb.inventory.InventoryUtils;
import tsp.headdb.storage.PlayerDataFile; import tsp.headdb.storage.PlayerDataFile;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -20,10 +21,14 @@ import java.util.UUID;
* *
* @author TheSilentPro * @author TheSilentPro
*/ */
// TODO: Possibly change to singleton class
public final class HeadAPI { public final class HeadAPI {
private HeadAPI() {} private HeadAPI() {}
/**
* Main {@link HeadDatabase} that he HeadDB plugin uses.
*/
private static final HeadDatabase database = new HeadDatabase(HeadDB.getInstance()); private static final HeadDatabase database = new HeadDatabase(HeadDB.getInstance());
/** /**
@ -64,6 +69,12 @@ public final class HeadAPI {
InventoryUtils.openSearchDatabase(player, search); InventoryUtils.openSearchDatabase(player, search);
} }
/**
* Opens the database with results of a specific tag search term
*
* @param player Target player
* @param tag Tag search term
*/
public static void openTagSearchDatabase(Player player, String tag) { public static void openTagSearchDatabase(Player player, String tag) {
InventoryUtils.openTagSearchDatabase(player, tag); InventoryUtils.openTagSearchDatabase(player, tag);
} }
@ -90,6 +101,13 @@ public final class HeadAPI {
return database.getHeadByUniqueId(uuid); return database.getHeadByUniqueId(uuid);
} }
/**
* Retrieve a {@link List} of {@link Head}'s by their tag
*
* @param tag The tag
* @return List of heads
*/
@Nonnull
public static List<Head> getHeadsByTag(String tag) { public static List<Head> getHeadsByTag(String tag) {
return database.getHeadsByTag(tag); return database.getHeadsByTag(tag);
} }
@ -100,6 +118,7 @@ public final class HeadAPI {
* @param name The name to match for * @param name The name to match for
* @return List of heads * @return List of heads
*/ */
@Nonnull
public static List<Head> getHeadsByName(String name) { public static List<Head> getHeadsByName(String name) {
return database.getHeadsByName(name); return database.getHeadsByName(name);
} }
@ -111,6 +130,7 @@ public final class HeadAPI {
* @param name The name to match for * @param name The name to match for
* @return List of heads * @return List of heads
*/ */
@Nonnull
public static List<Head> getHeadsByName(Category category, String name) { public static List<Head> getHeadsByName(Category category, String name) {
return database.getHeadsByName(category, name); return database.getHeadsByName(category, name);
} }
@ -132,6 +152,7 @@ public final class HeadAPI {
* @param category The category to search in * @param category The category to search in
* @return List of heads * @return List of heads
*/ */
@Nonnull
public static List<Head> getHeads(Category category) { public static List<Head> getHeads(Category category) {
return database.getHeads(category); return database.getHeads(category);
} }
@ -141,18 +162,38 @@ public final class HeadAPI {
* *
* @return List of all heads * @return List of all heads
*/ */
@Nonnull
public static List<Head> getHeads() { public static List<Head> getHeads() {
return database.getHeads(); return database.getHeads();
} }
/**
* Add a favorite {@link Head} to the player
*
* @param uuid The player's unique id
* @param textureValue The head's texture value
*/
public static void addFavoriteHead(UUID uuid, String textureValue) { public static void addFavoriteHead(UUID uuid, String textureValue) {
HeadDB.getInstance().getPlayerData().modifyFavorite(uuid, textureValue, PlayerDataFile.ModificationType.SET); HeadDB.getInstance().getPlayerData().modifyFavorite(uuid, textureValue, PlayerDataFile.ModificationType.SET);
} }
/**
* Remove a favorite {@link Head} from the player
*
* @param uuid The player's unique id
* @param textureValue The head's texture value
*/
public static void removeFavoriteHead(UUID uuid, String textureValue) { public static void removeFavoriteHead(UUID uuid, String textureValue) {
HeadDB.getInstance().getPlayerData().modifyFavorite(uuid, textureValue, PlayerDataFile.ModificationType.REMOVE); HeadDB.getInstance().getPlayerData().modifyFavorite(uuid, textureValue, PlayerDataFile.ModificationType.REMOVE);
} }
/**
* Retrieve a {@link List} of favorite {@link Head}'s for the player
*
* @param uuid The player's unique id
* @return List of favorite {@link Head}'s for the player
*/
@Nonnull
public static List<Head> getFavoriteHeads(UUID uuid) { public static List<Head> getFavoriteHeads(UUID uuid) {
List<Head> result = new ArrayList<>(); List<Head> result = new ArrayList<>();
@ -164,6 +205,14 @@ public final class HeadAPI {
return result; return result;
} }
/**
* Retrieve a list of {@link LocalHead}'s.
* These are heads from players that have joined the server at least once.
* Requires config option localHeads = true
*
* @return List of {@link LocalHead}'s
*/
@Nonnull
public static List<LocalHead> getLocalHeads() { public static List<LocalHead> getLocalHeads() {
List<LocalHead> result = new ArrayList<>(); List<LocalHead> result = new ArrayList<>();
for (String entry : HeadDB.getInstance().getPlayerData().getEntries()) { for (String entry : HeadDB.getInstance().getPlayerData().getEntries()) {

Datei anzeigen

@ -0,0 +1,15 @@
package tsp.headdb.database;
import tsp.headdb.HeadDB;
import tsp.headdb.api.HeadAPI;
import tsp.headdb.util.Log;
public class DatabaseUpdateTask implements Runnable {
@Override
public void run() {
HeadDB.getInstance().getPlayerData().save();
HeadAPI.getDatabase().updateAsync(heads -> Log.info("Fetched " + HeadAPI.getHeads().size() + " heads!"));
}
}

Datei anzeigen

@ -23,6 +23,10 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/**
* Class for handling the "dirty" work
* such as inventories and economy.
*/
public class InventoryUtils { public class InventoryUtils {
private static final Map<String, Integer> uiLocation = new HashMap<>(); private static final Map<String, Integer> uiLocation = new HashMap<>();

Datei anzeigen

@ -44,7 +44,6 @@ public class MenuListener implements Listener {
player.closeInventory(); player.closeInventory();
return; return;
} }
player.sendMessage("Clicked on favorites!");
InventoryUtils.openFavoritesMenu(player); InventoryUtils.openFavoritesMenu(player);
return; return;
} }

Datei anzeigen

@ -42,7 +42,6 @@ public class PlayerDataFile {
JsonArray favorites = main.get(uuid.toString()).getAsJsonObject().get("favorites").getAsJsonArray(); JsonArray favorites = main.get(uuid.toString()).getAsJsonObject().get("favorites").getAsJsonArray();
for (int i = 0; i < favorites.size(); i++) { for (int i = 0; i < favorites.size(); i++) {
String str = favorites.get(i).toString(); String str = favorites.get(i).toString();
Log.debug("str: " + str.substring(1, str.length() - 1));
result.add(str.substring(1, str.length() - 1)); result.add(str.substring(1, str.length() - 1));
} }
} }
@ -135,12 +134,6 @@ public class PlayerDataFile {
return file; return file;
} }
public void validateFile() {
if (!file.exists()) {
HeadDB.getInstance().saveResource(file.getName(), false);
}
}
public enum ModificationType { public enum ModificationType {
SET, SET,
REMOVE; REMOVE;