From 3bf835a492d6f21af1abb2c86ec926bef3531cb5 Mon Sep 17 00:00:00 2001 From: Matthew Sanders Date: Thu, 27 Aug 2020 16:23:37 -0400 Subject: [PATCH 1/2] Added calculators for Towny (based on WG region code) --- pom.xml | 10 ++++ .../extracontexts/ExtraContextsPlugin.java | 6 ++ .../calculators/TownyNationCalculator.java | 57 +++++++++++++++++++ .../calculators/TownyTownCalculator.java | 47 +++++++++++++++ .../calculators/TownyWildsCalculator.java | 27 +++++++++ src/main/resources/config.yml | 17 ++++++ src/main/resources/plugin.yml | 2 +- 7 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/lucko/extracontexts/calculators/TownyNationCalculator.java create mode 100644 src/main/java/me/lucko/extracontexts/calculators/TownyTownCalculator.java create mode 100644 src/main/java/me/lucko/extracontexts/calculators/TownyWildsCalculator.java diff --git a/pom.xml b/pom.xml index 2b810f6..780d0d0 100644 --- a/pom.xml +++ b/pom.xml @@ -108,6 +108,12 @@ 2.9.2 provided + + com.github.TownyAdvanced + Towny + 0.96.2.0 + provided + @@ -115,6 +121,10 @@ luck-repo https://repo.lucko.me/ + + jitpack.io + https://jitpack.io + \ No newline at end of file diff --git a/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java b/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java index fd905df..3d55f93 100644 --- a/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java +++ b/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java @@ -5,6 +5,9 @@ import me.lucko.extracontexts.calculators.HasPlayedBeforeCalculator; import me.lucko.extracontexts.calculators.PlaceholderApiCalculator; import me.lucko.extracontexts.calculators.TeamCalculator; +import me.lucko.extracontexts.calculators.TownyNationCalculator; +import me.lucko.extracontexts.calculators.TownyTownCalculator; +import me.lucko.extracontexts.calculators.TownyWildsCalculator; import me.lucko.extracontexts.calculators.WhitelistedCalculator; import me.lucko.extracontexts.calculators.WorldGuardFlagCalculator; import me.lucko.extracontexts.calculators.WorldGuardRegionCalculator; @@ -55,6 +58,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } private void setup() { + register("towny-town", "Towny", TownyTownCalculator::new); + register("towny-nation", "Towny", TownyNationCalculator::new); + register("towny-wilds", "Towny", TownyWildsCalculator::new); register("worldguard-region", "WorldGuard", WorldGuardRegionCalculator::new); register("worldguard-flag", "WorldGuard", WorldGuardFlagCalculator::new); register("gamemode", null, GamemodeCalculator::new); diff --git a/src/main/java/me/lucko/extracontexts/calculators/TownyNationCalculator.java b/src/main/java/me/lucko/extracontexts/calculators/TownyNationCalculator.java new file mode 100644 index 0000000..4440463 --- /dev/null +++ b/src/main/java/me/lucko/extracontexts/calculators/TownyNationCalculator.java @@ -0,0 +1,57 @@ +package me.lucko.extracontexts.calculators; + +import com.palmergames.bukkit.towny.TownyAPI; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownBlock; +import net.luckperms.api.context.ContextCalculator; +import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; +import net.luckperms.api.context.ImmutableContextSet; +import org.bukkit.entity.Player; + +public class TownyNationCalculator implements ContextCalculator { + private static final String IN_NATION_KEY = "towny:in-nation"; + private static final String NATION_KEY = "towny:nation"; + + private final TownyAPI towny = TownyAPI.getInstance(); + + @Override + public void calculate(Player player, ContextConsumer contextConsumer) { + final TownBlock townBlock = towny.getTownBlock(player.getLocation()); + if (townBlock == null) { + contextConsumer.accept(IN_NATION_KEY, "false"); + } else { + if (townBlock.hasTown()) { + try { + final Town town = townBlock.getTown(); + if (town.hasNation()) { + contextConsumer.accept(IN_NATION_KEY, "true"); + try { + contextConsumer.accept(NATION_KEY, town.getNation().getName()); + } catch (NotRegisteredException e) { + e.printStackTrace(); + } + } else { + contextConsumer.accept(IN_NATION_KEY, "false"); + } + } catch (NotRegisteredException e) { + e.printStackTrace(); + } + } else { + contextConsumer.accept(IN_NATION_KEY, "false"); + } + } + } + + @Override + public ContextSet estimatePotentialContexts() { + final ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (String nationKey : towny.getDataSource().getNationsKeys()) { + builder.add(NATION_KEY, nationKey); + } + builder.add(IN_NATION_KEY, "true"); + builder.add(IN_NATION_KEY, "false"); + return builder.build(); + } +} diff --git a/src/main/java/me/lucko/extracontexts/calculators/TownyTownCalculator.java b/src/main/java/me/lucko/extracontexts/calculators/TownyTownCalculator.java new file mode 100644 index 0000000..2321e59 --- /dev/null +++ b/src/main/java/me/lucko/extracontexts/calculators/TownyTownCalculator.java @@ -0,0 +1,47 @@ +package me.lucko.extracontexts.calculators; + +import com.palmergames.bukkit.towny.TownyAPI; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.TownBlock; +import net.luckperms.api.context.ContextCalculator; +import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; +import net.luckperms.api.context.ImmutableContextSet; +import org.bukkit.entity.Player; + +public class TownyTownCalculator implements ContextCalculator { + private static final String IN_TOWN_KEY = "towny:in-town"; + private static final String TOWN_KEY = "towny:town"; + + private final TownyAPI towny = TownyAPI.getInstance(); + + @Override + public void calculate(Player player, ContextConsumer contextConsumer) { + final TownBlock townBlock = towny.getTownBlock(player.getLocation()); + if (townBlock == null) { + contextConsumer.accept(IN_TOWN_KEY, "false"); + } else { + if (townBlock.hasTown()) { + contextConsumer.accept(IN_TOWN_KEY, "true"); + try { + contextConsumer.accept(TOWN_KEY, townBlock.getTown().getName()); + } catch (NotRegisteredException e) { + e.printStackTrace(); + } + } else { + contextConsumer.accept(IN_TOWN_KEY, "false"); + } + } + } + + @Override + public ContextSet estimatePotentialContexts() { + final ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (String townKey : towny.getDataSource().getTownsKeys()) { + builder.add(TOWN_KEY, townKey); + } + builder.add(IN_TOWN_KEY, "true"); + builder.add(IN_TOWN_KEY, "false"); + return builder.build(); + } +} diff --git a/src/main/java/me/lucko/extracontexts/calculators/TownyWildsCalculator.java b/src/main/java/me/lucko/extracontexts/calculators/TownyWildsCalculator.java new file mode 100644 index 0000000..6d5d58c --- /dev/null +++ b/src/main/java/me/lucko/extracontexts/calculators/TownyWildsCalculator.java @@ -0,0 +1,27 @@ +package me.lucko.extracontexts.calculators; + +import com.palmergames.bukkit.towny.TownyAPI; +import net.luckperms.api.context.ContextCalculator; +import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; +import net.luckperms.api.context.ImmutableContextSet; +import org.bukkit.entity.Player; + +public class TownyWildsCalculator implements ContextCalculator { + private static final String IN_WILDS_KEY = "towny:in-wilds"; + + private final TownyAPI towny = TownyAPI.getInstance(); + + @Override + public void calculate(Player player, ContextConsumer contextConsumer) { + contextConsumer.accept(IN_WILDS_KEY, towny.isWilderness(player.getLocation()) ? "true" : "false"); + } + + @Override + public ContextSet estimatePotentialContexts() { + final ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + builder.add(IN_WILDS_KEY, "true"); + builder.add(IN_WILDS_KEY, "false"); + return builder.build(); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e937259..c5113bd 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -52,3 +52,20 @@ has-played-before: false placeholderapi: false placeholderapi-placeholders: allowflight: "%player_allow_flight%" + +### Addition: Towny Contexts +# Provides the 'towny:town' and 'towny:in-town' contexts. +# Returns the name of the Town the player is currently in. +# +# e.g. towny:in-town=true and towny:town=townName +towny-town: false +# Provides the 'towny:town' and 'towny:in-nation' contexts. +# Returns the name of the Nation the player is currently in. +# +# e.g. towny:in-nation=true and towny:nation=nationName +towny-nation: false +# Provides the 'towny:in-wilds' context. +# Returns if the player is currently in the wilderness. +# +# e.g. towny:in-wilds=true +towny-wilds: false diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f7a56a5..9414c0b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ version: ${project.version} author: Luck main: me.lucko.extracontexts.ExtraContextsPlugin depend: [LuckPerms] -softdepend: [WorldGuard, PlaceholderAPI] +softdepend: [WorldGuard, PlaceholderAPI, Towny] api-version: 1.13 commands: From 97f11954f943febb2b257be9e5c12697af1a6387 Mon Sep 17 00:00:00 2001 From: Matthew Sanders Date: Thu, 27 Aug 2020 16:58:21 -0400 Subject: [PATCH 2/2] Added calculators for Towny to README.md --- README.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f2c6a0..8d1edf6 100644 --- a/README.md +++ b/README.md @@ -56,4 +56,56 @@ placeholderapi-placeholders: > allowflight=true -___ \ No newline at end of file +___ +#### TownyAdvanced +#### `towny:in-town` +Returns true if player's location within a Town + +e.g. + +> towny:in-town=false + +#### `towny:town` +Returns name of the town (if any) at a player's current location + +e.g. + +> towny:town= +> +> towny:town=Atlantis + +**config:** +```yaml +towny-town: true +``` + +#### `towny:in-nation` +Returns true if player's location within a Nation + +e.g. + +> towny:in-nation=true + +#### `towny:town` +Returns name of the nation (if any) at a player's current location + +e.g. + +> towny:nation=Rome + +**config:** +```yaml +towny-nation: true +``` + +#### `towny:in-wilds` +Returns true if player's location in the wilderness + +e.g. + +> towny:in-wilds=false + +**config:** +```yaml +towny-wilds: true +``` \ No newline at end of file