2013-07-13 23:12:02 +02:00
|
|
|
package com.Acrobot.ChestShop.Listeners.Economy.Plugins;
|
2013-05-30 16:57:54 +02:00
|
|
|
|
2016-11-21 17:43:09 +01:00
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
import net.milkbowl.vault.economy.Economy;
|
|
|
|
import net.milkbowl.vault.economy.EconomyResponse;
|
2016-11-21 17:43:09 +01:00
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
import org.bukkit.Bukkit;
|
2016-10-13 18:11:23 +02:00
|
|
|
import org.bukkit.OfflinePlayer;
|
2013-05-30 16:58:42 +02:00
|
|
|
import org.bukkit.World;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.Listener;
|
|
|
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
|
|
|
|
2016-11-21 17:43:09 +01:00
|
|
|
import com.Acrobot.ChestShop.ChestShop;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.AccountCheckEvent;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.CurrencyAddEvent;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.CurrencyAmountEvent;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.CurrencyCheckEvent;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.CurrencyFormatEvent;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.CurrencyHoldEvent;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.CurrencySubtractEvent;
|
|
|
|
import com.Acrobot.ChestShop.Events.Economy.CurrencyTransferEvent;
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2013-05-30 16:57:54 +02:00
|
|
|
/**
|
2013-05-30 16:58:42 +02:00
|
|
|
* Represents a Vault connector
|
|
|
|
*
|
2013-05-30 16:57:54 +02:00
|
|
|
* @author Acrobot
|
|
|
|
*/
|
2013-05-30 16:58:42 +02:00
|
|
|
public class VaultListener implements Listener {
|
2016-10-13 18:11:23 +02:00
|
|
|
private static Economy provider;
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2016-11-21 17:43:09 +01:00
|
|
|
private VaultListener(Economy provider) { VaultListener.provider = provider; }
|
2016-10-13 18:11:23 +02:00
|
|
|
|
|
|
|
public static Economy getProvider() { return provider; }
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2013-07-21 16:51:36 +02:00
|
|
|
public boolean transactionCanFail() {
|
|
|
|
return provider.getName().equals("Gringotts") || provider.getName().equals("GoldIsMoney") || provider.getName().equals("MultiCurrency");
|
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
/**
|
|
|
|
* Creates a new VaultListener and returns it (if possible)
|
|
|
|
*
|
|
|
|
* @return VaultListener
|
|
|
|
*/
|
|
|
|
public static @Nullable VaultListener initializeVault() {
|
2013-07-22 21:37:59 +02:00
|
|
|
if (Bukkit.getPluginManager().getPlugin("Vault") == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
RegisteredServiceProvider<Economy> rsp = Bukkit.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
|
|
|
|
|
|
|
|
if (rsp == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
Economy provider = rsp.getProvider();
|
|
|
|
|
|
|
|
if (provider == null) {
|
|
|
|
return null;
|
|
|
|
} else {
|
|
|
|
return new VaultListener(provider);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-13 23:14:10 +02:00
|
|
|
@EventHandler
|
|
|
|
public void onAmountCheck(CurrencyAmountEvent event) {
|
|
|
|
if (!event.getAmount().equals(BigDecimal.ZERO)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
double balance = 0;
|
2016-10-13 18:11:23 +02:00
|
|
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
|
|
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
2013-08-26 23:36:36 +02:00
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
if (lastSeen != null) {
|
|
|
|
balance = provider.getBalance(lastSeen, event.getWorld().getName());
|
|
|
|
|
|
|
|
if (balance > Double.MAX_VALUE) {
|
|
|
|
balance = Double.MAX_VALUE;
|
|
|
|
}
|
2013-08-26 23:36:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
event.setAmount(balance);
|
2013-07-13 23:14:10 +02:00
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
@EventHandler
|
|
|
|
public void onCurrencyCheck(CurrencyCheckEvent event) {
|
2013-07-13 23:12:02 +02:00
|
|
|
if (event.hasEnough()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
World world = event.getWorld();
|
2016-10-13 18:11:23 +02:00
|
|
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
|
|
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
if (lastSeen != null) {
|
|
|
|
if (provider.has(lastSeen, world.getName(), event.getDoubleAmount())) {
|
|
|
|
event.hasEnough(true);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
event.hasEnough(false);
|
2013-05-30 16:58:42 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onAccountCheck(AccountCheckEvent event) {
|
2013-07-13 23:12:02 +02:00
|
|
|
if (event.hasAccount()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
World world = event.getWorld();
|
2016-10-13 18:11:23 +02:00
|
|
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
|
|
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
event.hasAccount(lastSeen != null && provider.hasAccount(lastSeen, world.getName()));
|
2013-05-30 16:58:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onCurrencyFormat(CurrencyFormatEvent event) {
|
2013-07-13 23:12:02 +02:00
|
|
|
if (!event.getFormattedAmount().isEmpty()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
String formatted = provider.format(event.getDoubleAmount());
|
|
|
|
event.setFormattedAmount(formatted);
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onCurrencyAdd(CurrencyAddEvent event) {
|
2013-07-13 23:12:02 +02:00
|
|
|
if (event.isAdded()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
World world = event.getWorld();
|
2016-10-13 18:11:23 +02:00
|
|
|
//String lastSeen = NameManager.getLastSeenName(event.getTarget());
|
|
|
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getTarget());
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
if (lastSeen != null) {
|
|
|
|
provider.depositPlayer(lastSeen, world.getName(), event.getDoubleAmount());
|
|
|
|
}
|
2013-05-30 16:58:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onCurrencySubtraction(CurrencySubtractEvent event) {
|
2013-07-13 23:12:02 +02:00
|
|
|
if (event.isSubtracted()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-05-30 16:58:42 +02:00
|
|
|
World world = event.getWorld();
|
2016-10-13 18:11:23 +02:00
|
|
|
//String lastSeen = NameManager.getLastSeenName(event.getTarget());
|
|
|
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getTarget());
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
if (lastSeen != null) {
|
2016-10-13 18:11:23 +02:00
|
|
|
provider.withdrawPlayer(lastSeen, world.getName(), event.getDoubleAmount());
|
2016-07-07 18:15:43 +02:00
|
|
|
}
|
2013-05-30 16:58:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
2013-07-13 23:14:10 +02:00
|
|
|
public static void onCurrencyTransfer(CurrencyTransferEvent event) {
|
2013-07-13 23:12:02 +02:00
|
|
|
if (event.hasBeenTransferred()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-07-13 23:14:10 +02:00
|
|
|
CurrencySubtractEvent currencySubtractEvent = new CurrencySubtractEvent(event.getAmount(), event.getSender(), event.getWorld());
|
|
|
|
ChestShop.callEvent(currencySubtractEvent);
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2013-07-13 23:14:10 +02:00
|
|
|
if (!currencySubtractEvent.isSubtracted()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
CurrencyAddEvent currencyAddEvent = new CurrencyAddEvent(currencySubtractEvent.getAmount(), event.getReceiver(), event.getWorld());
|
|
|
|
ChestShop.callEvent(currencyAddEvent);
|
|
|
|
}
|
2013-05-30 16:58:42 +02:00
|
|
|
|
2013-07-13 23:14:10 +02:00
|
|
|
@EventHandler
|
|
|
|
public void onCurrencyHoldCheck(CurrencyHoldEvent event) {
|
2014-06-14 20:46:59 +02:00
|
|
|
if (event.getAccount() == null || !transactionCanFail()) {
|
2013-07-21 16:51:36 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-10-13 18:11:23 +02:00
|
|
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
|
|
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
2016-07-07 18:15:43 +02:00
|
|
|
String world = event.getWorld().getName();
|
|
|
|
|
|
|
|
if (lastSeen == null) {
|
|
|
|
event.canHold(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!provider.hasAccount(lastSeen, world)) {
|
2013-07-21 16:51:36 +02:00
|
|
|
event.canHold(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
EconomyResponse response = provider.depositPlayer(lastSeen, world, event.getDoubleAmount());
|
2013-07-13 23:14:10 +02:00
|
|
|
|
|
|
|
if (!response.transactionSuccess()) {
|
|
|
|
event.canHold(false);
|
2013-07-21 16:51:36 +02:00
|
|
|
return;
|
2013-05-30 16:58:42 +02:00
|
|
|
}
|
2013-07-13 23:14:10 +02:00
|
|
|
|
2016-07-07 18:15:43 +02:00
|
|
|
provider.withdrawPlayer(lastSeen, world, event.getDoubleAmount());
|
2013-05-30 16:58:42 +02:00
|
|
|
}
|
2013-05-30 16:57:54 +02:00
|
|
|
}
|