Jelajahi Sumber

Adding PAPI Placeholders about MissileWars

RedstoneFuture 2 tahun lalu
induk
melakukan
7f10640959

+ 6 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/MissileWars.java

@@ -28,6 +28,7 @@ import de.butzlabben.missilewars.listener.PlayerListener;
 import de.butzlabben.missilewars.listener.signs.ClickListener;
 import de.butzlabben.missilewars.listener.signs.ClickListener;
 import de.butzlabben.missilewars.listener.signs.ManageListener;
 import de.butzlabben.missilewars.listener.signs.ManageListener;
 import de.butzlabben.missilewars.util.ConnectionHolder;
 import de.butzlabben.missilewars.util.ConnectionHolder;
+import de.butzlabben.missilewars.util.MissileWarsPlaceholder;
 import de.butzlabben.missilewars.util.MoneyUtil;
 import de.butzlabben.missilewars.util.MoneyUtil;
 import de.butzlabben.missilewars.util.SetupUtil;
 import de.butzlabben.missilewars.util.SetupUtil;
 import de.butzlabben.missilewars.util.stats.PreFetcher;
 import de.butzlabben.missilewars.util.stats.PreFetcher;
@@ -120,6 +121,11 @@ public class MissileWars extends JavaPlugin {
             PreFetcher.preFetchPlayers(new StatsFetcher(new Date(0L), ""));
             PreFetcher.preFetchPlayers(new StatsFetcher(new Date(0L), ""));
         }
         }
 
 
+        // Small check to make sure that PlaceholderAPI is installed
+        if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
+            new MissileWarsPlaceholder(this).register();
+        }
+
         endTime = System.currentTimeMillis();
         endTime = System.currentTimeMillis();
         Logger.SUCCESS.log("MissileWars was enabled in " + (endTime - startTime) + "ms");
         Logger.SUCCESS.log("MissileWars was enabled in " + (endTime - startTime) + "ms");
     }
     }

+ 101 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/util/MissileWarsPlaceholder.java

@@ -0,0 +1,101 @@
+/*
+ * This file is part of MissileWars (https://github.com/Butzlabben/missilewars).
+ * Copyright (c) 2018-2021 Daniel Nägele.
+ *
+ * MissileWars 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.
+ *
+ * MissileWars 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 MissileWars.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package de.butzlabben.missilewars.util;
+
+import de.butzlabben.missilewars.MissileWars;
+import de.butzlabben.missilewars.game.Game;
+import de.butzlabben.missilewars.game.GameManager;
+import de.butzlabben.missilewars.wrapper.abstracts.Arena;
+import de.butzlabben.missilewars.wrapper.abstracts.Lobby;
+import me.clip.placeholderapi.expansion.PlaceholderExpansion;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.entity.Player;
+
+public class MissileWarsPlaceholder extends PlaceholderExpansion {
+
+    private final MissileWars plugin;
+
+    public MissileWarsPlaceholder(MissileWars plugin) {
+        this.plugin = plugin;
+    }
+
+    @Override
+    public String getAuthor() {
+        return "Daniel Nägele";
+    }
+
+    @Override
+    public String getIdentifier() {
+        return "missilewars";
+    }
+
+    @Override
+    public String getVersion() {
+        return "0.0.1";
+    }
+
+    // This is required or else PlaceholderAPI will unregister the Expansion on reload
+    @Override
+    public boolean persist() {
+        return true;
+    }
+
+    @Override
+    public String onRequest(OfflinePlayer offlinePlayer, String params) {
+
+        if (params.endsWith("_this")) {
+            if (!offlinePlayer.isOnline()) return "ERROR: No a player!";
+
+            Player player = offlinePlayer.getPlayer();
+            Game playerGame = GameManager.getInstance().getGame(player.getLocation());
+            if (playerGame == null) return "ERROR: Wrong world!";
+
+            if (params.startsWith("lobby_")) params.replace("_this", playerGame.getLobby().getName());
+            if (params.startsWith("arena_")) params.replace("_this", playerGame.getArena().getName());
+        }
+
+
+        for (Game game : GameManager.getInstance().getGames().values()) {
+            Lobby lobby = game.getLobby();
+
+            for (Arena arena : lobby.getArenas()) {
+
+                // %missilewars_lobby_displayname_<lobby name or 'this'>%
+                if (params.equalsIgnoreCase("lobby_displayname_" + lobby.getName())){
+                    return lobby.getDisplayName();
+                }
+
+                // %missilewars_arena_displayname_<arena name or 'this'>%
+                if (params.equalsIgnoreCase("arena_displayname_" + arena.getName())) {
+                    return arena.getDisplayName();
+                }
+
+                // %missilewars_arena_missileamount_<arena name or 'this'>%
+                if (params.equalsIgnoreCase("arena_missileamount_" + arena.getName())) {
+                    return Integer.toString(arena.getMissileConfiguration().getMissiles().size());
+                }
+
+            }
+        }
+
+        // Placeholder is unknown by the Expansion
+        return null;
+    }
+
+}

+ 1 - 1
missilewars-plugin/src/main/resources-filtered/plugin.yml

@@ -4,7 +4,7 @@ version: ${project.version}
 main: de.butzlabben.missilewars.MissileWars
 main: de.butzlabben.missilewars.MissileWars
 api-version: 1.13
 api-version: 1.13
 depend: [ WorldEdit ]
 depend: [ WorldEdit ]
-softdepend: [ Vault, FastAsyncWorldEdit ]
+softdepend: [ Vault, FastAsyncWorldEdit, PlaceholderAPI ]
 
 
 permissions:
 permissions:
   mw.*:
   mw.*:

+ 12 - 0
pom.xml

@@ -66,6 +66,10 @@
             <url>https://libraries.minecraft.net/</url>
             <url>https://libraries.minecraft.net/</url>
         </repository>
         </repository>
 
 
+        <repository>
+            <id>placeholderapi</id>
+            <url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
+        </repository>
     </repositories>
     </repositories>
 
 
     <dependencies>
     <dependencies>
@@ -122,6 +126,14 @@
             <version>1.5.21</version>
             <version>1.5.21</version>
             <scope>provided</scope>
             <scope>provided</scope>
         </dependency>
         </dependency>
+
+        <!-- repo placeholderapi -->
+        <dependency>
+            <groupId>me.clip</groupId>
+            <artifactId>placeholderapi</artifactId>
+            <version>2.11.2</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>