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; } }