BuilderTool class

Пакет: com.hypixel.hytale.server.core.asset.type.buildertool.config

Файл: com/hypixel/hytale/server/core/asset/type/buildertool/config/BuilderTool.java

implements: NetworkSerializable<BuilderToolState>

Поля (30)

МодификаторыТипИмя
final String TOOL_DATA_KEY
HashSet var0
Map var1
BuilderToolState var1
ItemStack var2
BuilderTool var2
Map var2
var2
var2
var2
BuilderToolState var2
Map var2
Map var3
Map var3
Map var3
Map var3
Object2ObjectOpenHashMap var3
BsonDocument var4
BuilderTool.ArgData var4
var4
var4
var4
var4
var4
var4
var4
Object2ObjectOpenHashMap var4
BlockMask var5
Object var6
ToolArg var7

Методы (19)

МодификаторыВозвратСигнатура
public record ArgDatarecord ArgData(@Nullable Map<String, Object> tool)
abstract return new ItemStackreturn new ItemStack(var1, var2, var4)
for for(String var3 : MASK_ARGS)
public Map<String, ToolArg> getArgsMap<String, ToolArg> getArgs()
public MapProvidedMapCodec<Object, ToolArg> getArgsCodecMapProvidedMapCodec<Object, ToolArg> getArgsCodec()
public String getBrushConfigurationCommandString getBrushConfigurationCommand()
public String getIdString getId()
if if(var3 == null)
if if(var7 == null)
if if(var3 == null)
if if(var1 != null)
if if(var3 == null)
if if(var2 == null)
public boolean isBrushboolean isBrush()
public boolean isSurvivalAllowedboolean isSurvivalAllowed()
public static BuilderTool.ArgData removeToolArgpublic static BuilderTool.ArgData removeToolArg(@Nonnull BuilderTool.ArgData var0, String var1)
static HashSet<String> setMandatoryToolArgsHashSet<String> setMandatoryToolArgs()
public static BuilderTool.ArgData setToolArgpublic static BuilderTool.ArgData setToolArg(@Nonnull BuilderTool.ArgData var0, String var1, Object var2)
public String toStringpublic String toString()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.type.buildertool.config;

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.lookup.MapProvidedMapCodec;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.protocol.packets.buildertools.BuilderToolArg;
class="kw">import com.hypixel.hytale.protocol.packets.buildertools.BuilderToolState;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.args.BoolArg;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.args.MaskArg;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.args.StringArg;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.args.ToolArg;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.args.ToolArgException;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializable;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.mask.BlockMask;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import java.lang.ref.SoftReference;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collections;
class="kw">import java.util.HashMap;
class="kw">import java.util.HashSet;
class="kw">import java.util.LinkedHashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;

