AssetsDuplicatesCommand class

Пакет: com.hypixel.hytale.server.core.command.commands.debug

Файл: com/hypixel/hytale/server/core/command/commands/debug/AssetsDuplicatesCommand.java

extends: AbstractAsyncCommand

Поля (14)

МодификаторыТипИмя
public static final Comparator<AssetsDuplicatesCommand.DuplicatedAssetInfo> COMPARATOR
public static final Comparator<AssetsDuplicatesCommand.DuplicatedAssetInfo> COMPARATOR_REVERSE
final List<CommonAssetRegistry.PackAsset> assets
final String hash
CommonAsset var1
boolean var2
List var3
Path var3
List var4
long var4
AssetsDuplicatesCommand.DuplicatedAssetInfo var7
Message var8
Set var9
long wastedSpace

Методы (5)

МодификаторыВозвратСигнатура
public DuplicatedAssetInfopublic DuplicatedAssetInfo(@Nonnull String var1, @Nonnull List<CommonAssetRegistry.PackAsset> var2)
public CompletableFuture<Void> calculateTotalSizepublic CompletableFuture<Void> calculateTotalSize()
for for(AssetsDuplicatesCommand.DuplicatedAssetInfo var7 : var4)
if if(var1 instanceof FileCommonAsset var2)
abstract super super("duplicates", "server.commands.assets.duplicates.desc")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.command.commands.debug;

class="kw">import com.hypixel.hytale.common.util.FormatUtil;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.common.CommonAsset;
class="kw">import com.hypixel.hytale.server.core.asset.common.CommonAssetRegistry;
class="kw">import com.hypixel.hytale.server.core.asset.common.asset.FileCommonAsset;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.FlagArg;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractAsyncCommand;
class="kw">import com.hypixel.hytale.server.core.util.message.MessageFormat;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Collections;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;

class="kw">public class AssetsDuplicatesCommand class="kw">extends AbstractAsyncCommand {
   @Nonnull
   class="kw">private class="kw">final FlagArg reverseFlag = this.withFlagArg("reverse", "server.commands.assets.duplicates.reverse.desc");

   class="kw">public AssetsDuplicatesCommand() {
      super("duplicates", "server.commands.assets.duplicates.desc");
   }

   @Nonnull
   @Override
   class="kw">protected CompletableFuture<Void> executeAsync(@Nonnull CommandContext var1) {
      boolean var2 = this.reverseFlag.get(var1);
      List var3 = new ObjectArrayList();
      List var4 = new ObjectArrayList();

      for (Entry var6 : CommonAssetRegistry.getDuplicatedAssets().entrySet()) {
         AssetsDuplicatesCommand.DuplicatedAssetInfo var7 = new AssetsDuplicatesCommand.DuplicatedAssetInfo(var6.getKey(), var6.getValue());
         var4.add(var7);
         var3.add(var7.calculateTotalSize());
      }

      class="kw">return CompletableFuture.allOf(var3.toArray(CompletableFuture[]::new))
         .thenAccept(
            var3x -> {
               var4.sort(var2 ? AssetsDuplicatesCommand.DuplicatedAssetInfo.COMPARATOR_REVERSE : AssetsDuplicatesCommand.DuplicatedAssetInfo.COMPARATOR);
               long var4 = 0L;

               for (AssetsDuplicatesCommand.DuplicatedAssetInfo var7 : var4) {
                  Message var8 = Message.translation("server.commands.assets.duplicates.header")
                     .param("hash", var7.hash)
                     .param("wastedBytes", FormatUtil.bytesToString(var7.wastedSpace));
                  Set var9 = var7.assets.stream().map(var0x -> var0x.pack() + ":" + var0x.asset().getName()).map(Message::raw).collect(Collectors.toSet());
                  var1.sendMessage(MessageFormat.list(var8, var9));
                  var4 += var7.wastedSpace;
               }

               var1.sendMessage(Message.translation("server.commands.assets.duplicates.total").param("wastedBytes", FormatUtil.bytesToString(var4)));
            }
         );
   }

   class="kw">public class="kw">static class DuplicatedAssetInfo {
      @Nonnull
      class="kw">public class="kw">static class="kw">final Comparator<AssetsDuplicatesCommand.DuplicatedAssetInfo> COMPARATOR = Comparator.comparingLong(var0 -> var0.wastedSpace);
      @Nonnull
      class="kw">public class="kw">static class="kw">final Comparator<AssetsDuplicatesCommand.DuplicatedAssetInfo> COMPARATOR_REVERSE = Collections.reverseOrder(COMPARATOR);
      @Nonnull
      class="kw">final String hash;
      @Nonnull
      class="kw">final List<CommonAssetRegistry.PackAsset> assets;
      long wastedSpace;

      class="kw">public DuplicatedAssetInfo(@Nonnull String var1, @Nonnull List<CommonAssetRegistry.PackAsset> var2) {
         this.hash = var1;
         this.assets = var2;
      }

      @Nonnull
      class="kw">public CompletableFuture<Void> calculateTotalSize() {
         CommonAsset var1 = this.assets.getFirst().asset();
         if (var1 class="kw">instanceof FileCommonAsset var2) {
            Path var3 = var2.getFile();
            class="kw">return CompletableFuture.runAsync(SneakyThrow.sneakyRunnable(() -> this.wastedSpace = Files.size(var3) * (this.assets.size() - 1)));
         } else {
            class="kw">return var1.getBlob().thenAccept(var1x -> this.wastedSpace = (long)var1x.length * (this.assets.size() - 1));
         }
      }
   }
}