From 10b327e9f6441a8863227ce3e075a5a587654065 Mon Sep 17 00:00:00 2001 From: davidovski Date: Sat, 11 Oct 2025 04:55:51 +0100 Subject: v0.3.1 --- .../uomc/mineshaft/resources/ResourceTable.java | 127 +++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/main/java/net/uomc/mineshaft/resources/ResourceTable.java (limited to 'src/main/java/net/uomc/mineshaft/resources/ResourceTable.java') diff --git a/src/main/java/net/uomc/mineshaft/resources/ResourceTable.java b/src/main/java/net/uomc/mineshaft/resources/ResourceTable.java new file mode 100644 index 0000000..8cce03e --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/ResourceTable.java @@ -0,0 +1,127 @@ +package net.uomc.mineshaft.resources; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.json.JSONObject; + +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.User; + +public class ResourceTable extends JSONObject { + public ResourceTable(JSONObject jsonObject) { + super(); + jsonObject.keySet().forEach(k -> put(k, jsonObject.get(k))); + } + + public ResourceTable() { + super(); + } + + public void setResource(Resource resource, long value) { + put(resource.getName(), value); + } + + public long getResource(Resource resource) { + String name = resource.getName(); + if (has(name)) { + return getLong(name); + } + return 0l; + } + + public Map getTable(ResourceManager resourceManager) { + HashMap hashMap = new HashMap(); + Iterator keys = keys(); + while (keys.hasNext()) { + String key = keys.next(); + Resource resource = resourceManager.getResource(key); + if (resource != null) { + long q = getLong(key); + hashMap.put(resource, q); + } + } + + return Collections.unmodifiableMap(hashMap); + } + + public void addToUser(Member user, ResourceManager resourceManager) { + Map table = getTable(resourceManager); + table.forEach((resource, q) -> { + resource.increment(user, q); + }); + } + + public void removeFromUser(Member user, ResourceManager resourceManager) { + Map table = getTable(resourceManager); + table.forEach((resource, q) -> { + resource.increment(user, -q); + }); + } + + /** + * @param user + * @param resourceManager + * @return list of resources that are lacking + */ + public Map doesUserHave(Member user, ResourceManager resourceManager) { + Map table = getTable(resourceManager); + Map lacking = new HashMap(); + table.forEach((resource, q) -> { + if (resource.get(user) < q) { + lacking.put(resource, q - resource.get(user)); + } + }); + + return Collections.unmodifiableMap(lacking); + } + + public String toStringList(ResourceManager resourceManager) { + Map table = getTable(resourceManager); + + List parts = new ArrayList(); + table.forEach((r, q) -> parts.add(r.prettyValue(q))); + + return String.join(", ", parts); + } + + public void addResourceTable(ResourceTable table) { + Iterator keys = table.keys(); + while (keys.hasNext()) { + String next = keys.next(); + + put(next, optLong(next) + table.getLong(next)); + } + } + + public ResourceTable negatives() { + ResourceTable negatives = new ResourceTable(); + Iterator keys = keys(); + while (keys.hasNext()) { + String next = keys.next(); + long long1 = getLong(next); + if (long1 < 0) { + negatives.put(next, Math.abs(long1)); + } + } + return negatives; + } + + public ResourceTable postives() { + ResourceTable positives = new ResourceTable(); + Iterator keys = keys(); + while (keys.hasNext()) { + String next = keys.next(); + long long1 = getLong(next); + if (long1 > 0) { + positives.put(next, long1); + } + } + return positives; + } + +} -- cgit v1.2.3