diff --git a/README.md b/README.md index a010757..7c35428 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ I decided that it was time for a change. I wanted a working, updated economy plu * SaneEconomyCore - The main economy provider. * SaneEconomySignShop - A side project written for a specific server. Unsupported. * SaneEconomyMobKills - Another side project for the same server. Unsupported. +* SaneEconomyOnlineTime - A replacement for the old plugin TimeIsMoney. Unsupported for now. ## Development diff --git a/SaneEconomyCore/pom.xml b/SaneEconomyCore/pom.xml index e964285..7acf059 100644 --- a/SaneEconomyCore/pom.xml +++ b/SaneEconomyCore/pom.xml @@ -6,10 +6,10 @@ org.appledash SaneEconomy - 0.12.4-SNAPSHOT + 0.12.5-SNAPSHOT SaneEconomyCore - 0.12.4-SNAPSHOT + 0.12.5-SNAPSHOT diff --git a/SaneEconomyMobKills/pom.xml b/SaneEconomyMobKills/pom.xml index 3b21f32..ad288f3 100644 --- a/SaneEconomyMobKills/pom.xml +++ b/SaneEconomyMobKills/pom.xml @@ -5,7 +5,7 @@ SaneEconomy org.appledash - 0.12.4-SNAPSHOT + 0.12.5-SNAPSHOT 4.0.0 @@ -16,7 +16,7 @@ org.appledash SaneEconomyCore - 0.12.4-SNAPSHOT + 0.12.5-SNAPSHOT diff --git a/SaneEconomyOnlineTime/pom.xml b/SaneEconomyOnlineTime/pom.xml new file mode 100644 index 0000000..532ee63 --- /dev/null +++ b/SaneEconomyOnlineTime/pom.xml @@ -0,0 +1,77 @@ + + + + SaneEconomy + org.appledash + 0.12.5-SNAPSHOT + + 4.0.0 + + SaneEconomyOnlineTime + 0.1.0-SNAPSHOT + + + + + org.appledash + SaneEconomyCore + 0.12.5-SNAPSHOT + + + + + ${project.artifactId}-${project.version} + + + src/main/resources + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + package + + shade + + + + + org.appledash:sanelib + + + + + org.appledash.sanelib + org.appledash.saneeconomysignshop.shaded.sanelib + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + ../out/ + + + + + \ No newline at end of file diff --git a/SaneEconomyOnlineTime/src/main/java/org/appledash/saneeconomy/onlinetime/Payout.java b/SaneEconomyOnlineTime/src/main/java/org/appledash/saneeconomy/onlinetime/Payout.java new file mode 100644 index 0000000..c8b52c3 --- /dev/null +++ b/SaneEconomyOnlineTime/src/main/java/org/appledash/saneeconomy/onlinetime/Payout.java @@ -0,0 +1,46 @@ +package org.appledash.saneeconomy.onlinetime; + +import java.util.Map; + +/** + * Created by appledash on 7/13/17. + * Blackjack is best pony. + */ +public class Payout { + private final int secondsInterval; + private final double amount; + private final String message; + private String permission; + private long reportInterval; + + public Payout(int secondsInterval, double amount, String message, long reportInterval) { + this.secondsInterval = secondsInterval; + this.amount = amount; + this.message = message; + this.reportInterval = reportInterval; + } + + public int getSecondsInterval() { + return secondsInterval; + } + + public double getAmount() { + return amount; + } + + public String getMessage() { + return message; + } + + public static Payout fromConfigMap(Map values) { + return new Payout(Integer.valueOf(String.valueOf(values.get("seconds"))), Double.valueOf(String.valueOf(values.get("amount"))), String.valueOf(values.get("message")), Long.valueOf(String.valueOf(values.get("report_interval")))); + } + + public String getPermission() { + return permission; + } + + public long getReportInterval() { + return reportInterval; + } +} diff --git a/SaneEconomyOnlineTime/src/main/java/org/appledash/saneeconomy/onlinetime/SaneEconomyOnlineTime.java b/SaneEconomyOnlineTime/src/main/java/org/appledash/saneeconomy/onlinetime/SaneEconomyOnlineTime.java new file mode 100644 index 0000000..23d0327 --- /dev/null +++ b/SaneEconomyOnlineTime/src/main/java/org/appledash/saneeconomy/onlinetime/SaneEconomyOnlineTime.java @@ -0,0 +1,80 @@ +package org.appledash.saneeconomy.onlinetime; + +import org.appledash.saneeconomy.SaneEconomy; +import org.appledash.saneeconomy.economy.economable.Economable; +import org.appledash.saneeconomy.economy.transaction.Transaction; +import org.appledash.saneeconomy.economy.transaction.TransactionReason; +import org.appledash.sanelib.SanePlugin; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.*; + +/** + * Created by appledash on 7/13/17. + * Blackjack is best pony. + */ +public class SaneEconomyOnlineTime extends SanePlugin implements Listener { + private Map onlineSeconds = new HashMap<>(); + private Map reportingAmounts = new HashMap<>(); + private List payouts = new ArrayList<>(); + private SaneEconomy saneEconomy; + + @Override + public void onEnable() { + super.onEnable(); + this.saneEconomy = (SaneEconomy) this.getServer().getPluginManager().getPlugin("SaneEconomy"); + this.saveDefaultConfig(); + + this.getConfig().getMapList("payouts").forEach(map -> { + this.payouts.add(Payout.fromConfigMap(map)); + }); + + this.getServer().getScheduler().scheduleSyncRepeatingTask(this, () -> { + for (Player player : this.getServer().getOnlinePlayers()) { + long onlineSeconds = this.onlineSeconds.getOrDefault(player.getUniqueId(), 0L); + + onlineSeconds++; + + this.onlineSeconds.put(player.getUniqueId(), onlineSeconds); + + for (Payout payout : payouts) { + if (payout.getPermission() != null && !player.hasPermission(payout.getPermission())) { + continue; + } + + if ((onlineSeconds % payout.getSecondsInterval()) == 0) { + if (this.reportingAmounts.containsKey(player.getUniqueId())) { + this.reportingAmounts.put(player.getUniqueId(), this.reportingAmounts.get(player.getUniqueId()) + payout.getAmount()); + } else { + this.reportingAmounts.put(player.getUniqueId(), payout.getAmount()); + } + + this.saneEconomy.getEconomyManager().transact(new Transaction(Economable.PLUGIN, Economable.wrap(player), payout.getAmount(), TransactionReason.PLUGIN_GIVE)); + } + + if ((onlineSeconds % payout.getReportInterval()) == 0) { + this.getMessenger().sendMessage(player, payout.getMessage(), this.saneEconomy.getEconomyManager().getCurrency().formatAmount(this.reportingAmounts.getOrDefault(player.getUniqueId(), 0D)), payout.getReportInterval()); + this.reportingAmounts.put(player.getUniqueId(), 0D); + } + } + + } + },0, 20); + + this.getServer().getPluginManager().registerEvents(this, this); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent evt) { + if (this.onlineSeconds.containsKey(evt.getPlayer().getUniqueId())) { + this.onlineSeconds.remove(evt.getPlayer().getUniqueId()); + } + + if (this.reportingAmounts.containsKey(evt.getPlayer().getUniqueId())) { + this.reportingAmounts.remove(evt.getPlayer().getUniqueId()); + } + } +} diff --git a/SaneEconomyOnlineTime/src/main/resources/config.yml b/SaneEconomyOnlineTime/src/main/resources/config.yml new file mode 100644 index 0000000..d79e5a1 --- /dev/null +++ b/SaneEconomyOnlineTime/src/main/resources/config.yml @@ -0,0 +1,9 @@ +chat: + prefix: '&b[&OnlineTime&b]&r ' + silent: false + +payouts: + - seconds: 10 + amount: 1000 + message: 'You have been paid {1} in the past {2} seconds of being online!' + report_interval: 30 diff --git a/SaneEconomyOnlineTime/src/main/resources/plugin.yml b/SaneEconomyOnlineTime/src/main/resources/plugin.yml new file mode 100644 index 0000000..3712c60 --- /dev/null +++ b/SaneEconomyOnlineTime/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +name: SaneEconomyOnlineTime +main: org.appledash.saneeconomy.onlinetime.SaneEconomyOnlineTime +description: Pays players for being online! +author: AppleDash +version: 0.1.0 +depend: [SaneEconomy] \ No newline at end of file diff --git a/SaneEconomySignShop/pom.xml b/SaneEconomySignShop/pom.xml index ed2ec2e..bd7cbd4 100644 --- a/SaneEconomySignShop/pom.xml +++ b/SaneEconomySignShop/pom.xml @@ -5,7 +5,7 @@ SaneEconomy org.appledash - 0.12.4-SNAPSHOT + 0.12.5-SNAPSHOT 4.0.0 @@ -16,7 +16,7 @@ org.appledash SaneEconomyCore - 0.12.4-SNAPSHOT + 0.12.5-SNAPSHOT diff --git a/pom.xml b/pom.xml index f2a663d..cb537ef 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,14 @@ org.appledash SaneEconomy - 0.12.4-SNAPSHOT + 0.12.5-SNAPSHOT pom SaneEconomyCore SaneEconomySignShop SaneEconomyMobKills + SaneEconomyOnlineTime