2023-10-30 21:06:01 -04:00
|
|
|
package noppes.npcs.controllers.data;
|
|
|
|
|
|
|
|
|
|
import com.google.gson.JsonObject;
|
|
|
|
|
import com.google.gson.JsonParser;
|
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
|
import noppes.npcs.api.handler.IPlayerQuestData;
|
|
|
|
|
import noppes.npcs.api.handler.data.IQuest;
|
|
|
|
|
import noppes.npcs.controllers.PlayerDataController;
|
|
|
|
|
import noppes.npcs.controllers.QuestController;
|
|
|
|
|
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
import java.net.URL;
|
2023-10-31 23:26:57 -04:00
|
|
|
import java.util.*;
|
2023-10-30 21:06:01 -04:00
|
|
|
|
|
|
|
|
public class Party {
|
|
|
|
|
|
2023-10-31 23:26:57 -04:00
|
|
|
private final UUID partyUUID = UUID.randomUUID();
|
2023-10-30 21:06:01 -04:00
|
|
|
private UUID partyLeader;
|
|
|
|
|
|
2023-10-31 23:26:57 -04:00
|
|
|
private final HashMap<UUID, String> partyMembers = new HashMap<>();
|
|
|
|
|
private final ArrayList<UUID> partyOrder = new ArrayList<>();
|
|
|
|
|
|
2023-10-30 21:06:01 -04:00
|
|
|
private int currentQuestID = -1;
|
|
|
|
|
|
|
|
|
|
public UUID getPartyLeader() {
|
|
|
|
|
return partyLeader;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setPartyLeader(UUID partyLeader) {
|
|
|
|
|
this.partyLeader = partyLeader;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int getCurrentQuestID() {
|
|
|
|
|
return currentQuestID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setCurrentQuestID(int currentQuestID) {
|
|
|
|
|
this.currentQuestID = currentQuestID;
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-31 23:26:57 -04:00
|
|
|
public boolean addPlayer(EntityPlayer player) {
|
|
|
|
|
if(partyMembers.containsKey(player.getUniqueID())){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-10-30 21:06:01 -04:00
|
|
|
|
2023-10-31 23:26:57 -04:00
|
|
|
partyMembers.put(player.getUniqueID(), player.getCommandSenderName());
|
|
|
|
|
partyOrder.add(player.getUniqueID());
|
|
|
|
|
return true;
|
2023-10-30 21:06:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean removePlayer(String playerName) {
|
|
|
|
|
UUID uuid = getUUID(playerName);
|
|
|
|
|
if (uuid == null){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-10-31 23:26:57 -04:00
|
|
|
|
|
|
|
|
if(partyMembers.containsKey(uuid)){
|
|
|
|
|
partyMembers.remove(uuid);
|
|
|
|
|
partyOrder.remove(uuid);
|
|
|
|
|
|
|
|
|
|
if(uuid.equals(partyLeader)){
|
|
|
|
|
if(partyMembers.size() > 0){
|
|
|
|
|
partyLeader = partyOrder.get(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
2023-10-30 21:06:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean removePlayer(UUID player) {
|
2023-10-31 23:26:57 -04:00
|
|
|
if(partyMembers.containsKey(player)){
|
|
|
|
|
partyMembers.remove(player);
|
|
|
|
|
partyOrder.remove(player);
|
|
|
|
|
|
|
|
|
|
if(player.equals(partyLeader)){
|
|
|
|
|
if(partyMembers.size() > 0){
|
|
|
|
|
partyLeader = partyOrder.get(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
2023-10-30 21:06:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean hasPlayer(UUID player) {
|
2023-10-31 23:26:57 -04:00
|
|
|
return partyMembers.containsKey(player);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean hasPlayer(String playerName) {
|
|
|
|
|
UUID uuid = getUUID(playerName);
|
|
|
|
|
if (uuid == null){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return partyMembers.containsKey(uuid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean setLeader(UUID uuid){
|
|
|
|
|
if(partyLeader.equals(uuid)){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!partyMembers.containsKey(uuid)){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Remove New Leader
|
|
|
|
|
partyOrder.remove(uuid);
|
|
|
|
|
|
|
|
|
|
// Add New Leader to Front
|
|
|
|
|
partyOrder.add(0, uuid);
|
|
|
|
|
|
|
|
|
|
// Set New Leader
|
|
|
|
|
partyLeader = uuid;
|
|
|
|
|
return true;
|
2023-10-30 21:06:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// To Be Called DURING Invite, Leave, Quest Switch, Leader Switch, etc.
|
|
|
|
|
public static boolean validateQuest(int questID, Collection<EntityPlayer> players){
|
|
|
|
|
IQuest quest = QuestController.Instance.get(questID);
|
|
|
|
|
if(quest == null){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
boolean everyoneNeedsQuest = quest.getPartyRequirements() == 1;
|
|
|
|
|
if(everyoneNeedsQuest){
|
|
|
|
|
// TODO: Get EntityPlayer from WORLD using UUID Collection
|
|
|
|
|
|
|
|
|
|
// for(EntityPlayer player: players){
|
|
|
|
|
// if(player != null){
|
|
|
|
|
// PlayerData playerData = PlayerDataController.Instance.getPlayerData(player);
|
|
|
|
|
// if(playerData != null){
|
|
|
|
|
// IPlayerQuestData questData = playerData.getQuestData();
|
|
|
|
|
// if(questData != null){
|
|
|
|
|
// if(!questData.hasActiveQuest(questID)){
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
// } else{
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// Check if Party Leader has Quest
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static UUID getUUID(String name) {
|
|
|
|
|
UUID uuid = null;
|
|
|
|
|
try {
|
|
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(new URL("https://api.mojang.com/users/profiles/minecraft/" + name).openStream()));
|
|
|
|
|
String uuidString;
|
|
|
|
|
uuidString = (((JsonObject)new JsonParser().parse(in)).get("id")).toString().replaceAll("\"", "");
|
|
|
|
|
uuidString = uuidString.replaceAll("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5");
|
|
|
|
|
in.close();
|
|
|
|
|
|
|
|
|
|
uuid = UUID.fromString(uuidString);
|
|
|
|
|
} catch (Exception ignored) {}
|
|
|
|
|
return uuid;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|