ReplaceRegexCommand class

Пакет: com.hypixel.hytale.builtin.buildertools.commands

Файл: com/hypixel/hytale/builtin/buildertools/commands/ReplaceCommand.java

extends: AbstractPlayerCommand

Поля (12)

МодификаторыТипИмя
private final RequiredArg<String> fromArg
return
private final RequiredArg<BlockPattern> toArg
BlockTypeAssetMap var10
ArrayList var11
BlockType var13
BlockMask var15
Player var6
String var7
BlockPattern var8
Pattern var9
var9

Методы (3)

МодификаторыВозвратСигнатура
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
abstract for for(int var12 = 0; var12 < var10.getAssetCount()
abstract super super("regex", "server.commands.replace.regex.desc")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.commands;

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.buildertools.PrototypePlayerBuilderToolSettings;
class="kw">import com.hypixel.hytale.builtin.buildertools.utils.Material;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.mask.BlockFilter;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.mask.BlockMask;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.mask.BlockPattern;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntArrayMap;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Locale;
class="kw">import java.util.concurrent.ThreadLocalRandom;
class="kw">import java.util.regex.Pattern;
class="kw">import java.util.regex.PatternSyntaxException;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class ReplaceCommand class="kw">extends AbstractPlayerCommand {
   @Nonnull
   class="kw">private class="kw">final RequiredArg<BlockPattern> toArg = this.withRequiredArg("to", "server.commands.replace.toBlock.desc", ArgTypes.BLOCK_PATTERN);

   class="kw">public ReplaceCommand() {
      super("replace", "server.commands.replace.desc");
      this.setPermissionGroups("hytale:WorldEditor");
      this.addUsageVariant(new ReplaceCommand.ReplaceFromToCommand());
      this.addSubCommand(new ReplaceCommand.ReplaceSwapCommand());
      this.addSubCommand(new ReplaceCommand.ReplaceRegexCommand());
   }

   @Override
   class="kw">protected void execute(
      @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
   ) {
      executeBlockReplace(var1, var2, var3, var4, null, this.toArg.get(var1));
   }

   class="kw">static void executeBlockReplace(
      @Nonnull CommandContext var0,
      @Nonnull Store<EntityStore> var1,
      @Nonnull Ref<EntityStore> var2,
      @Nonnull PlayerRef var3,
      @Nullable BlockMask var4,
      @Nonnull BlockPattern var5
   ) {
      Player var6 = var1.getComponent(var2, Player.getComponentType());
      assert var6 != null;
      if (PrototypePlayerBuilderToolSettings.isOkayToDoCommandsOnSelection(var2, var3, var1)) {
         if (var4 != null && var4.hasInvalidBlocks()) {
            var0.sendMessage(Message.translation("server.builderTools.invalidBlockType").param("key", var4.toString()));
         } else {
            BlockFilter var7 = new BlockFilter(BlockFilter.FilterType.TargetBlock, new String[]{"Empty"}, true);
            BlockMask var8 = new BlockMask(new BlockFilter[]{var7});
            BlockMask var9 = var4 != null ? var4 : var8;
            String var10 = var5.toString();
            String var11 = var9.toString();
            Material var12 = var11 != null ? Material.fromKey(var11) : null;
            Material var13 = Material.fromPattern(var5, ThreadLocalRandom.current());
            if (var13.isFluid()) {
               if (var12 == null) {
                  var0.sendMessage(Message.translation("server.commands.replace.fromRequired"));
               } else {
                  BuilderToolsPlugin.addToQueue(var6, var3, (var2x, var3x, var4x) -> var3x.replace(var2x, var12, var13, var4x));
                  var0.sendMessage(Message.translation("server.builderTools.replace.replacementBlockDone").param("from", var11).param("to", var10));
               }
            } else if (var12 != null && var12.isFluid()) {
               BuilderToolsPlugin.addToQueue(var6, var3, (var2x, var3x, var4x) -> var3x.replace(var2x, var12, var13, var4x));
               var0.sendMessage(Message.translation("server.builderTools.replace.replacementBlockDone").param("from", var11).param("to", var10));
            } else {
               BuilderToolsPlugin.addToQueue(var6, var3, (var2x, var3x, var4x) -> var3x.replace(var2x, var9, var5, var4x));
               var0.sendMessage(Message.translation("server.builderTools.replace.replacementBlockDone").param("from", var11).param("to", var10));
            }
         }
      }
   }

   class="kw">private class="kw">static class ReplaceFromToCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<BlockMask> fromArg = this.withRequiredArg("from", "server.commands.replace.from.desc", ArgTypes.BLOCK_MASK);
      @Nonnull
      class="kw">private class="kw">final RequiredArg<BlockPattern> toArg = this.withRequiredArg("to", "server.commands.replace.toBlock.desc", ArgTypes.BLOCK_PATTERN);

      class="kw">public ReplaceFromToCommand() {
         super("server.commands.replace.desc");
         this.setPermissionGroups("hytale:WorldEditor");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         ReplaceCommand.executeBlockReplace(var1, var2, var3, var4, this.fromArg.get(var1), this.toArg.get(var1));
      }
   }

   class="kw">private class="kw">static class ReplaceRegexCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<String> fromArg = this.withRequiredArg("from", "server.commands.replace.regex.from.desc", ArgTypes.STRING);
      @Nonnull
      class="kw">private class="kw">final RequiredArg<BlockPattern> toArg = this.withRequiredArg("to", "server.commands.replace.regex.to.desc", ArgTypes.BLOCK_PATTERN);

      class="kw">public ReplaceRegexCommand() {
         super("regex", "server.commands.replace.regex.desc");
         this.setPermissionGroups("hytale:WorldEditor");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         Player var6 = var2.getComponent(var3, Player.getComponentType());
         assert var6 != null;
         if (PrototypePlayerBuilderToolSettings.isOkayToDoCommandsOnSelection(var3, var4, var2)) {
            String var7 = this.fromArg.get(var1);
            BlockPattern var8 = this.toArg.get(var1);

            Pattern var9;
            try {
               var9 = Pattern.compile(var7);
            } catch (PatternSyntaxException var14) {
               var1.sendMessage(Message.translation("server.commands.replace.invalidRegex").param("error", var14.getMessage()));
               class="kw">return;
            }

            BlockTypeAssetMap var10 = BlockType.getAssetMap();
            ArrayList var11 = new ArrayList<>();

            for (int var12 = 0; var12 < var10.getAssetCount(); var12++) {
               BlockType var13 = var10.getAsset(var12);
               if (var13 != null && var9.matcher(var13.getId()).matches()) {
                  var11.add(var13.getId());
               }
            }

            if (var11.isEmpty()) {
               var1.sendMessage(Message.translation("server.commands.replace.noMatchingBlocks").param("blockType", var7));
            } else {
               BlockMask var15 = BlockMask.parse(var11.toArray(new String[0]));
               BuilderToolsPlugin.addToQueue(var6, var4, (var4x, var5x, var6x) -> {
                  var5x.replace(var4x, var15, var8, var6x);
                  var1.sendMessage(Message.translation("server.commands.replace.success").param("regex", var7).param("replacement", var8.toString()));
               });
            }
         }
      }
   }

   class="kw">private class="kw">static class ReplaceSwapCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<String> fromArg = this.withRequiredArg("from", "server.commands.replace.swap.from.desc", ArgTypes.STRING);
      @Nonnull
      class="kw">private class="kw">final RequiredArg<String> toArg = this.withRequiredArg("to", "server.commands.replace.swap.to.desc", ArgTypes.STRING);

      class="kw">public ReplaceSwapCommand() {
         super("swap", "server.commands.replace.swap.desc");
         this.setPermissionGroups("hytale:WorldEditor");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         Player var6 = var2.getComponent(var3, Player.getComponentType());
         assert var6 != null;
         if (PrototypePlayerBuilderToolSettings.isOkayToDoCommandsOnSelection(var3, var4, var2)) {
            String var7 = this.fromArg.get(var1);
            String var8 = this.toArg.get(var1);
            BlockTypeAssetMap var9 = BlockType.getAssetMap();
            String[] var10 = var7.split(",", 0);
            Int2IntArrayMap var11 = new Int2IntArrayMap();

            for (int var12 = 0; var12 < var9.getAssetCount(); var12++) {
               BlockType var13 = var9.getAsset(var12);
               String var14 = var13.getId();

               for (String var18 : var10) {
                  String var19 = var18.trim();
                  String var20 = var14.toLowerCase(Locale.ROOT);
                  String var21 = var19.toLowerCase(Locale.ROOT);
                  int var22 = var20.indexOf(var21);
                  if (var22 != -1) {
                     String var23 = var14.substring(0, var22) + var8 + var14.substring(var22 + var19.length());
                     int var24 = var9.getIndex(var23);
                     if (var24 != Integer.MIN_VALUE) {
                        var11.put(var12, var24);
                        break;
                     }
                  }
               }
            }

            if (!var11.isEmpty()) {
               BuilderToolsPlugin.addToQueue(var6, var4, (var3x, var4x, var5x) -> {
                  int var6 = var4x.replace(var3x, var1x -> var11.getOrDefault(var1x, var1x), var5x);
                  var1.sendMessage(Message.translation("server.builderTools.replace.replacementDone").param("nb", var6).param("to", var8));
               });
            } else {
               var1.sendMessage(Message.translation("server.commands.replace.noMatchingBlocks").param("blockType", var7));
            }
         }
      }
   }
}