From f8fbeec9df66cdec362ebce6a6c721577c7b361f Mon Sep 17 00:00:00 2001 From: Daniel Saukel Date: Thu, 7 Mar 2019 21:22:40 +0100 Subject: [PATCH] Add PlaceholderAPI integration --- pom.xml | 10 ++ .../de/erethon/dungeonsxl/DungeonsXL.java | 5 + .../dungeonsxl/player/DGamePlayer.java | 4 +- .../dungeonsxl/player/DGlobalPlayer.java | 7 ++ .../dungeonsxl/util/PlaceholderUtil.java | 98 +++++++++++++++++++ src/main/resources/plugin.yml | 2 +- 6 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 src/main/java/de/erethon/dungeonsxl/util/PlaceholderUtil.java diff --git a/pom.xml b/pom.xml index 0c86289b..7a84e801 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,12 @@ 2.1.2 provided + + me.clip + placeholderapi + 2.9.2 + provided + @@ -136,6 +142,10 @@ filoghost-repo https://ci.filoghost.me/plugin/repository/everything/ + + placeholderapi + http://repo.extendedclip.com/content/repositories/placeholderapi/ + dre-repo http://erethon.de/repo/ diff --git a/src/main/java/de/erethon/dungeonsxl/DungeonsXL.java b/src/main/java/de/erethon/dungeonsxl/DungeonsXL.java index 45ed214c..1821ea2c 100644 --- a/src/main/java/de/erethon/dungeonsxl/DungeonsXL.java +++ b/src/main/java/de/erethon/dungeonsxl/DungeonsXL.java @@ -47,12 +47,14 @@ import de.erethon.dungeonsxl.sign.DSignTypeCache; import de.erethon.dungeonsxl.sign.SignScriptCache; import de.erethon.dungeonsxl.trigger.TriggerListener; import de.erethon.dungeonsxl.trigger.TriggerTypeCache; +import de.erethon.dungeonsxl.util.PlaceholderUtil; import de.erethon.dungeonsxl.world.DWorldCache; import java.io.File; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; +import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; import org.bukkit.inventory.Inventory; @@ -122,6 +124,9 @@ public class DungeonsXL extends DREPlugin { createCaches(); initCaches(); loadData(); + if (manager.isPluginEnabled("PlaceholderAPI")) { + PlaceholderAPI.registerPlaceholderHook("dxl", new PlaceholderUtil(this, "dxl")); + } } @Override diff --git a/src/main/java/de/erethon/dungeonsxl/player/DGamePlayer.java b/src/main/java/de/erethon/dungeonsxl/player/DGamePlayer.java index 983ae019..6b3403ad 100644 --- a/src/main/java/de/erethon/dungeonsxl/player/DGamePlayer.java +++ b/src/main/java/de/erethon/dungeonsxl/player/DGamePlayer.java @@ -130,9 +130,7 @@ public class DGamePlayer extends DInstancePlayer { return name; } - /** - * @return the DGroup of this player - */ + @Override public DGroup getDGroup() { if (dGroup == null) { dGroup = DGroup.getByPlayer(player); diff --git a/src/main/java/de/erethon/dungeonsxl/player/DGlobalPlayer.java b/src/main/java/de/erethon/dungeonsxl/player/DGlobalPlayer.java index ff4ad17c..17486976 100644 --- a/src/main/java/de/erethon/dungeonsxl/player/DGlobalPlayer.java +++ b/src/main/java/de/erethon/dungeonsxl/player/DGlobalPlayer.java @@ -142,6 +142,13 @@ public class DGlobalPlayer implements PlayerWrapper { this.breakMode = breakMode; } + /** + * @return the DGroup of this player + */ + public DGroup getDGroup() { + return DGroup.getByPlayer(player); + } + /** * @return if the player is in group chat */ diff --git a/src/main/java/de/erethon/dungeonsxl/util/PlaceholderUtil.java b/src/main/java/de/erethon/dungeonsxl/util/PlaceholderUtil.java new file mode 100644 index 00000000..54b4af66 --- /dev/null +++ b/src/main/java/de/erethon/dungeonsxl/util/PlaceholderUtil.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2012-2019 Frank Baumann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package de.erethon.dungeonsxl.util; + +import de.erethon.dungeonsxl.DungeonsXL; +import de.erethon.dungeonsxl.game.Game; +import de.erethon.dungeonsxl.player.DGroup; +import de.erethon.dungeonsxl.player.DPlayerCache; +import de.erethon.dungeonsxl.world.DGameWorld; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; + +/** + * @author Daniel Saukel + */ +public class PlaceholderUtil extends PlaceholderExpansion { + + private DungeonsXL plugin; + private DPlayerCache dPlayers; + + private String identifier; + + public PlaceholderUtil(DungeonsXL plugin, String identifier) { + this.plugin = plugin; + dPlayers = plugin.getDPlayerCache(); + this.identifier = identifier; + } + + @Override + public String getAuthor() { + return plugin.getDescription().getAuthors().toString(); + } + + @Override + public String getIdentifier() { + return identifier; + } + + @Override + public String getRequiredPlugin() { + return plugin.getName(); + } + + @Override + public String getVersion() { + return plugin.getDescription().getVersion(); + } + + @Override + public String onPlaceholderRequest(Player player, String identifier) { + if (player == null) { + return ""; + } + DGroup group = dPlayers.getByPlayer(player).getDGroup(); + + switch (identifier) { + case "group_members": + return group != null ? group.getPlayers().getNames().toString().substring(1, group.getPlayers().getNames().toString().length() - 2) : ""; + case "group_name": + return group != null ? group.getName() : ""; + case "group_name_raw": + return group != null ? group.getRawName() : ""; + case "group_player_count": + return group != null ? String.valueOf(group.getPlayers().size()) : ""; + case "game_player_count": + Game game = Game.getByPlayer(player); + return game != null ? String.valueOf(game.getPlayers().size()) : ""; + case "floor_player_count": + DGameWorld gameWorld = group.getGameWorld(); + return gameWorld != null ? String.valueOf(gameWorld.getPlayers().size()) : ""; + case "dungeon_name": + return group != null ? group.getDungeonName() : ""; + case "global_dungeon_count": + return String.valueOf(plugin.getDungeonCache().getDungeons().size()); + case "global_floor_count": + return String.valueOf(plugin.getDWorldCache().getResources().size()); + case "global_instance_count": + return String.valueOf(plugin.getDWorldCache().getInstances().size()); + default: + return null; + } + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 12b47d05..efb69a65 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ version: ${project.version}${buildNo} authors: [Frank Baumann, Milan Albrecht, Tobias Schmitz, Daniel Saukel] description: ${project.description} website: ${project.url} -softdepend: [CommandsXL, ItemsXL, Vault, Citizens, CustomMobs, InsaneMobs, MythicMobs, HolographicDisplays, LWC] +softdepend: [CommandsXL, ItemsXL, Vault, Citizens, CustomMobs, InsaneMobs, MythicMobs, HolographicDisplays, LWC, PlaceholderAPI] commands: dungeonsxl: description: Reference command for DungeonsXL.