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 + "}";
}
}
}