geforkt von Mirrors/HeadDB
Merge branch 'economy_support'
Dieser Commit ist enthalten in:
Commit
0c2b6bdc3c
7
pom.xml
7
pom.xml
@ -68,6 +68,13 @@
|
|||||||
<artifactId>anvilgui</artifactId>
|
<artifactId>anvilgui</artifactId>
|
||||||
<version>1.5.1-SNAPSHOT</version>
|
<version>1.5.1-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- Vault -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.MilkBowl</groupId>
|
||||||
|
<artifactId>VaultAPI</artifactId>
|
||||||
|
<version>1.7</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -13,12 +13,15 @@ import tsp.headdb.listener.MenuListener;
|
|||||||
import tsp.headdb.util.Log;
|
import tsp.headdb.util.Log;
|
||||||
import tsp.headdb.util.Metrics;
|
import tsp.headdb.util.Metrics;
|
||||||
import tsp.headdb.util.Utils;
|
import tsp.headdb.util.Utils;
|
||||||
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
|
import net.milkbowl.vault.economy.Economy;
|
||||||
|
|
||||||
public class HeadDB extends JavaPlugin {
|
public class HeadDB extends JavaPlugin {
|
||||||
|
|
||||||
private static HeadDB instance;
|
private static HeadDB instance;
|
||||||
private Config config;
|
private Config config;
|
||||||
private Json playerdata;
|
private Json playerdata;
|
||||||
|
private Economy economy = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
@ -28,6 +31,16 @@ public class HeadDB extends JavaPlugin {
|
|||||||
config = LightningBuilder.fromPath("config.yml", "plugins/HeadDB").createConfig().addDefaultsFromInputStream();
|
config = LightningBuilder.fromPath("config.yml", "plugins/HeadDB").createConfig().addDefaultsFromInputStream();
|
||||||
playerdata = LightningBuilder.fromPath("playerdata.json", "plugins/HeadDB").createJson();
|
playerdata = LightningBuilder.fromPath("playerdata.json", "plugins/HeadDB").createJson();
|
||||||
|
|
||||||
|
if (config.getBoolean("economy.enable")) {
|
||||||
|
Log.debug("Starting economy...");
|
||||||
|
this.economy = this.setupEconomy();
|
||||||
|
if (this.economy == null) {
|
||||||
|
Log.error("Economy support requires Vault and an economy provider plugin.");
|
||||||
|
} else {
|
||||||
|
Log.info("Economy provider: " + this.economy.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Log.debug("Starting metrics...");
|
Log.debug("Starting metrics...");
|
||||||
new Metrics(this, Utils.METRICS_ID);
|
new Metrics(this, Utils.METRICS_ID);
|
||||||
|
|
||||||
@ -52,6 +65,15 @@ public class HeadDB extends JavaPlugin {
|
|||||||
Log.info("Done!");
|
Log.info("Done!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Economy setupEconomy() {
|
||||||
|
if (!this.getServer().getPluginManager().isPluginEnabled("Vault")) return null;
|
||||||
|
|
||||||
|
RegisteredServiceProvider<Economy> economyProvider = this.getServer().getServicesManager().getRegistration(Economy.class);
|
||||||
|
if (economyProvider == null) return null;
|
||||||
|
|
||||||
|
return this.economy = economyProvider.getProvider();
|
||||||
|
}
|
||||||
|
|
||||||
public Config getCfg() {
|
public Config getCfg() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
@ -64,4 +86,7 @@ public class HeadDB extends JavaPlugin {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Economy getEconomy() {
|
||||||
|
return this.economy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,12 +7,14 @@ import org.bukkit.event.inventory.ClickType;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import tsp.headdb.HeadDB;
|
||||||
import tsp.headdb.api.Head;
|
import tsp.headdb.api.Head;
|
||||||
import tsp.headdb.api.HeadAPI;
|
import tsp.headdb.api.HeadAPI;
|
||||||
import tsp.headdb.api.LocalHead;
|
import tsp.headdb.api.LocalHead;
|
||||||
import tsp.headdb.database.Category;
|
import tsp.headdb.database.Category;
|
||||||
import tsp.headdb.util.Utils;
|
import tsp.headdb.util.Utils;
|
||||||
import tsp.headdb.util.XMaterial;
|
import tsp.headdb.util.XMaterial;
|
||||||
|
import net.milkbowl.vault.economy.Economy;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -27,13 +29,11 @@ public class InventoryUtils {
|
|||||||
for (LocalHead localHead : heads) {
|
for (LocalHead localHead : heads) {
|
||||||
pane.addButton(new Button(localHead.getItemStack(), e -> {
|
pane.addButton(new Button(localHead.getItemStack(), e -> {
|
||||||
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
||||||
ItemStack item = localHead.getItemStack();
|
purchaseItem(player, localHead.getItemStack(), 64, "local", localHead.getName());
|
||||||
item.setAmount(64);
|
|
||||||
player.getInventory().addItem(item);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.LEFT) {
|
if (e.getClick() == ClickType.LEFT) {
|
||||||
player.getInventory().addItem(localHead.getItemStack());
|
purchaseItem(player, localHead.getItemStack(), 1, "local", localHead.getName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.RIGHT) {
|
if (e.getClick() == ClickType.RIGHT) {
|
||||||
@ -53,13 +53,11 @@ public class InventoryUtils {
|
|||||||
for (Head head : heads) {
|
for (Head head : heads) {
|
||||||
pane.addButton(new Button(head.getItemStack(), e -> {
|
pane.addButton(new Button(head.getItemStack(), e -> {
|
||||||
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
||||||
ItemStack item = head.getItemStack();
|
purchaseItem(player, head.getItemStack(), 64, head.getCategory().getName(), head.getName());
|
||||||
item.setAmount(64);
|
|
||||||
player.getInventory().addItem(item);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.LEFT) {
|
if (e.getClick() == ClickType.LEFT) {
|
||||||
player.getInventory().addItem(head.getItemStack());
|
purchaseItem(player, head.getItemStack(), 1, head.getCategory().getName(), head.getName());
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.RIGHT) {
|
if (e.getClick() == ClickType.RIGHT) {
|
||||||
HeadAPI.removeFavoriteHead(player.getUniqueId(), head.getId());
|
HeadAPI.removeFavoriteHead(player.getUniqueId(), head.getId());
|
||||||
@ -79,13 +77,11 @@ public class InventoryUtils {
|
|||||||
for (Head head : heads) {
|
for (Head head : heads) {
|
||||||
pane.addButton(new Button(head.getItemStack(), e -> {
|
pane.addButton(new Button(head.getItemStack(), e -> {
|
||||||
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
||||||
ItemStack item = head.getItemStack();
|
purchaseItem(player, head.getItemStack(), 64, head.getCategory().getName(), head.getName());
|
||||||
item.setAmount(64);
|
|
||||||
player.getInventory().addItem(item);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.LEFT) {
|
if (e.getClick() == ClickType.LEFT) {
|
||||||
player.getInventory().addItem(head.getItemStack());
|
purchaseItem(player, head.getItemStack(), 1, head.getCategory().getName(), head.getName());
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.RIGHT) {
|
if (e.getClick() == ClickType.RIGHT) {
|
||||||
HeadAPI.addFavoriteHead(player.getUniqueId(), head.getId());
|
HeadAPI.addFavoriteHead(player.getUniqueId(), head.getId());
|
||||||
@ -105,13 +101,11 @@ public class InventoryUtils {
|
|||||||
for (Head head : heads) {
|
for (Head head : heads) {
|
||||||
pane.addButton(new Button(head.getItemStack(), e -> {
|
pane.addButton(new Button(head.getItemStack(), e -> {
|
||||||
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
||||||
ItemStack item = head.getItemStack();
|
purchaseItem(player, head.getItemStack(), 64, head.getCategory().getName(), head.getName());
|
||||||
item.setAmount(64);
|
|
||||||
player.getInventory().addItem(item);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.LEFT) {
|
if (e.getClick() == ClickType.LEFT) {
|
||||||
player.getInventory().addItem(head.getItemStack());
|
purchaseItem(player, head.getItemStack(), 1, head.getCategory().getName(), head.getName());
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.RIGHT) {
|
if (e.getClick() == ClickType.RIGHT) {
|
||||||
HeadAPI.addFavoriteHead(player.getUniqueId(), head.getId());
|
HeadAPI.addFavoriteHead(player.getUniqueId(), head.getId());
|
||||||
@ -130,13 +124,11 @@ public class InventoryUtils {
|
|||||||
for (Head head : heads) {
|
for (Head head : heads) {
|
||||||
pane.addButton(new Button(head.getItemStack(), e -> {
|
pane.addButton(new Button(head.getItemStack(), e -> {
|
||||||
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
if (e.getClick() == ClickType.SHIFT_LEFT) {
|
||||||
ItemStack item = head.getItemStack();
|
purchaseItem(player, head.getItemStack(), 64, head.getCategory().getName(), head.getName());
|
||||||
item.setAmount(64);
|
|
||||||
player.getInventory().addItem(item);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.LEFT) {
|
if (e.getClick() == ClickType.LEFT) {
|
||||||
player.getInventory().addItem(head.getItemStack());
|
purchaseItem(player, head.getItemStack(), 1, head.getCategory().getName(), head.getName());
|
||||||
}
|
}
|
||||||
if (e.getClick() == ClickType.RIGHT) {
|
if (e.getClick() == ClickType.RIGHT) {
|
||||||
HeadAPI.addFavoriteHead(player.getUniqueId(), head.getId());
|
HeadAPI.addFavoriteHead(player.getUniqueId(), head.getId());
|
||||||
@ -228,4 +220,45 @@ public class InventoryUtils {
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static double getCategoryCost(Player player, String category) {
|
||||||
|
// If the player has the permission headdb.economy.free or headdb.economy.CATEGORY.free, the item is free.
|
||||||
|
if (player.hasPermission("headdb.economy.free") || player.hasPermission("headdb.economy." + category + ".free")) return 0;
|
||||||
|
|
||||||
|
// Otherwise, get the price for this category from the config file.
|
||||||
|
return HeadDB.getInstance().getCfg().getDouble("economy.cost." + category);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean processPayment(Player player, int amount, String category, String description) {
|
||||||
|
Economy economy = HeadDB.getInstance().getEconomy();
|
||||||
|
|
||||||
|
// If economy is disabled or no plugin is present, the item is free.
|
||||||
|
// Don't mention receiving it for free in this case, since it is always free.
|
||||||
|
if (economy == null) {
|
||||||
|
player.sendMessage(String.format("You received %d x %s!", amount, description));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
double cost = getCategoryCost(player, category) * amount;
|
||||||
|
|
||||||
|
// If the cost is higher than zero, attempt to charge for it.
|
||||||
|
if (cost > 0) {
|
||||||
|
if (economy.has(player, cost)) {
|
||||||
|
economy.withdrawPlayer(player, cost);
|
||||||
|
player.sendMessage(String.format("You purchased %d x %s for %.2f %s!", amount, description, cost, economy.currencyNamePlural()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
player.sendMessage(String.format("You do not have enough %s to purchase %d x %s.", economy.currencyNamePlural(), amount, description));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, the item is free.
|
||||||
|
player.sendMessage(String.format("You received %d x %s for free!", amount, description));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void purchaseItem(Player player, ItemStack item, int amount, String category, String description) {
|
||||||
|
if (!processPayment(player, amount, category, description)) return;
|
||||||
|
item.setAmount(amount);
|
||||||
|
player.getInventory().addItem(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,5 +7,21 @@ asyncStartup: false
|
|||||||
# If the cached heads are older than these amount of seconds, the plugin will refresh the database
|
# If the cached heads are older than these amount of seconds, the plugin will refresh the database
|
||||||
refresh: 3600
|
refresh: 3600
|
||||||
|
|
||||||
|
# Economy options
|
||||||
|
economy:
|
||||||
|
enable: false
|
||||||
|
cost:
|
||||||
|
alphabet: 100
|
||||||
|
animals: 100
|
||||||
|
blocks: 100
|
||||||
|
decoration: 100
|
||||||
|
food-drinks: 100
|
||||||
|
humans: 100
|
||||||
|
humanoid: 100
|
||||||
|
miscellaneous: 100
|
||||||
|
monsters: 100
|
||||||
|
plants: 100
|
||||||
|
local: 1000
|
||||||
|
|
||||||
# Debug Mode
|
# Debug Mode
|
||||||
debug: false
|
debug: false
|
@ -3,6 +3,7 @@ description: ${project.description}
|
|||||||
|
|
||||||
main: tsp.headdb.HeadDB
|
main: tsp.headdb.HeadDB
|
||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
|
softdepend: [Vault]
|
||||||
api-version: 1.16
|
api-version: 1.16
|
||||||
author: Silent
|
author: Silent
|
||||||
|
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren