126 lines
3.5 KiB
Java
126 lines
3.5 KiB
Java
package net.saltymc.eaa.function;
|
|
|
|
import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
|
|
import net.minecraft.client.MinecraftClient;
|
|
import net.minecraft.client.toast.SystemToast;
|
|
import net.minecraft.text.Text;
|
|
import net.saltymc.eaa.util.database.DB_Player;
|
|
import net.saltymc.eaa.util.database.DB_Tag;
|
|
import net.saltymc.eaa.util.mojangApi.PlayerInfo;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class TagFunction {
|
|
|
|
private static final Map<String, DB_Tag> player_tags = new HashMap<>();
|
|
private static volatile boolean free = true;
|
|
|
|
public static void loadPlayer(String uuid, boolean reload){
|
|
if ( (!player_tags.containsKey(uuid) || reload)) {
|
|
new Thread(new LoadTag(uuid)).start();
|
|
}
|
|
}
|
|
|
|
public static DB_Tag.Type getScoreboardTag(String uuid){
|
|
if (player_tags.containsKey(uuid))
|
|
return player_tags.get(uuid).getType();
|
|
else {
|
|
if (free) {
|
|
free = false;
|
|
loadPlayer(uuid, false);
|
|
}
|
|
}
|
|
return DB_Tag.Type.NOTLOADED;
|
|
}
|
|
|
|
public static void tagPlayer(String player, DB_Tag.Type tag, int grade, FabricClientCommandSource source){
|
|
new Thread(new TagPlayer(player, tag, grade, source)).start();
|
|
}
|
|
|
|
/*
|
|
*
|
|
* GETTER SETTER
|
|
*
|
|
*/
|
|
|
|
public static Map<String, DB_Tag> getHashMap(){
|
|
return player_tags;
|
|
}
|
|
|
|
/*
|
|
*
|
|
* THREADS
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Thread for Tagging a Player
|
|
*/
|
|
private static class TagPlayer implements Runnable {
|
|
|
|
String player;
|
|
DB_Tag.Type tag;
|
|
int grade;
|
|
FabricClientCommandSource source;
|
|
|
|
public TagPlayer(String player, DB_Tag.Type tag, int grade, FabricClientCommandSource source) {
|
|
this.player = player;
|
|
this.tag = tag;
|
|
this.grade = grade;
|
|
this.source = source;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
String playerUUID = PlayerInfo.playerNameToUUID(player);
|
|
|
|
if (playerUUID != null) {
|
|
|
|
DB_Player db_player = DB_Player.getPlayer(playerUUID, true);
|
|
new DB_Tag(db_player, tag, grade).put();
|
|
|
|
loadPlayer(playerUUID, true);
|
|
|
|
SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.TUTORIAL_HINT,
|
|
Text.of("Player Tagged"), Text.of(player + " | " + tag.name() + " | " + grade));
|
|
} else {
|
|
SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.WORLD_ACCESS_FAILURE,
|
|
Text.of("ERROR!"), Text.of("Player does not exist"));
|
|
}
|
|
} catch (Exception e) {
|
|
source.sendFeedback(Text.of(e.toString()));
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thread for loading a tag of a player in to hashmap
|
|
*/
|
|
private static class LoadTag implements Runnable {
|
|
|
|
String uuid;
|
|
|
|
public LoadTag(String uuid){
|
|
this.uuid = uuid;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
DB_Player db_player = DB_Player.getPlayer(uuid);
|
|
if (db_player == null) {
|
|
player_tags.put(uuid, new DB_Tag(null, DB_Tag.Type.NOTTAGGED, 0));
|
|
} else {
|
|
List<DB_Tag> tag = DB_Tag.getTagsFromPlayer(db_player);
|
|
if (tag.size() > 0)
|
|
player_tags.put(uuid, tag.get(tag.size() - 1));
|
|
}
|
|
|
|
free = true;
|
|
}
|
|
}
|
|
|
|
}
|