001/* 002 * PlotSquared, a land and world management plugin for Minecraft. 003 * Copyright (C) IntellectualSites <https://intellectualsites.com> 004 * Copyright (C) IntellectualSites team and contributors 005 * 006 * This program is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * This program is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with this program. If not, see <https://www.gnu.org/licenses/>. 018 */ 019package com.plotsquared.bukkit.util; 020 021import com.google.inject.Singleton; 022import com.plotsquared.bukkit.player.BukkitOfflinePlayer; 023import com.plotsquared.bukkit.player.BukkitPlayer; 024import com.plotsquared.core.player.OfflinePlotPlayer; 025import com.plotsquared.core.player.PlotPlayer; 026import com.plotsquared.core.plot.PlotArea; 027import com.plotsquared.core.util.EconHandler; 028import net.milkbowl.vault.economy.Economy; 029import org.bukkit.Bukkit; 030import org.bukkit.OfflinePlayer; 031import org.bukkit.plugin.RegisteredServiceProvider; 032import org.checkerframework.checker.nullness.qual.NonNull; 033 034@Singleton 035public class BukkitEconHandler extends EconHandler { 036 037 private Economy econ; 038 039 private static OfflinePlayer getBukkitOfflinePlayer(PlotPlayer<?> plotPlayer) { 040 return ((BukkitPlayer) plotPlayer).player; 041 } 042 043 @Override 044 public boolean init() { 045 if (this.econ == null) { 046 setupEconomy(); 047 } 048 return this.econ != null; 049 } 050 051 private void setupEconomy() { 052 if (Bukkit.getServer().getPluginManager().getPlugin("Vault") == null) { 053 return; 054 } 055 RegisteredServiceProvider<Economy> economyProvider = 056 Bukkit.getServer().getServicesManager().getRegistration(Economy.class); 057 if (economyProvider != null) { 058 this.econ = economyProvider.getProvider(); 059 } 060 } 061 062 @Override 063 public double getMoney(PlotPlayer<?> player) { 064 double bal = super.getMoney(player); 065 if (Double.isNaN(bal)) { 066 return this.econ.getBalance(getBukkitOfflinePlayer(player)); 067 } 068 return bal; 069 } 070 071 @Override 072 public void withdrawMoney(PlotPlayer<?> player, double amount) { 073 this.econ.withdrawPlayer(getBukkitOfflinePlayer(player), amount); 074 } 075 076 @Override 077 public void depositMoney(PlotPlayer<?> player, double amount) { 078 this.econ.depositPlayer(getBukkitOfflinePlayer(player), amount); 079 } 080 081 @Override 082 public void depositMoney(OfflinePlotPlayer player, double amount) { 083 this.econ.depositPlayer(((BukkitOfflinePlayer) player).player, amount); 084 } 085 086 @Override 087 public boolean isEnabled(PlotArea plotArea) { 088 return plotArea.useEconomy(); 089 } 090 091 @Override 092 public @NonNull String format(double balance) { 093 return this.econ.format(balance); 094 } 095 096 @Override 097 public boolean isSupported() { 098 return true; 099 } 100 101 @Override 102 public double getBalance(PlotPlayer<?> player) { 103 return this.econ.getBalance(getBukkitOfflinePlayer(player)); 104 } 105 106}