summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/resources/ResourceTable.java
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2025-10-11 04:55:51 +0100
committerdavidovski <david@davidovski.xyz>2025-10-11 04:55:51 +0100
commit10b327e9f6441a8863227ce3e075a5a587654065 (patch)
tree5e94ecc91290febacf5181d3596563a7a24bd010 /src/main/java/net/uomc/mineshaft/resources/ResourceTable.java
v0.3.1
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/resources/ResourceTable.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/ResourceTable.java127
1 files changed, 127 insertions, 0 deletions
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<Resource, Long> getTable(ResourceManager resourceManager) {
+ HashMap<Resource, Long> hashMap = new HashMap<Resource, Long>();
+ Iterator<String> 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<Resource, Long> table = getTable(resourceManager);
+ table.forEach((resource, q) -> {
+ resource.increment(user, q);
+ });
+ }
+
+ public void removeFromUser(Member user, ResourceManager resourceManager) {
+ Map<Resource, Long> table = getTable(resourceManager);
+ table.forEach((resource, q) -> {
+ resource.increment(user, -q);
+ });
+ }
+
+ /**
+ * @param user
+ * @param resourceManager
+ * @return list of resources that are lacking
+ */
+ public Map<Resource, Long> doesUserHave(Member user, ResourceManager resourceManager) {
+ Map<Resource, Long> table = getTable(resourceManager);
+ Map<Resource, Long> lacking = new HashMap<Resource, Long>();
+ 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<Resource, Long> table = getTable(resourceManager);
+
+ List<String> parts = new ArrayList<String>();
+ table.forEach((r, q) -> parts.add(r.prettyValue(q)));
+
+ return String.join(", ", parts);
+ }
+
+ public void addResourceTable(ResourceTable table) {
+ Iterator<String> 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<String> 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<String> keys = keys();
+ while (keys.hasNext()) {
+ String next = keys.next();
+ long long1 = getLong(next);
+ if (long1 > 0) {
+ positives.put(next, long1);
+ }
+ }
+ return positives;
+ }
+
+}