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; } }