class="kw">public class BuilderTool class="kw">implements NetworkSerializable<BuilderToolState> {
   class="kw">public class="kw">static class="kw">final String TOOL_DATA_KEY = "ToolData";
   class="kw">public class="kw">static class="kw">final String MATERIAL_KEY = "builtin_Material";
   class="kw">public class="kw">static class="kw">final String FAVORITE_MATERIALS_KEY = "builtin_FavoriteMaterials";
   class="kw">public class="kw">static class="kw">final String WIDTH_KEY = "builtin_Width";
   class="kw">public class="kw">static class="kw">final String HEIGHT_KEY = "builtin_Height";
   class="kw">public class="kw">static class="kw">final String THICKNESS_KEY = "builtin_Thickness";
   class="kw">public class="kw">static class="kw">final String CAPPED_KEY = "builtin_Capped";
   class="kw">public class="kw">static class="kw">final String SHAPE_KEY = "builtin_Shape";
   class="kw">public class="kw">static class="kw">final String ORIGIN_KEY = "builtin_Origin";
   class="kw">public class="kw">static class="kw">final String ORIGIN_ROTATION_KEY = "builtin_OriginRotation";
   class="kw">public class="kw">static class="kw">final String ROTATION_AXIS_KEY = "builtin_RotationAxis";
   class="kw">public class="kw">static class="kw">final String ROTATION_ANGLE_KEY = "builtin_RotationAngle";
   class="kw">public class="kw">static class="kw">final String MIRROR_AXIS_KEY = "builtin_MirrorAxis";
   class="kw">public class="kw">static class="kw">final String ROTATION_FACE_KEY = "builtin_RotationFace";
   class="kw">public class="kw">static class="kw">final String DENSITY_KEY = "builtin_Density";
   class="kw">public class="kw">static class="kw">final String SPACING_KEY = "builtin_Spacing";
   class="kw">public class="kw">static class="kw">final String MASK_KEY = "builtin_Mask";
   class="kw">public class="kw">static class="kw">final String MASK_ABOVE_KEY = "builtin_MaskAbove";
   class="kw">public class="kw">static class="kw">final String MASK_NOT_KEY = "builtin_MaskNot";
   class="kw">public class="kw">static class="kw">final String MASK_BELOW_KEY = "builtin_MaskBelow";
   class="kw">public class="kw">static class="kw">final String MASK_ADJACENT_KEY = "builtin_MaskAdjacent";
   class="kw">public class="kw">static class="kw">final String MASK_NEIGHBOR_KEY = "builtin_MaskNeighbor";
   class="kw">public class="kw">static class="kw">final String MASK_ENTRIES_KEY = "builtin_MaskEntries";
   class="kw">public class="kw">static class="kw">final String MASK_COMMANDS_KEY = "builtin_MaskCommands";
   class="kw">public class="kw">static class="kw">final String INVERT_MASK_KEY = "builtin_InvertMask";
   class="kw">public class="kw">static class="kw">final HashSet<String> MASK_ARGS = setMandatoryToolArgs();
   class="kw">public class="kw">static class="kw">final BuilderTool DEFAULT = new BuilderTool();
   class="kw">public class="kw">static class="kw">final BuilderCodec<BuilderTool> CODEC = BuilderCodec.builder(BuilderTool.class, BuilderTool::new)
      .append(new KeyedCodec<>("Id", Codec.STRING), (var0, var1) -> var0.id = var1, var0 -> var0.id)
      .add()
      .append(new KeyedCodec<>("IsBrush", Codec.BOOLEAN), (var0, var1) -> var0.isBrush = var1, var0 -> var0.isBrush)
      .add()
      .append(new KeyedCodec<>("SurvivalAllowed", Codec.BOOLEAN), (var0, var1) -> var0.survivalAllowed = var1, var0 -> var0.survivalAllowed)
      .add()
      .append(
         new KeyedCodec<>("BrushConfigurationCommand", Codec.STRING),
         (var0, var1) -> var0.brushConfigurationCommand = var1,
         var0 -> var0.brushConfigurationCommand
      )
      .add()
      .append(new KeyedCodec<>("Args", new ArrayCodec<>(ToolArg.CODEC, ToolArg[]::new)), (var0, var1) -> {
         var0.args = new LinkedHashMap<>();
         Arrays.stream(var1).forEach(var1x -> var0.args.put(var1x.getId(), var1x));
      }, var0 -> var0.args.values().toArray(new ToolArg[var0.args.size()]))
      .add()
      .afterDecode(var0 -> {
         Map var1 = new LinkedHashMap<>(var0.args);

         for (String var3 : MASK_ARGS) {
            if (!var1.containsKey(var3)) {
               var1.put(var3, MaskArg.EMPTY);
            }
         }

         if (!var1.containsKey("builtin_InvertMask")) {
            var1.put("builtin_InvertMask", new BoolArg(false));
         }

         if (!var1.containsKey("builtin_MaskCommands")) {
            var1.put("builtin_MaskCommands", new StringArg(""));
         }

         if (!var1.containsKey("builtin_MaskEntries")) {
            var1.put("builtin_MaskEntries", new StringArg(""));
         }

         var0.argsCodec = new MapProvidedMapCodec<>(var1, ToolArg::getCodec, HashMap::new);
      })
      .build();
   class="kw">protected AssetExtraInfo.Data data;
   class="kw">protected String id;
   class="kw">protected boolean isBrush;
   class="kw">protected boolean survivalAllowed;
   class="kw">protected String brushConfigurationCommand;
   class="kw">protected Map<String, ToolArg> args = Collections.emptyMap();
   class="kw">protected Map<String, Object> defaultToolArgs;
   class="kw">private MapProvidedMapCodec<Object, ToolArg> argsCodec;
   class="kw">private SoftReference<BuilderToolState> cachedPacket;

   class="kw">public BuilderTool() {
   }

   class="kw">private class="kw">static HashSet<String> setMandatoryToolArgs() {
      HashSet var0 = new HashSet<>();
      var0.add("builtin_Mask");
      var0.add("builtin_MaskAbove");
      var0.add("builtin_MaskNot");
      var0.add("builtin_MaskBelow");
      var0.add("builtin_MaskAdjacent");
      var0.add("builtin_MaskNeighbor");
      class="kw">return var0;
   }

   @Nullable
   class="kw">public class="kw">static BuilderTool getActiveBuilderTool(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
      ItemStack var2 = InventoryComponent.getItemInHand(var1, var0);
      class="kw">return var2 == null ? null : var2.getItem().getBuilderTool();
   }

   class="kw">public String getId() {
      class="kw">return this.id;
   }

   class="kw">public String getBrushConfigurationCommand() {
      class="kw">return this.brushConfigurationCommand;
   }

   class="kw">public boolean isBrush() {
      class="kw">return this.isBrush;
   }

   class="kw">public boolean isSurvivalAllowed() {
      class="kw">return this.survivalAllowed;
   }

   class="kw">public Map<String, ToolArg> getArgs() {
      class="kw">return this.args;
   }

   class="kw">public MapProvidedMapCodec<Object, ToolArg> getArgsCodec() {
      class="kw">return this.argsCodec;
   }

   @Nonnull
   class="kw">private Map<String, Object> getDefaultToolArgs(@Nonnull ItemStack var1) {
      BuilderTool var2 = var1.getItem().getBuilderTool();
      Map var3 = new Object2ObjectOpenHashMap(var2.args.size());

