aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/thatgravyboat/skyblockhud/tracker
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/thatgravyboat/skyblockhud/tracker')
-rw-r--r--src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java167
-rw-r--r--src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java99
-rw-r--r--src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerObject.java94
3 files changed, 203 insertions, 157 deletions
diff --git a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java
index 624ca60..804ac60 100644
--- a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java
+++ b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java
@@ -4,108 +4,55 @@ import com.google.gson.*;
import com.thatgravyboat.skyblockhud.location.Locations;
import java.io.*;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
+import java.util.EnumSet;
import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.Locale;
import net.minecraft.client.Minecraft;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTBase;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.ResourceLocation;
public class TrackerFileLoader {
private static final Gson gson = new GsonBuilder().create();
- public static ItemStack getDisplayItem(JsonObject jsonObject) {
- int meta = jsonObject.get("meta").getAsInt();
- String displayItemId = jsonObject.get("item").getAsString();
- Item item = Item.itemRegistry.getObject(new ResourceLocation(displayItemId));
- ItemStack stack = new ItemStack(item, 0, meta);
- if (jsonObject.has("skullData") && displayItemId.equals("minecraft:skull") && meta == 3) {
- stack.setTagInfo("SkullOwner", getSkullTag(jsonObject.getAsJsonObject("skullData")));
- }
- if (jsonObject.has("enchanted") && jsonObject.get("enchanted").getAsBoolean()) stack.setTagInfo("ench", new NBTTagList());
- return stack;
- }
-
- public static NBTBase getSkullTag(JsonObject skullObject) {
- NBTTagCompound skullOwner = new NBTTagCompound();
- NBTTagCompound properties = new NBTTagCompound();
- NBTTagList textures = new NBTTagList();
- NBTTagCompound value = new NBTTagCompound();
-
- skullOwner.setString("Id", skullObject.get("id").getAsString());
-
- value.setString("Value", skullObject.get("texture").getAsString());
- textures.appendTag(value);
-
- properties.setTag("textures", textures);
-
- skullOwner.setTag("Properties", properties);
- return skullOwner;
- }
-
private static void loadTrackers(JsonObject object) {
for (JsonElement element : object.get("trackers").getAsJsonArray()) {
JsonObject tracker = element.getAsJsonObject();
- StringBuilder builder = new StringBuilder();
- tracker.get("location").getAsJsonArray().forEach(loc -> builder.append(loc.getAsString()));
- String location = builder.toString();
-
- Map<String, ItemStack> stacks = new HashMap<>();
- for (JsonElement drop : tracker.get("drops").getAsJsonArray()) {
- JsonObject dropObject = drop.getAsJsonObject();
-
- //Display Item Creation
- ItemStack stack = getDisplayItem(dropObject.getAsJsonObject("displayItem"));
- String itemId = dropObject.get("id").getAsString();
-
- stacks.put(itemId, stack);
+ EnumSet<Locations> locations = EnumSet.noneOf(Locations.class);
+ tracker.get("location").getAsJsonArray().forEach(l -> {
+ Locations location = Locations.get(l.getAsString().toUpperCase(Locale.ENGLISH));
+ if (location != Locations.DEFAULT){
+ locations.add(location);
+ }
+ });
+ if (tracker.has("drops")) {
+ for (JsonElement drop : tracker.get("drops").getAsJsonArray()) {
+ TrackerHandler.trackerObjects.add(new TrackerObject(drop.getAsJsonObject(), locations));
+ }
}
-
- String event = tracker.has("event") ? tracker.get("event").getAsString() : null;
-
- Map<String, Map<String, ItemStack>> events = new HashMap<>();
- events.put(event, stacks);
-
- if (TrackerHandler.trackers.containsKey(location)) {
- TrackerHandler.trackers.get(location).dropTrackers.put(event, stacks);
- } else {
- TrackerHandler.trackers.putIfAbsent(location, new TrackerHandler.TrackerData(events));
+ if (tracker.has("mobs")) {
+ for (JsonElement mob : tracker.get("mobs").getAsJsonArray()) {
+ TrackerHandler.trackerObjects.add(new TrackerObject(mob.getAsJsonObject(), locations));
+ }
}
+ }
- tracker.get("location").getAsJsonArray().forEach(loc -> TrackerHandler.trackerIds.put(Locations.get(loc.getAsString()), location));
+ for (TrackerObject trackerObject : TrackerHandler.trackerObjects) {
+ for (Locations location : trackerObject.getLocations()) {
+ if (TrackerHandler.trackers.containsKey(location)){
+ TrackerHandler.trackers.get(location).put(trackerObject.getInternalId(), trackerObject);
+ }else {
+ HashMap<String, TrackerObject> value = new HashMap<>();
+ value.put(trackerObject.getInternalId(), trackerObject);
+ TrackerHandler.trackers.put(location, value);
+ }
+ }
}
- }
- private static JsonElement getTrackerFile() {
- List<JsonObject> trackerStats = new ArrayList<>();
- TrackerHandler.trackers.forEach(
- (locations, trackerData) ->
- trackerData.dropTrackers.forEach(
- (event, drops) -> {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty("location", locations);
-
- if (event == null) jsonObject.add("event", new JsonNull()); else jsonObject.addProperty("event", event);
-
- JsonObject dropsData = new JsonObject();
- drops.forEach((s, stack) -> dropsData.addProperty(s, stack.stackSize));
- jsonObject.add("drops", dropsData);
- trackerStats.add(jsonObject);
- }
- )
- );
- JsonArray stats = new JsonArray();
- trackerStats.forEach(stats::add);
- return stats;
}
public static void loadTrackersFile() {
+ TrackerHandler.trackers.clear();
+ TrackerHandler.trackerObjects.clear();
try {
ResourceLocation trackers = new ResourceLocation("skyblockhud:data/trackers.json");
InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(trackers).getInputStream();
@@ -116,6 +63,22 @@ public class TrackerFileLoader {
} catch (Exception ignored) {}
}
+ private static JsonElement getTrackerFile() {
+ JsonArray stats = new JsonArray();
+ TrackerHandler.trackerObjects.forEach((trackerObject) ->{
+ if (trackerObject.getCount() > 0) {
+ JsonObject jsonObject = new JsonObject();
+ JsonArray locations = new JsonArray();
+ trackerObject.getLocations().forEach(l -> locations.add(new JsonPrimitive(l.toString().toUpperCase(Locale.ENGLISH))));
+ jsonObject.add("id", new JsonPrimitive(trackerObject.getInternalId()));
+ jsonObject.add("locations", locations);
+ jsonObject.add("count", new JsonPrimitive(trackerObject.getCount()));
+ stats.add(jsonObject);
+ }
+ });
+ return stats;
+ }
+
public static boolean loadTrackerStatsFile(File configDirectory) {
File configFile = new File(configDirectory, "sbh-trackers-stats.json");
@@ -127,31 +90,29 @@ public class TrackerFileLoader {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8))) {
JsonObject json = gson.fromJson(reader, JsonObject.class);
if (json.has("trackerStats")) {
- json
- .getAsJsonArray("trackerStats")
- .forEach(
- element -> {
+ json.getAsJsonArray("trackerStats").forEach(element -> {
if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject();
- String location = object.get("location").getAsString();
- Map<String, Map<String, ItemStack>> trackers = TrackerHandler.trackers.get(location).dropTrackers;
-
- JsonElement event = object.get("event");
- String eventString = event == null || event.isJsonNull() ? null : event.getAsString();
- Map<String, ItemStack> drops = trackers.get(eventString);
-
- if (drops != null) {
- for (Map.Entry<String, JsonElement> drop : object.getAsJsonObject("drops").entrySet()) {
- if (drops.containsKey(drop.getKey())) {
- drops.get(drop.getKey()).stackSize = drop.getValue().getAsInt();
- }
- }
- drops = TrackerHandler.sortTrackers(drops);
- trackers.put(eventString, drops);
+ JsonArray locations = object.get("locations").getAsJsonArray();
+ Locations firstLocation = null;
+ for (JsonElement location : locations) {
+ firstLocation = Locations.get(location.getAsString());
+ if (!firstLocation.equals(Locations.DEFAULT)) break;
+ }
+
+ if (firstLocation != null && !firstLocation.equals(Locations.DEFAULT)){
+ TrackerHandler.trackers.get(firstLocation).get(object.get("id").getAsString()).setCount(object.get("count").getAsInt());
}
}
- }
+ });
+
+ TrackerHandler.trackers.forEach((location, map) -> {
+ TrackerHandler.trackers.put(location,
+ TrackerHandler.sortTrackers(map,
+ (entry1, entry2) -> Integer.compare(entry2.getValue().getCount(), entry1.getValue().getCount())
+ )
);
+ });
}
}
} catch (Exception ignored) {}
diff --git a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java
index c40924a..9832c4b 100644
--- a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java
+++ b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java
@@ -2,10 +2,10 @@ package com.thatgravyboat.skyblockhud.tracker;
import com.thatgravyboat.skyblockhud.SkyblockHud;
import com.thatgravyboat.skyblockhud.Utils;
+import com.thatgravyboat.skyblockhud.api.events.SkyBlockEntityKilled;
import com.thatgravyboat.skyblockhud.core.config.Position;
import com.thatgravyboat.skyblockhud.location.LocationHandler;
import com.thatgravyboat.skyblockhud.location.Locations;
-import com.thatgravyboat.skyblockhud.seasons.SeasonDateHandler;
import java.util.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
@@ -16,57 +16,37 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-public class TrackerHandler {
+public class TrackerHandler extends Gui {
- public static class TrackerData {
+ public static Set<TrackerObject> trackerObjects = new HashSet<>();
+ public static Map<Locations, Map<String, TrackerObject>> trackers = new HashMap<>();
- public Map<String, Map<String, ItemStack>> dropTrackers;
+ public static <K,V> Map<K, V> sortTrackers(Map<K, V> map, Comparator<? super Map.Entry<K, V>> comparator) {
+ List<Map.Entry<K, V>> list = new ArrayList<>(map.entrySet());
+ list.sort(comparator);
- public TrackerData(Map<String, Map<String, ItemStack>> trackers) {
- this.dropTrackers = trackers;
- }
-
- public String getDropId(String event) {
- if (event == null || event.isEmpty() || !eventGoing() || !dropTrackers.containsKey(event.toLowerCase().trim())) return null;
- return event.toLowerCase().trim();
- }
-
- private boolean eventGoing() {
- return SeasonDateHandler.getCurrentEventTime().trim().toLowerCase().contains("ends in");
- }
- }
-
- public static Map<String, TrackerData> trackers = new HashMap<>();
- public static Map<Locations, String> trackerIds = new HashMap<>();
-
- public static Map<String, ItemStack> sortTrackers(Map<String, ItemStack> map) {
- List<Map.Entry<String, ItemStack>> list = new ArrayList<>(map.entrySet());
- list.sort((entry1, entry2) -> Integer.compare(entry2.getValue().stackSize, entry1.getValue().stackSize));
-
- Map<String, ItemStack> result = new LinkedHashMap<>();
- for (Map.Entry<String, ItemStack> entry : list) {
+ Map<K, V> result = new LinkedHashMap<>();
+ for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
- public static void onItemAdded(String id, int amount, String enchant, int level) {
- if (SkyblockHud.hasSkyblockScoreboard() && trackerIds.containsKey(LocationHandler.getCurrentLocation())) {
- String trackerId = trackerIds.get(LocationHandler.getCurrentLocation());
- TrackerData tracked = trackers.get(trackerId);
- String dropTrackerId = tracked.getDropId(SeasonDateHandler.getCurrentEvent());
- Map<String, ItemStack> tracker = tracked.dropTrackers.get(dropTrackerId);
+ public static void onItemAdded(String id, int amount, String specialId, int number) {
+ if (SkyblockHud.hasSkyblockScoreboard() && trackers.containsKey(LocationHandler.getCurrentLocation())) {
+ Map<String, TrackerObject> trackerMap = trackers.get(LocationHandler.getCurrentLocation());
String dropId = id;
- if (enchant != null) {
- dropId = enchant.toUpperCase() + ";" + level;
+ if (specialId != null) {
+ dropId = specialId.toUpperCase() + ";" + number;
}
- if (tracker != null && tracker.containsKey(dropId)) {
- ItemStack stack = tracker.get(dropId);
- stack.stackSize += amount;
- tracked.dropTrackers.put(dropTrackerId, sortTrackers(tracker));
+ if (trackerMap != null && trackerMap.containsKey(dropId)) {
+ TrackerObject object = trackerMap.get(dropId);
+ object.increaseCount(amount);
+ trackers.put(LocationHandler.getCurrentLocation(), sortTrackers(trackerMap, (entry1, entry2) -> Integer.compare(entry2.getValue().getCount(), entry1.getValue().getCount())));
}
+
}
}
@@ -81,36 +61,47 @@ public class TrackerHandler {
}
@SubscribeEvent
+ public void onSbEntityDeath(SkyBlockEntityKilled event){
+ System.out.println(event.id);
+ if (SkyblockHud.hasSkyblockScoreboard() && trackers.containsKey(LocationHandler.getCurrentLocation())) {
+ Map<String, TrackerObject> trackerMap = trackers.get(LocationHandler.getCurrentLocation());
+ if (trackerMap.containsKey("ENTITY:"+event.id)){
+ TrackerObject object = trackerMap.get("ENTITY:"+event.id);
+ object.increaseCount();
+ trackers.put(LocationHandler.getCurrentLocation(), sortTrackers(trackerMap, (entry1, entry2) -> Integer.compare(entry2.getValue().getCount(), entry1.getValue().getCount())));
+ }
+ }
+ }
+
+ @SubscribeEvent
public void renderOverlay(RenderGameOverlayEvent.Post event) {
- if (Utils.overlayShouldRender(event.type, SkyblockHud.hasSkyblockScoreboard(), trackerIds.containsKey(LocationHandler.getCurrentLocation())/*,!SkyblockHud.config.trackers.hideTracker*/)) {
- String trackerId = trackerIds.get(LocationHandler.getCurrentLocation());
+ if (Utils.overlayShouldRender(event.type, SkyblockHud.hasSkyblockScoreboard(), trackers.containsKey(LocationHandler.getCurrentLocation()),!SkyblockHud.config.trackers.hideTracker)) {
+ Map<String, TrackerObject> tracker = trackers.get(LocationHandler.getCurrentLocation());
Minecraft mc = Minecraft.getMinecraft();
- TrackerData tracked = trackers.get(trackerId);
- Map<String, ItemStack> tracker = tracked.dropTrackers.get(tracked.getDropId(SeasonDateHandler.getCurrentEvent()));
if (tracker != null) {
- Position pos = null; // SkyblockHud.config.trackers.trackerPosition;
- int startPos = pos.getAbsX(event.resolution, (tracker.size() >= 6 ? 120 : tracker.size() * 20));
+ Position pos = SkyblockHud.config.trackers.trackerPosition;
+ int startPos = pos.getAbsX(event.resolution, (tracker.size() >= 6 ? 130 : tracker.size() * 20));
int y = pos.getAbsY(event.resolution, (int) (10 + Math.ceil(tracker.size() / 5d) * 20));
- Gui.drawRect(startPos, y, startPos + 120, y + 10, -1072689136);
+ Gui.drawRect(startPos, y, startPos + 130, y + 10, -1072689136);
mc.fontRendererObj.drawString("Tracker", startPos + 4, y + 1, 0xffffff, false);
y += 10;
- Gui.drawRect(startPos, y, startPos + (tracker.size() >= 6 ? 120 : tracker.size() * 20), (int) (y + (Math.ceil(tracker.size() / 5d) * 20)), 1610612736);
- int x = startPos;
- for (ItemStack stack : tracker.values()) {
- String s = String.valueOf(stack.stackSize);
+ Gui.drawRect(startPos, y, startPos + (tracker.size() >= 6 ? 130 : (tracker.size() * 20)+10), (int) (y + (Math.ceil(tracker.size() / 5d) * 20)), 1610612736);
+ int x = startPos + 5;
+ for (TrackerObject object : tracker.values()) {
+ String s = Utils.formattedNumber(object.getCount(), 1000);
GlStateManager.disableLighting();
GlStateManager.enableDepth();
- drawItemStack(stack, x, y);
+ drawItemStack(object.getDisplayStack(), x, y);
GlStateManager.disableDepth();
GlStateManager.disableBlend();
- mc.fontRendererObj.drawStringWithShadow(s, (float) (x + 19 - 2 - mc.fontRendererObj.getStringWidth(s)), (float) (y + 9), stack.stackSize < 1 ? 16733525 : 16777215);
+ mc.fontRendererObj.drawStringWithShadow(s, (float) (x + 19 - 2 - mc.fontRendererObj.getStringWidth(s)), (float) (y + 9), object.getCount() < 1 ? 16733525 : 16777215);
GlStateManager.enableBlend();
GlStateManager.enableDepth();
- if ((x - startPos) / 20 == 5) {
- x = startPos;
+ if ((x - startPos + 5) / 20 == 5) {
+ x = startPos + 5;
y += 20;
} else {
x += 20;
diff --git a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerObject.java b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerObject.java
new file mode 100644
index 0000000..58034d5
--- /dev/null
+++ b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerObject.java
@@ -0,0 +1,94 @@
+package com.thatgravyboat.skyblockhud.tracker;
+
+import com.google.gson.JsonObject;
+import com.thatgravyboat.skyblockhud.location.Locations;
+import java.util.EnumSet;
+import java.util.Locale;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTBase;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.ResourceLocation;
+
+public class TrackerObject {
+
+ private final ItemStack stack;
+ private final String internalId;
+ private final EnumSet<Locations> locations;
+ private final boolean isEntity;
+ private int count;
+
+ public TrackerObject(JsonObject jsonObject, EnumSet<Locations> locations){
+ this.stack = decodeToItemStack(jsonObject);
+ this.internalId = jsonObject.get("id").getAsString();
+ this.isEntity = jsonObject.get("id").getAsString().contains("entity:");
+ this.locations = locations;
+ }
+
+ public static ItemStack decodeToItemStack(JsonObject jsonObject){
+ jsonObject = jsonObject.getAsJsonObject("displayItem");
+ int meta = jsonObject.get("meta").getAsInt();
+ ResourceLocation itemid = new ResourceLocation(jsonObject.get("item").getAsString());
+ ItemStack stack = new ItemStack(Item.itemRegistry.getObject(itemid), 0, meta);
+ if (jsonObject.has("displayName")) stack.setStackDisplayName(jsonObject.get("displayName").getAsString());
+ if (jsonObject.has("skullData") && itemid.getResourcePath().equals("skull") && meta == 3) {
+ stack.setTagInfo("SkullOwner", getSkullTag(jsonObject.getAsJsonObject("skullData")));
+ }
+ if (jsonObject.has("enchanted") && jsonObject.get("enchanted").getAsBoolean()) {
+ stack.setTagInfo("ench", new NBTTagList());
+ }
+ return stack;
+ }
+
+ public static NBTBase getSkullTag(JsonObject skullObject) {
+ NBTTagCompound skullOwner = new NBTTagCompound();
+ NBTTagCompound properties = new NBTTagCompound();
+ NBTTagList textures = new NBTTagList();
+ NBTTagCompound value = new NBTTagCompound();
+
+ skullOwner.setString("Id", skullObject.get("id").getAsString());
+
+ value.setString("Value", skullObject.get("texture").getAsString());
+ textures.appendTag(value);
+
+ properties.setTag("textures", textures);
+
+ skullOwner.setTag("Properties", properties);
+ return skullOwner;
+ }
+
+ public void increaseCount(int amount) {
+ count+=amount;
+ }
+
+ public void increaseCount() {
+ count++;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public ItemStack getDisplayStack() {
+ return stack;
+ }
+
+ public EnumSet<Locations> getLocations() {
+ return locations;
+ }
+
+ public String getInternalId() {
+ return internalId.toUpperCase(Locale.ENGLISH);
+ }
+
+ public boolean isEntity() {
+ return isEntity;
+ }
+
+
+}