2013-07-13 23:12:02 +02:00
|
|
|
package com.Acrobot.ChestShop.Listeners.Economy.Plugins;
|
2013-05-30 16:57:54 +02:00
|
|
|
|
2013-07-13 23:14:10 +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;
|
2013-07-13 23:14:10 +02:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new VaultListener and returns it (if possible)
|
|
|
|
*
|
|
|
|
* @return VaultListener
|
|
|
|
*/
|
|
|
|
public static @Nullable VaultListener initializeVault() {
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
2013-07-13 23:14:10 +02:00
|
|
|
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
|
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) {
|
|
|
|
EconomyResponse response = provider.depositPlayer(event.getAccount(), event.getWorld().getName(), event.getDoubleAmount());
|
|
|
|
|
|
|
|
if (!response.transactionSuccess()) {
|
|
|
|
event.canHold(false);
|
2013-05-30 16:58:42 +02:00
|
|
|
}
|
2013-07-13 23:14:10 +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
|
|
|
}
|