aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java
diff options
context:
space:
mode:
authorMoulberry <james.jenour@student.scotch.wa.edu.au>2020-08-19 12:16:12 +1000
committerMoulberry <james.jenour@student.scotch.wa.edu.au>2020-08-19 12:16:12 +1000
commitea1391e0c6f0db863bbb61511eb6e9acb57a5968 (patch)
tree16e0b8a76055838b6cc1963f56c1327cd8850c66 /src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java
parent0c23f52d2be811d74a3b6ef598dd9de7ccb763ab (diff)
downloadnotenoughupdates-ea1391e0c6f0db863bbb61511eb6e9acb57a5968.tar.gz
notenoughupdates-ea1391e0c6f0db863bbb61511eb6e9acb57a5968.tar.bz2
notenoughupdates-ea1391e0c6f0db863bbb61511eb6e9acb57a5968.zip
1.1.5
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java175
1 files changed, 123 insertions, 52 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java
index e78d078c..906ccda4 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java
@@ -1,7 +1,10 @@
package io.github.moulberry.notenoughupdates.cosmetics;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
import io.github.moulberry.notenoughupdates.NEUManager;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.util.HypixelApi;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.client.event.RenderPlayerEvent;
@@ -11,6 +14,7 @@ import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
+import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
@@ -18,28 +22,94 @@ import java.util.Set;
public class CapeManager {
public static final CapeManager INSTANCE = new CapeManager();
+ public long lastCapeUpdate = 0;
+ public long lastCapeSynced = 0;
+ public Pair<NEUCape, String> localCape = null;
private HashMap<String, Pair<NEUCape, String>> capeMap = new HashMap<>();
- private String[] capes = new String[]{"patreon1", "patreon2", "gravy", "fade", "contrib"};
+
+ private boolean allAvailable = false;
+ private HashSet<String> availableCapes = new HashSet<>();
+
+ private String[] capes = new String[]{"patreon1", "patreon2", "fade", "contrib", "nullzee", "gravy" };
+ public Boolean[] specialCapes = new Boolean[]{ true, true, false, true, true, true };
public static CapeManager getInstance() {
return INSTANCE;
}
- public void setCape(String player, String capename) {
- if(capename == null) {
- NotEnoughUpdates.INSTANCE.manager.config.selectedCape.value = "";
- capeMap.remove(player);
- return;
+ public void tick() {
+ long currentTime = System.currentTimeMillis();
+ if(currentTime - lastCapeUpdate > 60*1000) {
+ lastCapeUpdate = currentTime;
+ updateCapes();
}
- if(player.equalsIgnoreCase(Minecraft.getMinecraft().thePlayer.getName())) {
- NotEnoughUpdates.INSTANCE.manager.config.selectedCape.value = capename;
+ }
+
+ private void updateCapes() {
+ NotEnoughUpdates.INSTANCE.manager.hypixelApi.getMyApiAsync("cgi-bin/getactivecape.py", (jsonObject) -> {
+ if(jsonObject.get("success").getAsBoolean()) {
+ lastCapeSynced = System.currentTimeMillis();
+ for(JsonElement active : jsonObject.get("active").getAsJsonArray()) {
+ if(active.isJsonObject()) {
+ JsonObject activeObj = (JsonObject) active;
+ setCape(activeObj.get("_id").getAsString(), activeObj.get("capeType").getAsString(), false);
+ }
+ }
+ }
+ }, () -> {
+ System.out.println("[MBAPI] Update capes errored");
+ });
+ if(Minecraft.getMinecraft().thePlayer != null) {
+ NotEnoughUpdates.INSTANCE.manager.hypixelApi.getMyApiAsync("cgi-bin/getpermscape.py?uuid="+
+ Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-", ""), (jsonObject) -> {
+ if(jsonObject.get("success").getAsBoolean()) {
+ availableCapes.clear();
+ for(JsonElement perm : jsonObject.get("perms").getAsJsonObject().get("perms").getAsJsonArray()) {
+ if(perm.isJsonPrimitive()) {
+ String cape = perm.getAsString();
+ if(cape.equals("*")) {
+ allAvailable = true;
+ } else {
+ availableCapes.add(cape);
+ }
+ }
+ }
+ }
+ }, () -> {
+ System.out.println("[MBAPI] Update capes errored - perms");
+ });
}
- if(capeMap.containsKey(player)) {
- Pair<NEUCape, String> capePair = capeMap.get(player);
- capePair.setValue(capename);
- } else {
- capeMap.put(player, new MutablePair<>(new NEUCape(capename), capename));
+ }
+
+ public HashSet<String> getAvailableCapes() {
+ return allAvailable ? availableCapes : availableCapes;
+ }
+
+ public void setCape(String playerUUID, String capename, boolean updateConfig) {
+ boolean none = capename == null || capename.equals("null");
+
+ updateConfig = updateConfig && playerUUID.equals(Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-", ""));
+ if(updateConfig) {
+ NotEnoughUpdates.INSTANCE.manager.config.selectedCape.value = String.valueOf(capename);
+ try { NotEnoughUpdates.INSTANCE.manager.saveConfig(); } catch(IOException ignored) {}
+ }
+
+ if(updateConfig) {
+ if(none) {
+ localCape = null;
+ } else {
+ localCape = new MutablePair<>(new NEUCape(capename), capename);
+ }
+ } else if(capeMap.containsKey(playerUUID)) {
+ if(none) {
+ capeMap.remove(playerUUID);
+ } else {
+ Pair<NEUCape, String> capePair = capeMap.get(playerUUID);
+ capePair.setValue(capename);
+ }
+ } else if(!none) {
+ capeMap.put(playerUUID, new MutablePair<>(new NEUCape(capename), capename));
}
}
@@ -50,10 +120,10 @@ public class CapeManager {
return null;
}
- public EntityPlayer getPlayerForName(String name) {
+ public EntityPlayer getPlayerForUUID(String uuid) {
if(Minecraft.getMinecraft().theWorld != null) {
for(EntityPlayer player : Minecraft.getMinecraft().theWorld.playerEntities) {
- if(player.getName().equals(name)) {
+ if(player.getUniqueID().toString().replace("-", "").equals(uuid)) {
return player;
}
}
@@ -63,38 +133,55 @@ public class CapeManager {
@SubscribeEvent
public void onRenderPlayer(RenderPlayerEvent.Post e) {
- //if(e.partialRenderTick == 1.0F) return; //rendering in inventory
- if(Minecraft.getMinecraft().thePlayer != null &&
- e.entityPlayer.getName().equals(Minecraft.getMinecraft().thePlayer.getName())) {
- if(NotEnoughUpdates.INSTANCE.manager.config.selectedCape.value != null &&
- !NotEnoughUpdates.INSTANCE.manager.config.selectedCape.value.isEmpty()) {
- setCape(Minecraft.getMinecraft().thePlayer.getName(),
- NotEnoughUpdates.INSTANCE.manager.config.selectedCape.value);
+ if(e.partialRenderTick == 1.0F) return; //rendering in inventory
+
+ String uuid = e.entityPlayer.getUniqueID().toString().replace("-", "");
+ String clientUuid = Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-", "");
+
+ if(Minecraft.getMinecraft().thePlayer != null && uuid.equals(clientUuid)) {
+ String selCape = NotEnoughUpdates.INSTANCE.manager.config.selectedCape.value;
+ if(selCape != null && !selCape.isEmpty()) {
+ if(localCape == null) {
+ localCape = new MutablePair<>(new NEUCape(selCape), selCape);
+ } else {
+ localCape.setValue(selCape);
+ }
}
}
- if(e.entityPlayer.getName().equals("Moulberry")) setCape(e.entityPlayer.getName(), "fade");
- if(capeMap.containsKey(e.entityPlayer.getName())) {
- capeMap.get(e.entityPlayer.getName()).getLeft().onRenderPlayer(e);
+ if(uuid.equals(clientUuid) && localCape != null && localCape.getRight() != null && !localCape.getRight().equals("null")) {
+ localCape.getLeft().onRenderPlayer(e);
+ } else if(capeMap.containsKey(uuid)) {
+ capeMap.get(uuid).getLeft().onRenderPlayer(e);
}
}
@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent event) {
+ String clientUuid = null;
+ if(Minecraft.getMinecraft().thePlayer != null) {
+ clientUuid = Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-", "");
+ }
+
Set<String> toRemove = new HashSet<>();
- for(String playerName : capeMap.keySet()) {
- EntityPlayer player = getPlayerForName(playerName);
- if(player == null) {
- toRemove.add(playerName);
- } else {
- String capeName = capeMap.get(playerName).getRight();
- if(capeName != null) {
- capeMap.get(playerName).getLeft().setCapeTexture(capeName);
- capeMap.get(playerName).getLeft().onTick(event, player);
+ for(String playerUUID : capeMap.keySet()) {
+ EntityPlayer player = getPlayerForUUID(playerUUID);
+ if(player != null) {
+ String capeName = capeMap.get(playerUUID).getRight();
+ if(capeName != null && !capeName.equals("null")) {
+ if(playerUUID.equals(clientUuid) && localCape != null && localCape.getRight() != null && !localCape.getRight().equals("null")) {
+ continue;
+ }
+ capeMap.get(playerUUID).getLeft().setCapeTexture(capeName);
+ capeMap.get(playerUUID).getLeft().onTick(event, player);
} else {
- toRemove.add(playerName);
+ toRemove.add(playerUUID);
}
}
}
+ if(localCape != null) {
+ localCape.getLeft().setCapeTexture(localCape.getValue());
+ localCape.getLeft().onTick(event, Minecraft.getMinecraft().thePlayer);
+ }
for(String playerName : toRemove) {
capeMap.remove(playerName);
}
@@ -104,22 +191,6 @@ public class CapeManager {
return capes;
}
- private String[] contributors = new String[]{"thatgravyboat", "twasnt", "traxyrr", "some1sm", "meguminqt", "marethyu_77"};
-
- public boolean getPermissionForCape(String player, String capename) {
- if(capename == null) {
- return false;
- } else if(player.equalsIgnoreCase("Moulberry")) {
- return true; //Oh yeah gimme gimme
- } else {
- switch(capename) {
- case "nullzee": return player.equalsIgnoreCase("Nullzee");
- case "gravy": return player.equalsIgnoreCase("ThatGravyBoat");
- case "contrib": return ArrayUtils.contains(contributors, player.toLowerCase());
- case "fade": return true;
- }
- }
- return false;
- }
+ //private String[] contributors = new String[]{"thatgravyboat", "twasnt", "traxyrr", "some1sm", "meguminqt", "marethyu_77"};
}