ChestShop-3/src/main/java/com/Acrobot/ChestShop/Listeners/Economy/Plugins/VaultListener.java

163 lines
4.6 KiB
Java
Raw Normal View History

2013-07-13 23:12:02 +02:00
package com.Acrobot.ChestShop.Listeners.Economy.Plugins;
2013-05-30 16:57:54 +02:00
import com.Acrobot.ChestShop.ChestShop;
2013-05-30 16:58:42 +02:00
import com.Acrobot.ChestShop.Events.Economy.*;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.RegisteredServiceProvider;
import javax.annotation.Nullable;
import java.math.BigDecimal;
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 {
private final Economy provider;
private VaultListener(Economy provider) {
this.provider = provider;
}
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);
}
}
@EventHandler
public void onAmountCheck(CurrencyAmountEvent event) {
if (!event.getAmount().equals(BigDecimal.ZERO)) {
return;
}
event.setAmount(provider.getBalance(event.getAccount(), event.getWorld().getName()));
}
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();
if (provider.has(event.getAccount(), world.getName(), event.getDoubleAmount())) {
event.hasEnough(true);
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();
if (!provider.hasAccount(event.getAccount(), world.getName())) {
2013-07-13 23:12:02 +02:00
event.hasAccount(false);
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();
provider.depositPlayer(event.getTarget(), world.getName(), event.getDoubleAmount());
}
@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();
provider.withdrawPlayer(event.getTarget(), world.getName(), event.getDoubleAmount());
}
@EventHandler
public static void onCurrencyTransfer(CurrencyTransferEvent event) {
2013-07-13 23:12:02 +02:00
if (event.hasBeenTransferred()) {
return;
}
CurrencySubtractEvent currencySubtractEvent = new CurrencySubtractEvent(event.getAmount(), event.getSender(), event.getWorld());
ChestShop.callEvent(currencySubtractEvent);
2013-05-30 16:58:42 +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
@EventHandler
public void onCurrencyHoldCheck(CurrencyHoldEvent event) {
2013-07-21 16:51:36 +02:00
if (event.getAccount().isEmpty() || !transactionCanFail()) {
return;
}
if (!provider.hasAccount(event.getAccount(), event.getWorld().getName())) {
event.canHold(false);
return;
}
EconomyResponse response = provider.depositPlayer(event.getAccount(), event.getWorld().getName(), event.getDoubleAmount());
if (!response.transactionSuccess()) {
event.canHold(false);
2013-07-21 16:51:36 +02:00
return;
2013-05-30 16:58:42 +02:00
}
provider.withdrawPlayer(event.getAccount(), event.getWorld().getName(), event.getDoubleAmount());
2013-05-30 16:58:42 +02:00
}
2013-05-30 16:57:54 +02:00
}