      for (Entry var5 : var2.args.entrySet()) {
         var3.put(var5.getKey(), var5.getValue().getValue());
      }

      class="kw">return var3;
   }

   @Nonnull
   class="kw">public BuilderTool.ArgData getItemArgData(@Nonnull ItemStack var1) {
      Map var2 = null;
      if (!this.args.isEmpty()) {
         try {
            Map var3 = var1.getFromMetadataOrNull("ToolData", this.argsCodec);
            if (var3 == null) {
               var2 = this.getDefaultToolArgs(var1);
            } else {
               var2 = this.getDefaultToolArgs(var1);
               var2.putAll(var3);
            }
         } catch (Exception var4) {
            var2 = this.getDefaultToolArgs(var1);
         }
      }

      class="kw">return new BuilderTool.ArgData(var2);
   }

   @Nonnull
   class="kw">public ItemStack createItemStack(@Nonnull String var1, int var2, @Nonnull BuilderTool.ArgData var3) {
      BsonDocument var4 = new BsonDocument();
      if (var3.tool() != null) {
         var4.put("ToolData", this.argsCodec.encode(var3.tool()));
      }

      class="kw">return new ItemStack(var1, var2, var4);
   }

   @Nonnull
   class="kw">public ItemStack updateArgMetadata(@Nonnull ItemStack var1, @Nonnull String var2, @Nullable String var3) class="kw">throws ToolArgException {
      BuilderTool.ArgData var4 = this.getItemArgData(var1);
      if (!var2.equals("builtin_MaskEntries") && !MASK_ARGS.contains(var2) && !var2.equals("builtin_InvertMask") && !var2.equals("builtin_MaskCommands")) {
         ToolArg var7 = this.args.get(var2);
         if (var7 == null) {
            throw new ToolArgException(Message.translation("server.builderTools.toolUnknownArg").param("arg", var2));
         }

         if (var3 == null) {
            if (var7.isRequired()) {
               throw new ToolArgException(Message.translation("server.builderTools.toolArgMissing").param("arg", var2));
            }

            var4 = BuilderTool.ArgData.removeToolArg(var4, var2);
         } else {
            Object var6 = var7.fromString(var3);
            var4 = BuilderTool.ArgData.setToolArg(var4, var2, var6);
         }
      } else if (var3 == null) {
         var4 = BuilderTool.ArgData.removeToolArg(var4, var2);
      } else if (var2.equals("builtin_MaskEntries")) {
         var4 = BuilderTool.ArgData.setToolArg(var4, var2, var3);
      } else if (MASK_ARGS.contains(var2)) {
         BlockMask var5 = BlockMask.parse(var3);
         var4 = BuilderTool.ArgData.setToolArg(var4, var2, var5);
      } else if (var2.equals("builtin_InvertMask")) {
         var4 = BuilderTool.ArgData.setToolArg(var4, var2, Boolean.parseBoolean(var3));
      } else if (var2.equals("builtin_MaskCommands")) {
         var4 = BuilderTool.ArgData.setToolArg(var4, var2, var3);
      }

      class="kw">return this.createItemStack(var1.getItemId(), var1.getQuantity(), var4);
   }

   @Nonnull
   class="kw">public BuilderToolState toPacket() {
      BuilderToolState var1 = this.cachedPacket == null ? null : this.cachedPacket.get();
      if (var1 != null) {
         class="kw">return var1;
      }

      BuilderToolState var2 = new BuilderToolState();
      var2.id = this.id;
      var2.isBrush = this.isBrush;
      Map var3 = new LinkedHashMap<>(this.args.size());

      for (Entry var5 : this.args.entrySet()) {
         var3.put(var5.getKey(), var5.getValue().toPacket());
      }

      var2.args = var3.values().toArray(new BuilderToolArg[var3.values().size()]);
      this.cachedPacket = new SoftReference<>(var2);
      class="kw">return var2;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "BuilderTool{id='" + this.id + "', isBrush=" + this.isBrush + ", args=" + this.args + "}";
   }

   class="kw">public record ArgData(@Nullable Map<String, Object> tool) {
      class="kw">public ArgData {
      }

      @Nonnull
      class="kw">public class="kw">static BuilderTool.ArgData setToolArg(@Nonnull BuilderTool.ArgData var0, String var1, Object var2) {
         Map var3 = var0.tool();
         if (var3 == null) {
            class="kw">return var0;
         }

         Object2ObjectOpenHashMap var4 = new Object2ObjectOpenHashMap(var3);
         var4.put(var1, var2);
         class="kw">return new BuilderTool.ArgData(var4);
      }

      @Nonnull
      class="kw">public class="kw">static BuilderTool.ArgData removeToolArg(@Nonnull BuilderTool.ArgData var0, String var1) {
         Map var2 = var0.tool();
         if (var2 == null) {
            class="kw">return var0;
         }

         Object2ObjectOpenHashMap var3 = new Object2ObjectOpenHashMap(var2);
         var3.remove(var1);
         class="kw">return new BuilderTool.ArgData(var3);
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "ArgData{tool=" + this.tool + "}";
      }
   }
}