Maxlego08 icon

factionUtils

Maxlego08 | PRO | 01/24/20 04:08:06 PM UTC | 0 ⭐ | 419 👁️ | Never ⏰ | []
Java |

3.68 KB

|

None

|

0 👍

/

0 👎

package fr.maxlego08.zspawner.zcore.utils.faction;
 
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
 
import com.massivecraft.factions.Board;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayers;
 
import fr.maxlego08.zspawner.zcore.ZPlugin;
import fr.maxlego08.zspawner.zcore.logger.Logger;
import fr.maxlego08.zspawner.zcore.logger.Logger.LogType;
import net.redstoneore.legacyfactions.entity.FPlayer;
import net.redstoneore.legacyfactions.entity.FPlayerColl;
 
public class FactionUtils {
 
    private FactionType type = FactionType.NONE;
    private FPlayers fPlayers;
    private Method getPlayer;
    private Method getByPlayer;
 
    public FactionUtils() {
        this.loadFaction();
        Logger.info("Faction Detection§7: §6" + type.name(), LogType.SUCCESS);
        if (!type.equals(FactionType.NONE)) {
            try {
                Field field = FPlayers.class.getDeclaredField("i");
                field.setAccessible(true);
                fPlayers = (FPlayers) field.get(FPlayers.class);
                getPlayer = fPlayers.getClass().getMethod("get", Player.class);
            } catch (Exception e) {
                try {
                    fPlayers = (FPlayers) FPlayers.class.getMethod("getInstance", null).invoke(null, null);
                    getByPlayer = fPlayers.getClass().getMethod("getByPlayer", Player.class);
                } catch (Exception e1) {
                }
            }
        }
    }
 
    private void loadFaction() {
        for (Plugin pl : Bukkit.getPluginManager().getPlugins()) {
            if (pl.getName().equalsIgnoreCase("Factions")) {
                String author = pl.getDescription().getAuthors().toString();
                if (author.contains("Benzimmer")) {
                    type = FactionType.ULTIMATE;
                    return;
                }
                if (author.contains("ProSavage") && author.contains("drtshock")) {
                    type = FactionType.SAVAGE;
                    return;
                }
                if (author.contains("drtshock")) {
                    type = FactionType.UUID;
                    return;
                }
                if (author.contains("Cayorion") && Bukkit.getPluginManager().isPluginEnabled("MassiveCore")) {
                    type = FactionType.MASSIVECORE;
                    return;
                }
                if (author.contains("Olof") && author.contains("Larsson")) {
                    type = FactionType.FACTION_1_7_10;
                    return;
                }
            }
            if (pl.getName().equalsIgnoreCase("LegacyFactions")) {
                type = FactionType.LEGACY;
                return;
            }
        }
    }
 
    public FactionType getType() {
        return type;
    }
 
    private Object getFPlayer(Player player) {
        try {
            return getPlayer.invoke(fPlayers, player);
        } catch (Exception e) {
            try {
                return getByPlayer.invoke(fPlayers, player);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        return null;
    }
 
    /**
     * 
     * @param player
     * @param location
     * @return
     */
    public boolean canBuild(Player player, Location location) {
        boolean worldguardBuild = ZPlugin.z().getWorldguard() != null ? ZPlugin.z().getWorldguard().canBuild(player, location) : true;
        boolean factionBuild = true;
        switch (type) {
        case LEGACY:
            FPlayer fPlayer = FPlayerColl.get(player);
            factionBuild = fPlayer.isInOwnTerritory();
            break;
        case MASSIVECORE:{
            com.massivecraft.factions.entity.MPlayer mPlayer = com.massivecraft.factions.entity.MPlayer.get(player);
            factionBuild = mPlayer.isInOwnTerritory();
            break;
        }
        case FACTION_1_7_10:
        case SAVAGE:
        case ULTIMATE:
        case UUID:
            try {
                Object o = getFPlayer(player);
                factionBuild = (boolean) o.getClass().getMethod("isInOwnTerritory", null).invoke(o, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
            break;
        case NONE:
            factionBuild = true;
            break;
        }
        return worldguardBuild && factionBuild;
    }
 
}

Comments