فهرست منبع

Merge pull request #26 from RedstoneFuture/Improvements/AddMissileItemPlaceholder

Improvements/add missile item placeholder
Daniel 2 سال پیش
والد
کامیت
bc5f57a4c0

+ 25 - 6
missilewars-plugin/src/main/java/de/butzlabben/missilewars/cmd/MWCommands.java

@@ -91,12 +91,9 @@ public class MWCommands extends BaseCommand {
             player.sendMessage(MessageConfig.getMessage("not_in_arena"));
             return;
         }
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < args.length; i++) {
-            sb.append(args[i].replaceAll("&.", ""));
-            sb.append(" ");
-        }
-        Missile m = game.getArena().getMissileConfiguration().getMissileFromName(sb.toString().trim());
+
+        String arguments = getAllNextArgumentsAsString(args, false);
+        Missile m = game.getArena().getMissileConfiguration().getMissileFromName(arguments.trim());
         if (m == null) {
             player.sendMessage(MessageConfig.getPrefix() + "§cUnknown missile");
             return;
@@ -253,4 +250,26 @@ public class MWCommands extends BaseCommand {
         sender.sendMessage(MessageConfig.getPrefix() + "§cYou are not a player");
         return false;
     }
+
+    /**
+     * This method returns all next command arguments as one String line.
+     * Separated with a " " between the arguments. It also removes all
+     * unnecessary "&" signs.
+     *
+     * @param args Argument Array
+     * @return (String) all next arguments
+     */
+    private String getAllNextArgumentsAsString(CommandArgs args, boolean filterColorCode) {
+        StringBuilder sb = new StringBuilder();
+        String arguments;
+
+        for (int i = 0; i < args.length(); i++) {
+            sb.append(" ");
+        }
+        arguments = sb.toString();
+
+        if (filterColorCode) arguments.replaceAll("&.", "");
+
+        return arguments;
+    }
 }

+ 4 - 4
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/abstracts/arena/MissileConfiguration.java

@@ -70,9 +70,9 @@ public class MissileConfiguration {
     }
 
     public Missile getMissileFromName(String name) {
-        for (Missile m : missiles) {
-            if (m.getName().equalsIgnoreCase(name) || m.getName().replaceAll("§.", "").equalsIgnoreCase(name))
-                return m;
+        String filteredName = name.replaceAll("§.", "");
+        for (Missile missile : missiles) {
+            if (missile.getSchematicName(false).equalsIgnoreCase(filteredName)) return missile;
         }
         return null;
     }
@@ -82,7 +82,7 @@ public class MissileConfiguration {
         for (Missile missile : missiles) {
             File schematic = missile.getSchematic();
             if (!schematic.exists()) {
-                Logger.WARN.log(missile.getName() + " §7has no schematic. Removing this missile");
+                Logger.WARN.log(missile.getDisplayName() + " §7has no schematic. Removing this missile");
                 toRemove.add(missile);
             }
         }

+ 19 - 4
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/missile/Missile.java

@@ -45,7 +45,7 @@ import java.io.File;
 public class Missile {
 
     private final String schematic;
-    @Getter private final String name;
+    private final String displayName;
     private final EntityType egg;
     private final int down;
     private final int dist;
@@ -77,17 +77,32 @@ public class Missile {
             PasteProvider.getPaster().pasteMissile(getSchematic(), pastePos, rotation, loc.getWorld(),
                     game.getPlayer(p).getTeam());
         } catch (Exception e) {
-            Logger.ERROR.log("Could not load " + name);
+            Logger.ERROR.log("Could not load " + displayName);
             e.printStackTrace();
         }
     }
 
     public File getSchematic() {
         File pluginDir = MissileWars.getInstance().getDataFolder();
-        File file = new File(pluginDir, "missiles/" + schematic);
+        File file = new File(pluginDir, "missiles/" + getSchematicName(false));
         return file;
     }
 
+    public String getSchematicName(boolean withoutExtension) {
+        if (withoutExtension) {
+            return schematic.replace(".schematic", "")
+                    .replace(".schem", "");
+        }
+        return schematic;
+    }
+
+    public String getDisplayName() {
+        String name = displayName;
+        name = name.replace("%schematic_name%", getSchematicName(false))
+                .replace("%schematic_name_compact%", getSchematicName(true));
+        return name;
+    }
+
     public EntityType getType() {
         return egg;
     }
@@ -112,7 +127,7 @@ public class Missile {
             is.setAmount(1);
         }
         ItemMeta im = is.getItemMeta();
-        im.setDisplayName(name);
+        im.setDisplayName(getDisplayName());
         is.setItemMeta(im);
         return is;
     }