summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/resources/ResourceManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/resources/ResourceManager.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/ResourceManager.java224
1 files changed, 224 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/resources/ResourceManager.java b/src/main/java/net/uomc/mineshaft/resources/ResourceManager.java
new file mode 100644
index 0000000..8c58ab3
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/ResourceManager.java
@@ -0,0 +1,224 @@
+package net.uomc.mineshaft.resources;
+
+import java.io.File;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandController;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.User;
+import net.uomc.mineshaft.resources.commands.CreateResourceCommand;
+import net.uomc.mineshaft.resources.commands.GiveResourcesCommand;
+import net.uomc.mineshaft.resources.commands.LeaderBoardCommand;
+import net.uomc.mineshaft.resources.commands.ListResourcesCommand;
+import net.uomc.mineshaft.resources.commands.MyResourcesCommand;
+import net.uomc.mineshaft.resources.commands.RemoveResourceCommand;
+import net.uomc.mineshaft.resources.commands.SetPrimaryResourceCommand;
+import net.uomc.mineshaft.resources.commands.ValuesCommand;
+import net.uomc.mineshaft.resources.market.MarketCommand;
+import net.uomc.mineshaft.resources.market.MarketManager;
+
+public class ResourceManager {
+
+ private static final String PRIMARY_RESOURCE_KEY = "primary_resource";
+ private static final String RESOURCES_KEY = "resources";
+ private List<Resource> resources = new ArrayList<Resource>();
+
+ private File configFile;
+ private CustomBot bot;
+ private String databasepath;
+
+ private String primaryResource = "money";
+
+ private MarketManager marketManager;
+
+ public ResourceManager(CustomBot customBot) {
+ this.bot = customBot;
+ configFile = new File(customBot.getDatadir(), "resources_config.json");
+
+ File database = new File(customBot.getDatadir(), "resources.db");
+ databasepath = database.getPath();
+
+ loadResources();
+
+ marketManager = new MarketManager(this);
+
+ initCommands();
+ }
+
+ private void initCommands() {
+ CommandController cc = bot.getCommandController();
+
+ // setup commands
+ cc.addCommand(new ListResourcesCommand(this));
+ cc.addCommand(new CreateResourceCommand(this));
+ cc.addCommand(new RemoveResourceCommand(this));
+ cc.addCommand(new SetPrimaryResourceCommand(this));
+
+ MyResourcesCommand myResourcesCommand = new MyResourcesCommand(this);
+
+ cc.addCommand(CommandDetails.from("balance,bal,$,money"), (e, b, args) -> {
+ Member member = PeelingUtils.getSingleMentionFromArgs(e);
+
+ bot.sendMessage(
+ e, (member.equals(e.getMember()) ? "You have" : member.getEffectiveName() + " has")
+ + " **" + getPrimaryResource().prettyValue(
+ getPrimaryResource().get(member)
+ ) + "**"
+ );
+
+ });
+
+ // public commands
+ cc.addCommand(myResourcesCommand);
+
+ cc.addCommand(new GiveResourcesCommand(this));
+ //cc.addCommand(new MarketCommand(marketManager));
+
+ cc.addCommand(new ValuesCommand(this));
+ cc.addCommand(new LeaderBoardCommand(this));
+ }
+
+ private void loadResources() {
+ JSONObject loadJSON = PeelingUtils.loadJSON(configFile);
+
+ if (loadJSON.has(RESOURCES_KEY)) {
+ JSONArray jsonArray = loadJSON.getJSONArray(RESOURCES_KEY);
+ for (Object o : jsonArray) {
+ if (o instanceof JSONObject) {
+ Resource resource = new Resource((JSONObject) o, this);
+ resources.add(resource);
+ }
+ }
+ }
+
+ if (loadJSON.has(PRIMARY_RESOURCE_KEY)) {
+ setPrimaryResource(loadJSON.getString(PRIMARY_RESOURCE_KEY));
+ }
+ }
+
+ private void saveResources() {
+ JSONObject save = new JSONObject();
+ save.put(PRIMARY_RESOURCE_KEY, primaryResource);
+
+ resources.forEach(r -> save.append(RESOURCES_KEY, r));
+
+ PeelingUtils.saveJSONPretty(configFile, save);
+ }
+
+ public void addResource(Resource resource) {
+ resources.add(resource);
+ saveResources();
+ }
+
+ public Resource getResource(String input) {
+ for (Resource resource : resources) {
+ if (resource.getName().equalsIgnoreCase(input) || resource.getSymbol().equalsIgnoreCase(input)) {
+ return resource;
+ }
+ }
+ return null;
+ }
+
+ public List<Resource> listResources() {
+ return Collections.unmodifiableList(resources);
+ }
+
+ public boolean removeResource(String name) {
+ Resource resource = getResource(name);
+ if (resource != null) {
+ resources.remove(resource);
+ saveResources();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public CustomBot getBot() {
+ return bot;
+ }
+
+ public void setBot(CustomBot bot) {
+ this.bot = bot;
+ }
+
+ public String getDatabasepath() {
+ return databasepath;
+ }
+
+ public void setDatabasepath(String databasepath) {
+ this.databasepath = databasepath;
+ }
+
+ public Resource getPrimaryResource() {
+ Resource resource = getResource(primaryResource);
+ return resource == null ? resources.get(0) : resource;
+
+ }
+
+ public String getPrimaryResourceName() {
+ return primaryResource;
+ }
+
+ public void setPrimaryResource(String primaryResource) {
+ this.primaryResource = primaryResource;
+ saveResources();
+ }
+
+ public List<Resource> getResources() {
+ return Collections.unmodifiableList(resources);
+ }
+
+ public long getResource(Member member, String resourceName) {
+ Resource resource = getResource(resourceName);
+ if (resource == null)
+ return 0;
+
+ return resource.get(member);
+ }
+ public void setResource(Member member, String resourceName, long amount) {
+ Resource resource = getResource(resourceName);
+ if (resource == null)
+ return;
+
+ resource.set(member, amount);
+ }
+
+ public void addResource(Member member, String resource, long amount){
+ long a = getResource(member, resource);
+ setResource(member, resource, a + amount);
+ }
+
+ public void addResources(Member member, Map<String, Long> resources) {
+ resources.forEach((k, v) -> {
+ addResource(member, k, v);
+ });
+ }
+
+ public String createResourceList(Map<String, Long> resources) {
+ StringBuilder string = new StringBuilder();
+ resources.entrySet().stream()
+ .sorted((e1, e2) ->
+ (int)(e2.getValue() - e1.getValue()))
+ .forEach((e) -> {
+ Resource resource = getResource(e.getKey());
+ if (resource != null)
+ string.append(resource.prettyValue(e.getValue()) + "\n");
+ });
+ return string.toString();
+ }
+}