Advertisement
JackOUT

Untitled

Mar 21st, 2023
652
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 28.92 KB | None | 0 0
  1. package games.coob.laserturrets.hook;
  2.  
  3. import com.bekvon.bukkit.residence.Residence;
  4. import com.bekvon.bukkit.residence.containers.ResidencePlayer;
  5. import com.bekvon.bukkit.residence.protection.ClaimedResidence;
  6. import com.booksaw.betterTeams.Team;
  7. import com.dansplugins.factionsystem.MedievalFactions;
  8. import com.dansplugins.factionsystem.claim.MfClaimService;
  9. import com.dansplugins.factionsystem.claim.MfClaimedChunk;
  10. import com.dansplugins.factionsystem.faction.MfFaction;
  11. import com.dansplugins.factionsystem.faction.MfFactionService;
  12. import com.dansplugins.factionsystem.player.MfPlayer;
  13. import com.dansplugins.factionsystem.player.MfPlayerService;
  14. import com.dansplugins.factionsystem.relationship.MfFactionRelationshipService;
  15. import com.dansplugins.factionsystem.service.Services;
  16. import com.palmergames.bukkit.towny.TownyAPI;
  17. import com.palmergames.bukkit.towny.object.Town;
  18. import com.palmergames.bukkit.towny.object.TownyPermission;
  19. import com.palmergames.bukkit.towny.utils.PlayerCacheUtil;
  20. import com.sk89q.worldedit.bukkit.BukkitAdapter;
  21. import com.sk89q.worldedit.world.World;
  22. import com.sk89q.worldguard.LocalPlayer;
  23. import com.sk89q.worldguard.WorldGuard;
  24. import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
  25. import com.sk89q.worldguard.protection.flags.Flags;
  26. import com.sk89q.worldguard.protection.regions.RegionContainer;
  27. import com.sk89q.worldguard.protection.regions.RegionQuery;
  28. import konquest.api.KonquestAPI;
  29. import konquest.api.manager.KonquestGuildManager;
  30. import konquest.api.manager.KonquestKingdomManager;
  31. import konquest.api.model.KonquestKingdom;
  32. import konquest.api.model.KonquestTerritory;
  33. import konquest.api.model.KonquestTown;
  34. import lombok.AccessLevel;
  35. import lombok.NoArgsConstructor;
  36. import me.angeschossen.lands.api.LandsIntegration;
  37. import me.angeschossen.lands.api.land.Area;
  38. import me.angeschossen.lands.api.land.LandWorld;
  39. import me.angeschossen.lands.api.relations.Relation;
  40. import me.ulrich.clans.api.ClanAPIManager;
  41. import me.ulrich.clans.interfaces.UClans;
  42. import net.sacredlabyrinth.phaed.simpleclans.Clan;
  43. import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
  44. import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
  45. import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
  46. import org.bukkit.Bukkit;
  47. import org.bukkit.Location;
  48. import org.bukkit.OfflinePlayer;
  49. import org.bukkit.block.Block;
  50. import org.bukkit.entity.Player;
  51. import org.bukkit.plugin.Plugin;
  52. import org.bukkit.plugin.RegisteredServiceProvider;
  53. import org.kingdoms.constants.group.Kingdom;
  54. import org.kingdoms.constants.group.model.relationships.KingdomRelation;
  55. import org.kingdoms.constants.group.model.relationships.StandardRelationAttribute;
  56. import org.kingdoms.constants.land.Land;
  57. import org.kingdoms.constants.player.KingdomPlayer;
  58. import org.mineacademy.fo.Common;
  59. import org.mineacademy.fo.plugin.SimplePlugin;
  60.  
  61. import java.lang.reflect.Constructor;
  62.  
  63. @NoArgsConstructor(access = AccessLevel.PRIVATE)
  64. public class HookSystem {
  65.  
  66.     // ------------------------------------------------------------------------------------------------------------
  67.     // Store hook classes separately below, avoiding no such method/field errors
  68.     // ------------------------------------------------------------------------------------------------------------
  69.  
  70.     private static WorldGuardHook worldguardHook;
  71.  
  72.     private static TownyHook townyHook;
  73.  
  74.     private static KingdomsHook kingdomsHook;
  75.  
  76.     private static LandsHook landsHook;
  77.  
  78.     private static SimpleClansHook simpleClansHook;
  79.  
  80.     private static BetterTeamsHook betterTeamsHook;
  81.  
  82.     private static SaberFactionsHook saberFactionsHook;
  83.  
  84.     private static FactionsUUIDHook factionsUUIDHook;
  85.  
  86.     private static UltimateClansHook ultimateClansHook;
  87.  
  88.     private static KonquestHook konquestHook;
  89.  
  90.     private static MedievalFactionsHook medievalFactionsHook;
  91.  
  92.     private static ResidenceHook residenceHook;
  93.  
  94.     // ------------------------------------------------------------------------------------------------------------
  95.     // Main loading method
  96.     // ------------------------------------------------------------------------------------------------------------
  97.  
  98.     public static void loadDependencies() {
  99.         if (Common.doesPluginExist("WorldGuard"))
  100.             worldguardHook = new WorldGuardHook();
  101.  
  102.         if (Common.doesPluginExist("Towny"))
  103.             townyHook = new TownyHook();
  104.  
  105.         if (Common.doesPluginExist("KingdomsX"))
  106.             kingdomsHook = new KingdomsHook();
  107.  
  108.         if (Common.doesPluginExist("Lands"))
  109.             landsHook = new LandsHook();
  110.  
  111.         if (Common.doesPluginExist("SimpleClans"))
  112.             simpleClansHook = new SimpleClansHook();
  113.  
  114.         if (Common.doesPluginExist("BetterTeams"))
  115.             betterTeamsHook = new BetterTeamsHook();
  116.  
  117.         if (Common.doesPluginExist("SaberFactions"))
  118.             saberFactionsHook = new SaberFactionsHook();
  119.  
  120.         if (Common.doesPluginExist("Factions"))
  121.             factionsUUIDHook = new FactionsUUIDHook();
  122.  
  123.         if (Common.doesPluginExist("UltimateClans"))
  124.             ultimateClansHook = new UltimateClansHook();
  125.  
  126.         if (Common.doesPluginExist("Konquest"))
  127.             konquestHook = new KonquestHook();
  128.  
  129.         if (Common.doesPluginExist("MedievalFactions"))
  130.             medievalFactionsHook = new MedievalFactionsHook();
  131.  
  132.         if (Common.doesPluginExist("Residence"))
  133.             residenceHook = new ResidenceHook();
  134.     }
  135.  
  136.     // ------------------------------------------------------------------------------------------------------------
  137.     // Methods for determining which plugins were loaded after you call the load method
  138.     // ------------------------------------------------------------------------------------------------------------
  139.  
  140.     public static boolean isWorldGuardLoaded() {
  141.         return worldguardHook != null;
  142.     }
  143.  
  144.     public static boolean isTownyLoaded() {
  145.         return townyHook != null;
  146.     }
  147.  
  148.     public static boolean isKingdomsXLoaded() {
  149.         return kingdomsHook != null;
  150.     }
  151.  
  152.     public static boolean isLandsLoaded() {
  153.         return landsHook != null;
  154.     }
  155.  
  156.     public static boolean isSimpleClansLoaded() {
  157.         return simpleClansHook != null;
  158.     }
  159.  
  160.     public static boolean isBetterTeamsLoaded() {
  161.         return betterTeamsHook != null;
  162.     }
  163.  
  164.     public static boolean isSaberFactionsLoaded() {
  165.         return saberFactionsHook != null;
  166.     }
  167.  
  168.     public static boolean isFactionsUUIDLoaded() {
  169.         return factionsUUIDHook != null;
  170.     }
  171.  
  172.     public static boolean isUltimateClansLoaded() {
  173.         return ultimateClansHook != null;
  174.     }
  175.  
  176.     public static boolean isKonquestLoaded() {
  177.         return konquestHook != null;
  178.     }
  179.  
  180.     public static boolean isMedievalFactionsLoaded() {
  181.         return medievalFactionsHook != null;
  182.     }
  183.  
  184.     public static boolean isResidenceLoaded() {
  185.         return residenceHook != null;
  186.     }
  187.  
  188.  
  189.     public static boolean canBuild(final Location location, final Player player) {
  190.         return canBuildInRegion(location, player) || canBuildKonquest(location, player) || canBuildInResidence(location, player) || canBuildInMedievalFaction(location, player) || canPlaceInTown(location.getBlock(), player) || canPlaceInSaberFaction(location, player) || canPlaceInFaction(location, player) || canPlaceInLand(location, player) || canPlaceInKingdom(location, player);
  191.     }
  192.  
  193.     public static boolean isAlly(final Location location, final Player target, final OfflinePlayer turretOwner) {
  194.         return isTownAlly(location, target) || isKingdomAlly(location, target) || isLandAlly(location, target) || isClanAlly(turretOwner, target) || isTeamAlly(turretOwner, target) || isSaberFactionAlly(location, target) || isFactionAlly(location, target) || isUltimateClanAlly(turretOwner, target) || isMedievalFactionAlly(location, target) || isKonquestAlly(location, target) || isResidenceAlly(location, target);
  195.     }
  196.  
  197.     // ------------------------------------------------------------------------------------------------------------
  198.     // WorldGuard
  199.     // ------------------------------------------------------------------------------------------------------------
  200.  
  201.     public static boolean canBuildInRegion(final Location location, final Player player) {
  202.         return isWorldGuardLoaded() && worldguardHook.canBuildInRegion(location, player);
  203.     }
  204.  
  205.     // ------------------------------------------------------------------------------------------------------------
  206.     // Towny
  207.     // ------------------------------------------------------------------------------------------------------------
  208.  
  209.     public static boolean canPlaceInTown(final Block block, final Player player) {
  210.         return isTownyLoaded() && townyHook.canPlaceInTown(block, player);
  211.     }
  212.  
  213.     public static boolean isTownAlly(final Location location, final Player target) {
  214.         return isTownyLoaded() && townyHook.isTownAlly(location, target);
  215.     }
  216.  
  217.     // ------------------------------------------------------------------------------------------------------------
  218.     // KingdomsX
  219.     // ------------------------------------------------------------------------------------------------------------
  220.  
  221.     public static boolean canPlaceInKingdom(final Location location, final Player player) {
  222.         return isKingdomsXLoaded() && kingdomsHook.canPlaceInKingdom(location, player);
  223.     }
  224.  
  225.     public static boolean isKingdomAlly(final Location location, final Player target) {
  226.         return isKingdomsXLoaded() && kingdomsHook.isKingdomAlly(location, target);
  227.     }
  228.  
  229.     // ------------------------------------------------------------------------------------------------------------
  230.     // Lands
  231.     // ------------------------------------------------------------------------------------------------------------
  232.  
  233.     public static boolean canPlaceInLand(final Location location, final Player player) {
  234.         return isLandsLoaded() && landsHook.canPlaceInLand(player, location);
  235.     }
  236.  
  237.     public static boolean isLandAlly(final Location location, final Player target) {
  238.         return isLandsLoaded() && landsHook.isLandAlly(location, target);
  239.     }
  240.  
  241.     // ------------------------------------------------------------------------------------------------------------
  242.     // SimpleClans
  243.     // ------------------------------------------------------------------------------------------------------------
  244.  
  245.     public static boolean isClanAlly(final OfflinePlayer turretOwner, final OfflinePlayer target) {
  246.         return isSimpleClansLoaded() && simpleClansHook.isClanAlly(turretOwner, target);
  247.     }
  248.  
  249.     // ------------------------------------------------------------------------------------------------------------
  250.     // BetterTeams
  251.     // ------------------------------------------------------------------------------------------------------------
  252.  
  253.     public static boolean isTeamAlly(final OfflinePlayer turretOwner, final OfflinePlayer target) {
  254.         return isBetterTeamsLoaded() && betterTeamsHook.isTeamAlly(turretOwner, target);
  255.     }
  256.  
  257.     // ------------------------------------------------------------------------------------------------------------
  258.     // SaberFactions
  259.     // ------------------------------------------------------------------------------------------------------------
  260.  
  261.     public static boolean isSaberFactionAlly(final Location location, final OfflinePlayer target) {
  262.         return isSaberFactionsLoaded() && saberFactionsHook.isFactionAlly(location, target);
  263.     }
  264.  
  265.     public static boolean canPlaceInSaberFaction(final Location location, final Player player) {
  266.         return isSaberFactionsLoaded() && saberFactionsHook.canPlaceInFaction(location, player);
  267.     }
  268.  
  269.     // ------------------------------------------------------------------------------------------------------------
  270.     // FactionsUUID
  271.     // ------------------------------------------------------------------------------------------------------------
  272.  
  273.     public static boolean isFactionAlly(final Location location, final OfflinePlayer target) {
  274.         return isFactionsUUIDLoaded() && factionsUUIDHook.isFactionAlly(location, target);
  275.     }
  276.  
  277.     public static boolean canPlaceInFaction(final Location location, final Player player) {
  278.         return isFactionsUUIDLoaded() && factionsUUIDHook.canPlaceInFaction(location, player);
  279.     }
  280.  
  281.     // ------------------------------------------------------------------------------------------------------------
  282.     // UltimateClans
  283.     // ------------------------------------------------------------------------------------------------------------
  284.  
  285.     public static boolean isUltimateClanAlly(final OfflinePlayer turretOwner, final OfflinePlayer target) {
  286.         return isUltimateClansLoaded() && ultimateClansHook.isClanAlly(turretOwner, target);
  287.     }
  288.  
  289.     // ------------------------------------------------------------------------------------------------------------
  290.     // Medieval Factions
  291.     // ------------------------------------------------------------------------------------------------------------
  292.  
  293.     public static boolean isMedievalFactionAlly(final Location location, final OfflinePlayer target) {
  294.         return isMedievalFactionsLoaded() && medievalFactionsHook.isFactionAlly(location, target);
  295.     }
  296.  
  297.     public static boolean canBuildInMedievalFaction(final Location location, final Player player) {
  298.         return isMedievalFactionsLoaded() && medievalFactionsHook.canBuildInFaction(location, player);
  299.     }
  300.  
  301.     // ------------------------------------------------------------------------------------------------------------
  302.     // Konquest
  303.     // ------------------------------------------------------------------------------------------------------------
  304.  
  305.     public static boolean isKonquestAlly(final Location location, final OfflinePlayer target) {
  306.         return isKonquestLoaded() && konquestHook.isKonquestAlly(location, target);
  307.     }
  308.  
  309.     public static boolean canBuildKonquest(final Location location, final Player player) {
  310.         return isKonquestLoaded() && konquestHook.canBuildKonquest(location, player);
  311.     }
  312.  
  313.     // ------------------------------------------------------------------------------------------------------------
  314.     // Residence
  315.     // ------------------------------------------------------------------------------------------------------------
  316.  
  317.     public static boolean isResidenceAlly(final Location location, final Player target) {
  318.         return isResidenceLoaded() && residenceHook.isResidenceAlly(location, target);
  319.     }
  320.  
  321.     public static boolean canBuildInResidence(final Location location, final Player player) {
  322.         return isResidenceLoaded() && residenceHook.canPlaceInResidence(location, player);
  323.     }
  324. }
  325.  
  326. class WorldGuardHook {
  327.     public boolean canBuildInRegion(final Location location, final Player player) {
  328.         final LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
  329.         final com.sk89q.worldedit.util.Location location1 = BukkitAdapter.adapt(location);
  330.         final RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
  331.         final RegionQuery query = container.createQuery();
  332.         final World world = BukkitAdapter.adapt(player.getWorld());
  333.         final boolean canBypass = WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, world);
  334.  
  335.         if (canBypass)
  336.             return true;
  337.  
  338.         return query.testState(location1, localPlayer, Flags.BUILD);
  339.     }
  340. }
  341.  
  342. class TownyHook {
  343.     public boolean canPlaceInTown(final Block block, final Player player) {
  344.         return PlayerCacheUtil.getCachePermission(player, block.getLocation(), block.getType(), TownyPermission.ActionType.BUILD);
  345.     }
  346.  
  347.     public boolean isTownAlly(final Location townLocation, final Player target) {
  348.         final Town town = TownyAPI.getInstance().getTown(townLocation);
  349.         final Town targetTown = TownyAPI.getInstance().getTown(target);
  350.  
  351.         if (town != null && targetTown != null)
  352.             return town.hasAlly(targetTown);
  353.  
  354.         return false;
  355.     }
  356. }
  357.  
  358. class KingdomsHook {
  359.     public boolean canPlaceInKingdom(final Location location, final Player player) {
  360.         final Land land = Land.getLand(location);
  361.  
  362.         if (land != null) {
  363.             if (land.isClaimed()) {
  364.                 final Kingdom kingdom = land.getKingdom();
  365.                 final KingdomPlayer damagerKp = KingdomPlayer.getKingdomPlayer(player);
  366.                 final Kingdom damagerKingdom = damagerKp.getKingdom();
  367.  
  368.                 if (kingdom == null)
  369.                     return true;
  370.  
  371.                 return kingdom.hasAttribute(damagerKingdom, StandardRelationAttribute.BUILD);
  372.             }
  373.         }
  374.  
  375.         return true;
  376.     }
  377.  
  378.     public boolean isKingdomAlly(final Location location, final Player target) {
  379.         final org.kingdoms.constants.land.Land land = org.kingdoms.constants.land.Land.getLand(location);
  380.  
  381.         if (land == null)
  382.             return false;
  383.  
  384.         final Kingdom kingdom = land.getKingdom();
  385.         final KingdomPlayer kingdomEnemy = KingdomPlayer.getKingdomPlayer(target);
  386.         final Kingdom kingdom2 = kingdomEnemy.getKingdom();
  387.  
  388.         if (kingdom == null)
  389.             return false;
  390.  
  391.         return kingdom.getRelationWith(kingdom2) == KingdomRelation.ALLY;
  392.     }
  393. }
  394.  
  395. class LandsHook {
  396.     public boolean canPlaceInLand(final Player player, final Location location) {
  397.         final LandsIntegration api = LandsIntegration.of(SimplePlugin.getInstance());
  398.         final LandWorld world = api.getWorld(player.getWorld());
  399.  
  400.         if (world != null) // Lands is enabled in this world
  401.             return world.hasRoleFlag(player.getUniqueId(), location, me.angeschossen.lands.api.flags.type.Flags.BLOCK_PLACE);
  402.  
  403.         return true;
  404.     }
  405.  
  406.     public boolean isLandAlly(final Location landLocation, final Player target) {
  407.         final LandsIntegration api = LandsIntegration.of(SimplePlugin.getInstance());
  408.         final Area area = api.getArea(landLocation);
  409.  
  410.         if (area == null)
  411.             return false;
  412.  
  413.         final me.angeschossen.lands.api.land.Land land = area.getLand();
  414.         final Relation relation = land.getRelation(target.getUniqueId());
  415.  
  416.         return relation == Relation.ALLY;
  417.     }
  418. }
  419.  
  420. class SimpleClansHook {
  421.     public boolean isClanAlly(final OfflinePlayer turretOwner, final OfflinePlayer target) {
  422.         //final UUID playerUuid = player.getUniqueId();
  423.         final ClanManager cm = SimpleClans.getInstance().getClanManager();
  424.         // Get a ClanPlayer object
  425.         final ClanPlayer cp = cm.getClanPlayer(turretOwner);
  426.         final ClanPlayer clanEnemy = cm.getClanPlayer(target.getUniqueId());
  427.  
  428.         if (cp != null && clanEnemy != null) {
  429.             final Clan clan = cp.getClan();
  430.  
  431.             if (clan != null)
  432.                 return clan.isAlly(clanEnemy.getTag());
  433.         }
  434.  
  435.         return false;
  436.     }
  437. }
  438.  
  439. class BetterTeamsHook {
  440.     public boolean isTeamAlly(final OfflinePlayer turretOwner, final OfflinePlayer target) {
  441.         final Team team = Team.getTeamManager().getTeam(turretOwner);
  442.         final Team enemyTeam = Team.getTeamManager().getTeam(target);
  443.  
  444.         if (team == null || enemyTeam == null)
  445.             return false;
  446.  
  447.         return team.isAlly(enemyTeam.getID()) || team.getMembers().contains(target);
  448.     }
  449. }
  450.  
  451. class SaberFactionsHook {
  452.     public boolean canPlaceInFaction(final Location location, final Player player) {
  453.         try {
  454.             final Class<?> fPlayersClass = Class.forName("com.massivecraft.factions.FPlayers");
  455.             final Object fPlayersInstance = fPlayersClass.getMethod("getInstance").invoke(null);
  456.             final Object fPlayer = fPlayersClass.getMethod("getByPlayer", Player.class).invoke(fPlayersInstance, player);
  457.  
  458.             final Class<?> fLocationClass = Class.forName("com.massivecraft.factions.FLocation");
  459.             final Constructor<?> fLocationConstructor = fLocationClass.getConstructor(Location.class);
  460.             final Object fLocation = fLocationConstructor.newInstance(location);
  461.  
  462.             final Class<?> boardClass = Class.forName("com.massivecraft.factions.Board");
  463.             final Object boardInstance = boardClass.getMethod("getInstance").invoke(null);
  464.             final Object factionAtLocation = boardClass.getMethod("getFactionAt", fLocationClass).invoke(boardInstance, fLocation);
  465.  
  466.             final Class<?> relationClass = Class.forName("com.massivecraft.factions.struct.Relation");
  467.             final Object relation = fPlayer.getClass().getMethod("getRelationTo", factionAtLocation.getClass()).invoke(fPlayer, factionAtLocation);
  468.  
  469.             return relation == relationClass.getField("MEMBER").get(null);
  470.         } catch (final Exception e) {
  471.             e.printStackTrace();
  472.             return true;
  473.         }
  474.     }
  475.  
  476.     public boolean isFactionAlly(final Location location, final OfflinePlayer target) {
  477.         try {
  478.             final Class<?> fPlayersClass = Class.forName("com.massivecraft.factions.FPlayers");
  479.             final Object fPlayersInstance = fPlayersClass.getMethod("getInstance").invoke(null);
  480.             final Object fPlayer2 = fPlayersClass.getMethod("getByOfflinePlayer", OfflinePlayer.class).invoke(fPlayersInstance, target);
  481.  
  482.             final Class<?> fLocationClass = Class.forName("com.massivecraft.factions.FLocation");
  483.             final Constructor<?> fLocationConstructor = fLocationClass.getConstructor(Location.class);
  484.             final Object fLocation = fLocationConstructor.newInstance(location);
  485.  
  486.             final Class<?> boardClass = Class.forName("com.massivecraft.factions.Board");
  487.             final Object boardInstance = boardClass.getMethod("getInstance").invoke(null);
  488.             final Object factionAtLocation = boardClass.getMethod("getFactionAt", fLocationClass).invoke(boardInstance, fLocation);
  489.  
  490.             final Object factionTarget = fPlayer2.getClass().getMethod("getFaction").invoke(fPlayer2);
  491.  
  492.             final Class<?> relationClass = Class.forName("com.massivecraft.factions.struct.Relation");
  493.             final Object relation = factionAtLocation.getClass().getMethod("getRelationTo", factionTarget.getClass()).invoke(factionAtLocation, factionTarget);
  494.  
  495.             return relation == relationClass.getField("ALLY").get(null) ||
  496.                     relation == relationClass.getField("MEMBER").get(null) ||
  497.                     relation == relationClass.getField("TRUCE").get(null);
  498.         } catch (final Exception e) {
  499.             e.printStackTrace();
  500.             return false;
  501.         }
  502.     }
  503. }
  504.  
  505. class FactionsUUIDHook {
  506.     public boolean canPlaceInFaction(final Location location, final Player player) {
  507.         try {
  508.             final Class<?> fPlayersClass = Class.forName("com.massivecraft.factions.FPlayers");
  509.             final Object fPlayersInstance = fPlayersClass.getMethod("getInstance").invoke(null);
  510.             final Object fPlayer = fPlayersClass.getMethod("getByPlayer", Player.class).invoke(fPlayersInstance, player);
  511.  
  512.             final Class<?> fLocationClass = Class.forName("com.massivecraft.factions.FLocation");
  513.             final Constructor<?> fLocationConstructor = fLocationClass.getConstructor(Location.class);
  514.             final Object fLocation = fLocationConstructor.newInstance(location);
  515.  
  516.             final Class<?> boardClass = Class.forName("com.massivecraft.factions.Board");
  517.             final Object boardInstance = boardClass.getMethod("getInstance").invoke(null);
  518.             final Object factionAtLocation = boardClass.getMethod("getFactionAt", fLocationClass).invoke(boardInstance, fLocation);
  519.  
  520.             final Class<?> relationClass = Class.forName("com.massivecraft.factions.perms.Relation");
  521.             final Object relation = fPlayer.getClass().getMethod("getRelationTo", factionAtLocation.getClass()).invoke(fPlayer, factionAtLocation);
  522.  
  523.             return relation == relationClass.getField("MEMBER").get(null);
  524.         } catch (final Exception e) {
  525.             e.printStackTrace();
  526.             return true;
  527.         }
  528.     }
  529.  
  530.     public boolean isFactionAlly(final Location location, final OfflinePlayer target) {
  531.         try {
  532.             final Class<?> fPlayersClass = Class.forName("com.massivecraft.factions.FPlayers");
  533.             final Object fPlayersInstance = fPlayersClass.getMethod("getInstance").invoke(null);
  534.             final Object fPlayer2 = fPlayersClass.getMethod("getByOfflinePlayer", OfflinePlayer.class).invoke(fPlayersInstance, target);
  535.  
  536.             final Class<?> fLocationClass = Class.forName("com.massivecraft.factions.FLocation");
  537.             final Constructor<?> fLocationConstructor = fLocationClass.getConstructor(Location.class);
  538.             final Object fLocation = fLocationConstructor.newInstance(location);
  539.  
  540.             final Class<?> boardClass = Class.forName("com.massivecraft.factions.Board");
  541.             final Object boardInstance = boardClass.getMethod("getInstance").invoke(null);
  542.             final Object factionAtLocation = boardClass.getMethod("getFactionAt", fLocationClass).invoke(boardInstance, fLocation);
  543.  
  544.             final Object factionTarget = fPlayer2.getClass().getMethod("getFaction").invoke(fPlayer2);
  545.  
  546.             final Class<?> relationClass = Class.forName("com.massivecraft.factions.perms.Relation");
  547.             final Object relation = factionAtLocation.getClass().getMethod("getRelationTo", factionTarget.getClass()).invoke(factionAtLocation, factionTarget);
  548.  
  549.             return relation == relationClass.getField("ALLY").get(null) ||
  550.                     relation == relationClass.getField("MEMBER").get(null) ||
  551.                     relation == relationClass.getField("TRUCE").get(null);
  552.         } catch (final Exception e) {
  553.             e.printStackTrace();
  554.             return false;
  555.         }
  556.     }
  557. }
  558.  
  559. class UltimateClansHook {
  560.     public boolean isClanAlly(final OfflinePlayer turretOwner, final OfflinePlayer target) {
  561.         if (Bukkit.getPluginManager().isPluginEnabled("UltimateClans")) {
  562.             final UClans clan = (UClans) Bukkit.getPluginManager().getPlugin("UltimateClans");
  563.  
  564.             if (clan != null) {
  565.                 final ClanAPIManager manager = clan.getClanAPI();
  566.  
  567.                 return manager.isAlly(turretOwner.getUniqueId(), target.getUniqueId());
  568.             }
  569.         }
  570.  
  571.         return false;
  572.     }
  573. }
  574.  
  575. class MedievalFactionsHook {
  576.     public boolean canBuildInFaction(final Location location, final Player player) {
  577.         final Plugin medievalFactionsPlugin = Bukkit.getPluginManager().getPlugin("MedievalFactions");
  578.  
  579.         if (medievalFactionsPlugin instanceof MedievalFactions) {
  580.             final MedievalFactions medievalFactions = (MedievalFactions) medievalFactionsPlugin;
  581.             final Services services = medievalFactions.getServices();
  582.             final MfPlayerService playerService = services.getPlayerService();
  583.             final MfPlayer mfPlayer = playerService.getPlayerByBukkitPlayer(player);
  584.  
  585.             if (mfPlayer == null)
  586.                 return true;
  587.  
  588.             final MfClaimService claimService = services.getClaimService();
  589.             final MfClaimedChunk claimedChunk = claimService.getClaim(player.getWorld(), (int) location.getX(), (int) location.getZ());
  590.  
  591.             return claimService.isInteractionAllowedForPlayerInChunk(mfPlayer.getId(), claimedChunk);
  592.         }
  593.  
  594.         return true;
  595.     }
  596.  
  597.     public boolean isFactionAlly(final Location location, final OfflinePlayer target) {
  598.         final Plugin medievalFactionsPlugin = Bukkit.getPluginManager().getPlugin("MedievalFactions");
  599.  
  600.         if (medievalFactionsPlugin instanceof MedievalFactions) {
  601.             final MedievalFactions medievalFactions = (MedievalFactions) medievalFactionsPlugin;
  602.             final Services services = medievalFactions.getServices();
  603.             final MfPlayerService playerService = services.getPlayerService();
  604.             //final MfPlayer mfPlayer = playerService.getPlayerByBukkitPlayer(turretOwner);
  605.             final MfPlayer mfTarget = playerService.getPlayerByBukkitPlayer(target);
  606.             final MfClaimService claimService = services.getClaimService();
  607.             final org.bukkit.World world = location.getWorld();
  608.  
  609.             if (world == null)
  610.                 return false;
  611.  
  612.             final String factionId = claimService.getClaim(world, (int) location.getX(), (int) location.getZ()).getFactionId();
  613.  
  614.             if (factionId == null || mfTarget == null)
  615.                 return false;
  616.  
  617.             final MfFactionService factionService = services.getFactionService();
  618.             //final MfFaction faction = factionService.getFactionByFactionId(factionId); // getFactionByPlayerId(mfPlayer.getId());
  619.             final MfFaction targetFaction = factionService.getFactionByPlayerId(mfTarget.getId());
  620.             final MfFactionRelationshipService relationshipService = services.getFactionRelationshipService();
  621.  
  622.             return relationshipService.getAlliesByFactionId(factionId).contains(targetFaction.getId());
  623.         }
  624.  
  625.         return false;
  626.     }
  627. }
  628.  
  629. class KonquestHook {
  630.  
  631.     private final KonquestAPI konquestAPI;
  632.  
  633.     KonquestHook() {
  634.         final RegisteredServiceProvider<KonquestAPI> provider = Bukkit.getServicesManager().getRegistration(KonquestAPI.class);
  635.         this.konquestAPI = provider.getProvider();
  636.     }
  637.  
  638.     public boolean isKonquestAlly(final Location location, final OfflinePlayer target) {
  639.         final KonquestGuildManager guildManager = this.konquestAPI.getGuildManager();
  640.         final KonquestKingdomManager kingdomManager = this.konquestAPI.getKingdomManager();
  641.         final KonquestKingdom konquestKingdom = kingdomManager.getChunkTerritory(location).getKingdom();
  642.         final KonquestKingdom targetKingdom = guildManager.getPlayerGuild(target).getKingdom();
  643.  
  644.         return konquestKingdom.equals(targetKingdom);
  645.     }
  646.  
  647.     public boolean canBuildKonquest(final Location location, final Player player) {
  648.         final KonquestKingdomManager kingdomManager = this.konquestAPI.getKingdomManager();
  649.         final KonquestGuildManager guildManager = this.konquestAPI.getGuildManager();
  650.         final KonquestTerritory territory = kingdomManager.getChunkTerritory(location);
  651.  
  652.         if (territory == null)
  653.             return true;
  654.  
  655.         final KonquestKingdom konquestKingdom = kingdomManager.getChunkTerritory(location).getKingdom();
  656.         final KonquestKingdom targetKingdom = guildManager.getPlayerGuild(player).getKingdom();
  657.  
  658.  
  659.         if (konquestKingdom.equals(targetKingdom)) {
  660.             return this.konquestAPI.getPlotManager().isPlayerPlotProtectBuild(territory.getKingdom().getTown(""), location, player); // TODO get town
  661.         } else {
  662.             if (konquestKingdom.isOfflineProtected())
  663.                 return false;
  664.  
  665.             if (territory instanceof KonquestTown) {
  666.                 final KonquestTown town = (KonquestTown) territory;
  667.                 return !town.isTownWatchProtected();
  668.             }
  669.         }
  670.  
  671.         return true;
  672.     }
  673. }
  674.  
  675. class ResidenceHook {
  676.     public boolean isResidenceAlly(final Location location, final Player target) {
  677.         final ClaimedResidence residence = Residence.getInstance().getResidenceManager().getByLoc(location);
  678.  
  679.         if (residence != null)
  680.             return residence.isTrusted(target);
  681.  
  682.         return false;
  683.     }
  684.  
  685.     public boolean canPlaceInResidence(final Location location, final Player player) {
  686.         final ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player);
  687.  
  688.         return rPlayer.canPlaceBlock(location.getBlock(), true);
  689.     }
  690. }
  691.  
  692.  
  693.  
  694.  
  695.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement