PlacementMask class
Пакет: com.hypixel.hytale.builtin.adventure.worldevents.util
Файл: com/hypixel/hytale/builtin/adventure/worldevents/util/PlacementMask.java
Поля (10)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
Codec<String> |
BLOCK_LIST_CODEC |
|
public static final EnumCodec<PlacementMask.PlacementType> |
CODEC |
|
BlocksAndFluids,
BlocksOnly, |
FluidsOnly |
|
int |
var12 |
|
BlockTypeListAsset |
var19 |
|
BlockTypeAssetMap |
var2 |
|
int |
var22 |
|
IndexedLookupTableAssetMap |
var3 |
|
DefaultAssetMap |
var4 |
|
BlockTypeListAsset |
var9 |
Методы (15)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
PlacementType PlacementType() |
public |
void |
compilevoid compile() |
|
|
if if(!this.compiled) |
|
|
if if(!this.compiled) |
|
|
if if(var8 != null) |
|
|
if if(var9 != null) |
|
|
if if(var12 != 1) |
|
|
if if(var18 != null) |
|
|
if if(var19 != null) |
|
|
if if(var22 != 1) |
|
return |
switchreturn switch(this.type) |
|
return |
switchreturn switch(this.type) |
|
|
synchronized synchronized(this) |
public |
boolean |
testBlockboolean testBlock(int var1) |
public |
boolean |
testFluidboolean testFluid(int var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.worldevents.util;
class="kw">import com.hypixel.hytale.assetstore.codec.ContainedAssetCodec;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
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.EnumCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.BlockTypeListAsset;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class PlacementMask {
class="kw">protected class="kw">static class="kw">final Codec<String> BLOCK_LIST_CODEC = new ContainedAssetCodec<>(BlockTypeListAsset.class, BlockTypeListAsset.CODEC);
class="kw">protected class="kw">static class="kw">final Codec<String[]> BLOCK_LISTS_CODEC = new ArrayCodec<>(BLOCK_LIST_CODEC, String[]::new);
class="kw">public class="kw">static class="kw">final BuilderCodec<PlacementMask> CODEC = BuilderCodec.builder(PlacementMask.class, PlacementMask::new)
.documentation("A mask that determines which blocks and fluids a given piece of content can be placed on.")
.<PlacementMask.PlacementType>append(new KeyedCodec<>("Type", PlacementMask.PlacementType.CODEC), (var0, var1) -> var0.type = var1, var0 -> var0.type)
.documentation("The type of placement that this mask controls.")
.addValidator(Validators.nonNull())
.add()
.<String[]>append(new KeyedCodec<>("Blocks", BLOCK_LISTS_CODEC), (var0, var1) -> var0.blockLists = var1, var0 -> var0.blockLists)
.documentation(
"List of BlockTypeList assets to add to the blocks mask. Can be removed to allow placement on any block. Can be empty to prevent placement on any block."
)
.add()
.<String[]>append(new KeyedCodec<>("Fluids", BLOCK_LISTS_CODEC), (var0, var1) -> var0.fluidLists = var1, var0 -> var0.fluidLists)
.documentation(
"List of BlockTypeList assets to add to the fluids mask. Can be removed to allow placement on any fluid. Can be empty to prevent placement on any fluid."
)
.add()
.build();
class="kw">public class="kw">static class="kw">final PlacementMask DEFAULT_ANY = new PlacementMask();
class="kw">public class="kw">static class="kw">final PlacementMask DEFAULT_NONE = new PlacementMask() {
{
this.blockLists = ArrayUtil.EMPTY_STRING_ARRAY;
this.fluidLists = ArrayUtil.EMPTY_STRING_ARRAY;
}
};
@Nonnull
class="kw">protected PlacementMask.PlacementType type = PlacementMask.PlacementType.BlocksAndFluids;
@Nullable
class="kw">protected String[] blockLists;
@Nullable
class="kw">protected String[] fluidLists;
class="kw">protected class="kw">volatile boolean compiled = false;
class="kw">protected class="kw">final IntSet blocks = new IntOpenHashSet();
class="kw">protected class="kw">final IntSet fluids = new IntOpenHashSet();
class="kw">public PlacementMask() {
}
class="kw">public boolean testBlock(int var1) {
assert this.compiled : "Mask must be compiled before use!";
class="kw">return class="kw">switch (this.type) {
case BlocksAndFluids -> var1 == 0 || this.blockLists == null || this.blocks.contains(var1);
case BlocksOnly -> this.blockLists == null || this.blocks.contains(var1);
case FluidsOnly -> var1 == 0;
};
}
class="kw">public boolean testFluid(int var1) {
assert this.compiled : "Mask must be compiled before use!";
class="kw">return class="kw">switch (this.type) {
case BlocksAndFluids -> var1 == 0 || this.fluidLists == null || this.fluids.contains(var1);
case BlocksOnly -> var1 == 0;
case FluidsOnly -> var1 != 0 && (this.fluidLists == null || this.fluids.contains(var1));
};
}
class="kw">public void compile() {
if (!this.compiled) {
class="kw">synchronized (this) {
if (!this.compiled) {
this.blocks.clear();
this.fluids.clear();
this.compiled = true;
BlockTypeAssetMap var2 = BlockType.getAssetMap();
IndexedLookupTableAssetMap var3 = Fluid.getAssetMap();
DefaultAssetMap var4 = BlockTypeListAsset.getAssetMap();
for (String var8 : Objects.requireNonNullElse(this.blockLists, ArrayUtil.EMPTY_STRING_ARRAY)) {
if (var8 != null) {
BlockTypeListAsset var9 = var4.getAsset(var8);
if (var9 != null) {
for (String var11 : var9.getBlockTypeKeys()) {
int var12 = var2.getIndex(var11);
if (var12 != 1) {
this.blocks.add(var12);
}
}
}
}
}
for (String var18 : Objects.requireNonNullElse(this.fluidLists, ArrayUtil.EMPTY_STRING_ARRAY)) {
if (var18 != null) {
BlockTypeListAsset var19 = var4.getAsset(var18);
if (var19 != null) {
for (String var21 : var19.getBlockTypeKeys()) {
int var22 = var3.getIndex(var21);
if (var22 != 1) {
this.fluids.add(var22);
}
}
}
}
}
}
}
}
}
class="kw">public enum PlacementType {
BlocksAndFluids,
BlocksOnly,
FluidsOnly;
class="kw">public class="kw">static class="kw">final EnumCodec<PlacementMask.PlacementType> CODEC = new EnumCodec<>(PlacementMask.PlacementType.class);
PlacementType() {
}
class="kw">static {
CODEC.documentKey(BlocksAndFluids, "Placement is allowed on blocks and fluids.");
CODEC.documentKey(BlocksOnly, "Placement is only allowed on blocks.");
CODEC.documentKey(FluidsOnly, "Placement is only allowed on fluids.");
}
}
}