ReplaceSwapCommand class

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

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

extends: AbstractPlayerCommand

Поля (18)

МодификаторыТипИмя
break
private final RequiredArg<String> fromArg
private final RequiredArg<String> toArg
String[] var10
Int2IntArrayMap var11
BlockType var13
String var14
String var19
String var20
String var21
int var22
String var23
int var24
Player var6
int var6
String var7
String var8
BlockTypeAssetMap var9

Методы (6)

МодификаторыВозвратСигнатура
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
for for(String var18 : var10)
abstract for for(int var12 = 0; var12 < var9.getAssetCount()
if if(var22 != -1)
if if(var24 != Integer.MIN_VALUE)
abstract super super("swap", "server.commands.replace.swap.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));
            }
         }
      }
   }
}