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