Bläddra i källkod

Improving Paste-Command: adding flag-arguments (config override) and info-messages

RedstoneFuture 9 månader sedan
förälder
incheckning
4c71cdbf05

+ 5 - 5
FAWE_Paster/src/main/java/de/butzlabben/missilewars/missile/paste/v1_20/fawe/FAWE_Paster.java

@@ -44,8 +44,8 @@ import java.util.logging.Level;
  */
 public class FAWE_Paster {
 
-    public void pasteMissile(File schematic, Vector locationVec, int rotation, org.bukkit.World world, Material glassBlockReplace, 
-                             int replaceRadius, Material replaceMaterial, int replaceTicks, JavaPlugin plugin, boolean blockUpdate) {
+    public void pasteMissile(File schematic, Vector locationVec, int rotation, org.bukkit.World world, boolean blockUpdate, 
+                             Material replaceMaterial, int replaceTicks, int replaceRadius, JavaPlugin plugin) {
         
         pasteSchematic(schematic, locationVec, rotation, world, plugin);
         
@@ -54,7 +54,7 @@ public class FAWE_Paster {
         new BukkitRunnable() {
             @Override
             public void run() {
-                removeTempBlock(locationVec, world, replaceRadius, replaceMaterial);
+                removeTempBlock(locationVec, world, replaceMaterial, replaceRadius);
             }
         }.runTaskLater(plugin, replaceTicks);
     }
@@ -99,10 +99,10 @@ public class FAWE_Paster {
      * 
      * @param locationVec (Vector) the abstract block location
      * @param world (World) the target world for the WorldEdit action
-     * @param replaceRadius (int) the configured "Replace radius" (is calculated as a half-diagonal block line here)
      * @param replaceMaterial (Material) the target material for the replacement
+     * @param replaceRadius (int) the configured "Replace radius" (is calculated as a half-diagonal block line here)
      */
-    public void removeTempBlock(Vector locationVec, org.bukkit.World world, int replaceRadius, Material replaceMaterial) {
+    public void removeTempBlock(Vector locationVec, org.bukkit.World world, Material replaceMaterial, int replaceRadius) {
         int startX = locationVec.getBlockX() - replaceRadius;
         int endX = locationVec.getBlockX() + replaceRadius;
         int startY = locationVec.getBlockY() - replaceRadius;

+ 19 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/commands/MWCommandCompletions.java

@@ -22,6 +22,7 @@ import co.aikar.commands.BukkitCommandCompletionContext;
 import co.aikar.commands.CommandCompletions;
 import co.aikar.commands.PaperCommandManager;
 import com.google.common.collect.ImmutableList;
+import de.butzlabben.missilewars.configuration.Config;
 import de.butzlabben.missilewars.game.Game;
 import de.butzlabben.missilewars.game.GameManager;
 import org.bukkit.command.CommandSender;
@@ -36,6 +37,7 @@ public class MWCommandCompletions {
 
         registerGamesResult();
         registerMissilesResult();
+        registerMissileFlagsResult();
         registerArenasResult();
         registerTeamsResult();
         registerGamePlayerResult();
@@ -58,6 +60,23 @@ public class MWCommandCompletions {
             return game.getArena().getMissileConfiguration().getSchematicNames();
         });
     }
+    
+    private void registerMissileFlagsResult() {
+        commandCompletions.registerCompletion("missile-flags", c -> {
+            CommandSender sender = c.getSender();
+
+            if (!(sender instanceof Player)) return null;
+            Player player = (Player) sender;
+
+            Game game = GameManager.getInstance().getGame(player.getLocation());
+            if (game == null) return null;
+            
+            return ImmutableList.of("-tempblock:" + Config.isTempBlockEnabled(), 
+                    "-tempblock_material:" + Config.getTempBlockMaterial(), 
+                    "-tempblock_delay:" + Config.getUpdateDelay(), 
+                    "-tempblock_radius:" + Config.getUpdateRadius());
+        });
+    }
 
     private void registerArenasResult() {
         commandCompletions.registerCompletion("arenas", c -> {

+ 38 - 6
missilewars-plugin/src/main/java/de/butzlabben/missilewars/commands/MWCommands.java

@@ -29,10 +29,11 @@ import de.butzlabben.missilewars.game.enums.GameResult;
 import de.butzlabben.missilewars.game.enums.GameState;
 import de.butzlabben.missilewars.game.enums.TeamType;
 import de.butzlabben.missilewars.game.enums.VoteState;
-import de.butzlabben.missilewars.game.schematics.SchematicFacing;
 import de.butzlabben.missilewars.game.schematics.objects.Missile;
 import de.butzlabben.missilewars.game.timer.LobbyTimer;
 import de.butzlabben.missilewars.player.MWPlayer;
+import de.butzlabben.missilewars.util.MaterialUtil;
+import org.bukkit.Material;
 import org.bukkit.command.CommandSender;
 import org.bukkit.entity.Player;
 
@@ -212,7 +213,7 @@ public class MWCommands extends BaseCommand {
     }
 
     @Subcommand("paste")
-    @CommandCompletion("@missiles @nothing")
+    @CommandCompletion("@missiles @missile-flags @missile-flags @missile-flags @missile-flags @nothing")
     @CommandPermission("mw.paste")
     public void pasteCommand(CommandSender sender, String[] args) {
 
@@ -224,7 +225,7 @@ public class MWCommands extends BaseCommand {
             return;
         }
 
-        if (args.length > 1) {
+        if (args.length > 5) {
             player.sendMessage(Messages.getMessage(true, Messages.MessageEnum.COMMAND_TO_MANY_ARGUMENTS));
             return;
         }
@@ -241,9 +242,40 @@ public class MWCommands extends BaseCommand {
                     .replace("%input%", args[0]));
             return;
         }
-
-        SchematicFacing schematicFacing = SchematicFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration());
-        missile.paste(game, player, schematicFacing);
+        
+        boolean hasTempBlock = Config.isTempBlockEnabled();
+        Material tempBlockMaterial = Config.getTempBlockMaterial();
+        int tempBlockDelay = Config.getUpdateDelay();
+        int tempBlockRadius = Config.getUpdateRadius();
+        
+        for (int i = 1; i < args.length; i++) {
+            if (args[i].toLowerCase().startsWith("-tempblock:")) {
+                hasTempBlock = Boolean.parseBoolean(args[i].split(":", 2)[1]);
+                continue;
+            }
+            if (args[i].toLowerCase().startsWith("-tempblock_material:")) {
+                tempBlockMaterial = MaterialUtil.getMaterial(args[i].split(":", 2)[1]);
+                continue;
+            }
+            if (args[i].toLowerCase().startsWith("-tempblock_delay:")) {
+                tempBlockDelay = Integer.parseInt(args[i].split(":", 2)[1]);
+                continue;
+            }
+            if (args[i].toLowerCase().startsWith("-tempblock_radius:")) {
+                tempBlockRadius = Integer.parseInt(args[i].split(":", 2)[1]);
+                continue;
+            }
+        }
+        
+        missile.paste(game, player, hasTempBlock, tempBlockMaterial, tempBlockDelay, tempBlockRadius);
+        
+        sender.sendMessage(Messages.getPrefix() + "Missile §7" + missile.getDisplayName() + " §fis placed.");
+        sender.sendMessage("§8 - §f" + "Temp-Block (for block-updater) enabled: §7" + hasTempBlock);
+        sender.sendMessage("§8 - §f" + "Temp-Block material: §7" + tempBlockMaterial);
+        sender.sendMessage("§8 - §f" + "Temp-Block delay: §7" + tempBlockDelay + " server ticks");
+        sender.sendMessage("§8 - §f" + "Temp-Block radius: §7" + tempBlockRadius + " blocks");
+        sender.sendMessage(" ");
+        
     }
 
     @Subcommand("start")

+ 2 - 2
missilewars-plugin/src/main/java/de/butzlabben/missilewars/configuration/Config.java

@@ -89,9 +89,9 @@ public class Config {
         cfg.addDefault("missiles.folder", "plugins/MissileWars/missiles");
         cfg.addDefault("shields.folder", "plugins/MissileWars/shields");
 
-        cfg.addDefault("temp_block.enable", false);
+        cfg.addDefault("temp_block.enable", true);
         cfg.addDefault("temp_block.material", NOTE_BLOCK.name());
-        cfg.addDefault("temp_block.remove_after_ticks", 2);
+        cfg.addDefault("temp_block.remove_after_ticks", 0);
         cfg.addDefault("temp_block.radius", 8);
         
         cfg.addDefault("game_result.firework", true);

+ 1 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/Game.java

@@ -478,7 +478,7 @@ public class Game {
         
         itemStack.setAmount(itemStack.getAmount() - 1);
         player.setItemInHand(itemStack);
-        missile.paste(this, player, SchematicFacing.getFacingPlayer(player, this.arena.getMissileConfiguration()));
+        missile.paste(this, player);
     }
 
     /**

+ 1 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/GameManager.java

@@ -23,6 +23,7 @@ import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.configuration.Config;
 import de.butzlabben.missilewars.configuration.lobby.Lobby;
 import de.butzlabben.missilewars.configuration.Messages;
+import de.butzlabben.missilewars.game.enums.GameState;
 import de.butzlabben.missilewars.util.geometry.GameArea;
 import de.butzlabben.missilewars.util.serialization.Serializer;
 import lombok.Getter;

+ 27 - 13
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/schematics/objects/Missile.java

@@ -56,37 +56,52 @@ public class Missile extends SchematicObject {
         return new File(Config.getMissilesFolder());
     }
     
-    public void paste(Game game, Player p, SchematicFacing mf) {
-        if (mf == null)
-            return;
+    public void paste(Game game, Player player) {
+        
+        boolean hasTempBlock = Config.isTempBlockEnabled();
+        Material tempBlockMaterial = Config.getTempBlockMaterial();
+        int tempBlockDelay = Config.getUpdateDelay();
+        int tempBlockRadius = Config.getUpdateRadius();
+        
+        paste(game, player, hasTempBlock, tempBlockMaterial, tempBlockDelay, tempBlockRadius);
+    }
+
+    public void paste(Game game, Player player, boolean hasTempBlock, Material tempBlockMaterial, int tempBlockDelay, 
+                      int tempBlockRadius) {
+        
+        SchematicFacing schematicFacing = SchematicFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration());
+        if (schematicFacing == null) return;
+        
         try {
-            Location loc = p.getLocation();
+            
+            Location loc = player.getLocation();
             Vector pastePos = new Vector(loc.getX(), loc.getY(), loc.getZ());
             
             pastePos = pastePos.add(new Vector(0, -down, 0));
 
             int rotation = 0;
-            if (mf == SchematicFacing.NORTH) {
+            if (schematicFacing == SchematicFacing.NORTH) {
                 pastePos = pastePos.add(new Vector(0, 0, -dist));
-            } else if (mf == SchematicFacing.SOUTH) {
+            } else if (schematicFacing == SchematicFacing.SOUTH) {
                 pastePos = pastePos.add(new Vector(0, 0, dist));
                 rotation = 180;
-            } else if (mf == SchematicFacing.EAST) {
+            } else if (schematicFacing == SchematicFacing.EAST) {
                 pastePos = pastePos.add(new Vector(dist, 0, 0));
                 rotation = 270;
-            } else if (mf == SchematicFacing.WEST) {
+            } else if (schematicFacing == SchematicFacing.WEST) {
                 pastePos = pastePos.add(new Vector(-dist, 0, 0));
                 rotation = 90;
             }
-
-            PasteProvider.getPaster().pasteMissile(getSchematic(), pastePos, rotation, loc.getWorld(),
-                    game.getPlayer(p).getTeam(), Config.isTempBlockEnabled());
+            
+            PasteProvider.getPaster().pasteMissile(getSchematic(), pastePos, rotation, loc.getWorld(), hasTempBlock, 
+                    tempBlockMaterial, tempBlockDelay, tempBlockRadius);
+            
         } catch (Exception e) {
             Logger.ERROR.log("Could not load " + getDisplayName());
             e.printStackTrace();
         }
     }
-    
+
     /**
      * This method provides the missile spawn item based on the
      * mob spawn item specification in the arena configuration.
@@ -116,5 +131,4 @@ public class Missile extends SchematicObject {
         String name = material.name();
         return name.contains("SPAWN_EGG") || name.equals("MONSTER_EGG");
     }
-    
 }

+ 7 - 9
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/schematics/paste/FawePasteProvider.java

@@ -19,11 +19,8 @@
 package de.butzlabben.missilewars.game.schematics.paste;
 
 import de.butzlabben.missilewars.MissileWars;
-import de.butzlabben.missilewars.configuration.Config;
-import de.butzlabben.missilewars.game.Team;
 import de.butzlabben.missilewars.missile.paste.v1_20.fawe.FAWE_Paster;
-import de.butzlabben.missilewars.util.version.ColorConverter;
-import org.bukkit.World;
+import org.bukkit.Material;
 import org.bukkit.util.Vector;
 
 import java.io.File;
@@ -37,13 +34,14 @@ public class FawePasteProvider implements Paster {
     FAWE_Paster paster = new FAWE_Paster();
 
     @Override
-    public void pasteMissile(File schematic, Vector position, int rotation, World world, Team team, boolean blockUpdate) {
-        paster.pasteMissile(schematic, position, rotation, world, ColorConverter.getGlassFromColorCode(team.getColorCode()),
-                Config.getUpdateRadius(), Config.getTempBlockMaterial(), Config.getUpdateDelay(), MissileWars.getInstance(), blockUpdate);
+    public void pasteMissile(File schematic, Vector locationVec, int rotation, org.bukkit.World world, boolean blockUpdate, 
+                             Material replaceMaterial, int replaceTicks, int replaceRadius) {
+        paster.pasteMissile(schematic, locationVec, rotation, world, blockUpdate, replaceMaterial, replaceTicks, 
+                replaceRadius, MissileWars.getInstance());
     }
 
     @Override
-    public void pasteSchematic(File schematic, Vector position, int rotation, World world) {
-        paster.pasteSchematic(schematic, position, rotation, world, MissileWars.getInstance());
+    public void pasteSchematic(File schematic, Vector locationVec, int rotation, org.bukkit.World world) {
+        paster.pasteSchematic(schematic, locationVec, rotation, world, MissileWars.getInstance());
     }
 }

+ 4 - 3
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/schematics/paste/Paster.java

@@ -18,7 +18,7 @@
 
 package de.butzlabben.missilewars.game.schematics.paste;
 
-import de.butzlabben.missilewars.game.Team;
+import org.bukkit.Material;
 import org.bukkit.util.Vector;
 
 import java.io.File;
@@ -29,7 +29,8 @@ import java.io.File;
  */
 public interface Paster {
 
-    void pasteMissile(File schematic, Vector position, int rotation, org.bukkit.World world, Team team, boolean blockUpdate);
+    void pasteMissile(File schematic, Vector locationVec, int rotation, org.bukkit.World world, boolean blockUpdate, 
+                      Material replaceMaterial, int replaceTicks, int replaceRadius);
 
-    void pasteSchematic(File schematic, Vector position, int rotation, org.bukkit.World world);
+    void pasteSchematic(File schematic, Vector locationVec, int rotation, org.bukkit.World world);
 }