From 59e5269781497eede1e4aee2d12eaa895225660f Mon Sep 17 00:00:00 2001 From: SamB440 Date: Fri, 15 May 2020 17:13:29 +0100 Subject: [PATCH] Implements #13 --- rpgregions/build.gradle | 7 +++ .../integrations/hooks/PlanRegionHook.java | 50 +++++++++++++++++++ .../managers/PlanRegistryManager.java | 17 +++++++ .../managers/RPGRegionsManagers.java | 4 ++ src/main/resources/plugin.yml | 2 +- 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlanRegionHook.java create mode 100644 rpgregions/src/main/java/net/islandearth/rpgregions/managers/PlanRegistryManager.java diff --git a/rpgregions/build.gradle b/rpgregions/build.gradle index a68379e..0d537c4 100644 --- a/rpgregions/build.gradle +++ b/rpgregions/build.gradle @@ -39,6 +39,12 @@ repositories { maven { url = 'https://campfire.islandearth.net/maven/' } + + // plan + maven { + name = 'bintray' + url = 'https://dl.bintray.com/rsl1122/Plan-repository' + } } dependencies { @@ -48,6 +54,7 @@ dependencies { compileOnly 'me.clip:placeholderapi:2.10.4' // PAPI compileOnly 'net.islandearth:languagy:2.0.0-SNAPSHOT' // languagy compileOnly 'com.github.shynixn.headdatabase:hdb-api:1.0' // head database + compileOnly 'com.djrapitops:Plan-api:5.1-R0.4' // plan implementation 'co.aikar:acf-paper:0.5.0-SNAPSHOT' // commands implementation 'co.aikar:idb-core:1.0.0-SNAPSHOT' // database diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlanRegionHook.java b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlanRegionHook.java new file mode 100644 index 0000000..c9e3dbf --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlanRegionHook.java @@ -0,0 +1,50 @@ +package net.islandearth.rpgregions.api.integrations.hooks; + +import com.djrapitops.plan.extension.CallEvents; +import com.djrapitops.plan.extension.DataExtension; +import com.djrapitops.plan.extension.FormatType; +import com.djrapitops.plan.extension.annotation.NumberProvider; +import com.djrapitops.plan.extension.annotation.PluginInfo; +import com.djrapitops.plan.extension.icon.Color; +import com.djrapitops.plan.extension.icon.Family; +import net.islandearth.rpgregions.RPGRegions; +import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount; + +import java.util.UUID; +import java.util.concurrent.ExecutionException; + +@PluginInfo(name = "RPGRegions", iconName = "map", iconFamily = Family.SOLID, color = Color.BLUE) +public class PlanRegionHook implements DataExtension { + + private final RPGRegions plugin; + + public PlanRegionHook(RPGRegions plugin) { + this.plugin = plugin; + } + + @NumberProvider( + text = "Regions discovered", + description = "How many regions the player has discovered", + priority = 4, + iconFamily = Family.SOLID, + iconColor = Color.NONE, + format = FormatType.NONE + ) + public long regionCount(UUID playerUUID) { + try { + // Have to do blocking operation :( + RPGRegionsAccount account = plugin.getManagers().getStorageManager().getAccount(playerUUID).get(); + return account.getDiscoveredRegions().size(); + } catch (InterruptedException | ExecutionException ignored) { } + return 0; + } + + @Override + public CallEvents[] callExtensionMethodsOn() { + return new CallEvents[]{ + CallEvents.PLAYER_JOIN, + CallEvents.PLAYER_LEAVE, + CallEvents.SERVER_EXTENSION_REGISTER + }; + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/PlanRegistryManager.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/PlanRegistryManager.java new file mode 100644 index 0000000..e79deaf --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/PlanRegistryManager.java @@ -0,0 +1,17 @@ +package net.islandearth.rpgregions.managers; + +import com.djrapitops.plan.extension.ExtensionService; +import net.islandearth.rpgregions.RPGRegions; +import net.islandearth.rpgregions.api.integrations.hooks.PlanRegionHook; + +public class PlanRegistryManager { + + public PlanRegistryManager(RPGRegions plugin) { + try { + PlanRegionHook planRegionHook = new PlanRegionHook(plugin); + ExtensionService.getInstance().register(planRegionHook); + } catch (NoClassDefFoundError | IllegalStateException | IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java index d25b3fc..25c0415 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java @@ -107,6 +107,10 @@ public class RPGRegionsManagers { if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { new PlaceholderRegionHook(plugin).register(); } + + if (Bukkit.getPluginManager().getPlugin("Plan") != null) { + new PlanRegistryManager(plugin); + } } public StorageManager getStorageManager() { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8305946..79b6652 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ version: @version@ main: net.islandearth.rpgregions.RPGRegions api-version: '1.13' depend: [Languagy] -softdepend: [WorldGuard, PlaceholderAPI, HeadDatabase, Residence] +softdepend: [WorldGuard, PlaceholderAPI, HeadDatabase, Residence, Plan, GriefPrevention] authors: [SamB440] description: Discoverable regions website: https://fortitude.islandearth.net