BlockMask class
Пакет: com.hypixel.hytale.server.core.prefab.selection.mask
Файл: com/hypixel/hytale/server/core/prefab/selection/mask/BlockMask.java
Поля (28)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
BlockMask |
EMPTY |
|
|
break |
|
|
break |
|
|
var0 |
|
String |
var1 |
|
StringBuilder |
var1 |
|
BlockFilter[] |
var1 |
|
int |
var1 |
|
Int2ObjectLinkedOpenHashMap |
var1 |
|
BlockFilter[] |
var12 |
|
BlockFilter[] |
var12 |
|
int |
var13 |
|
int |
var13 |
|
ObjectBidirectionalIterator |
var14 |
|
Entry |
var15 |
|
int |
var16 |
|
BlockFilter.FilterType |
var17 |
|
boolean |
var18 |
|
String[] |
var19 |
|
StringBuilder |
var2 |
|
BlockFilter[] |
var3 |
|
|
var3 |
|
int |
var6 |
|
List |
var7 |
|
BlockFilter |
var9 |
|
|
var9 |
|
boolean |
var9 |
|
|
var9 |
Методы (39)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
BlockMask |
combineBlockMask combine(@Nullable BlockMask... var0) |
|
|
for for(BlockFilter var7 : var3) |
|
|
for for(int var8 = 0; var8 < var3.length; var8++) |
|
|
for for(BlockFilter var4 : this.filters) |
|
|
for for(BlockFilter var13 : this.filters) |
|
|
for for(int var2 = 0; var2 < this.filters.length; var2++) |
|
|
for for(Object var6 : var1) |
|
|
for for(int var2 = 0; var2 < var0.length; var2++) |
|
|
for for(BlockMask var5 : var0) |
|
|
for for(BlockMask var7 : var0) |
|
|
for for(BlockFilter var5 : var0) |
public |
BlockFilter[] |
getFiltersBlockFilter[] getFilters() |
static |
BlockMask |
groupFiltersBlockMask groupFilters(@Nonnull BlockFilter[] var0) |
abstract |
return |
groupFiltersreturn groupFilters(var1) |
abstract |
return |
groupFiltersreturn groupFilters(var12) |
public |
boolean |
hasInvalidBlocksboolean hasInvalidBlocks() |
|
|
if if(this == EMPTY) |
|
|
if if(var3 == this.filters) |
|
|
if if(this.filters.length == 0) |
|
|
if if(this.filters.length == 0) |
|
|
if if(this.inverted) |
|
|
if if(this.filters.length > 1) |
|
|
if if(var2 != this.filters.length - 1) |
|
|
if if(this.filters.length > 1) |
|
|
if if(this.inverted) |
|
|
if if(var0.length == 0) |
|
|
if if(var0.length == 1) |
|
|
if if(var0 != null && var0.length != 0) |
|
|
if if(var5 != null && var5 != EMPTY) |
|
|
if if(var1 == 0) |
|
|
if if(var7 != null && var7 != EMPTY) |
|
|
if if(var0.length == 0) |
|
|
if if(var0.length == 1) |
public |
boolean |
isExcludedboolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7) |
public |
boolean |
isExcludedboolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7, int var8) |
public |
boolean |
isInvertedboolean isInverted() |
static |
BlockMask |
parseBlockMask parse(@Nonnull String var0) |
static |
BlockMask |
parseBlockMask parse(@Nonnull String[] var0) |
public |
void |
setInvertedvoid setInverted(boolean var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.prefab.selection.mask;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.function.FunctionCodec;
class="kw">import com.hypixel.hytale.server.core.universe.world.accessor.ChunkAccessor;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectBidirectionalIterator;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">public class BlockMask {
class="kw">public class="kw">static class="kw">final BlockMask EMPTY = new BlockMask(BlockFilter.EMPTY_ARRAY);
class="kw">public class="kw">static class="kw">final Codec<BlockMask> CODEC = new FunctionCodec<>(Codec.STRING, BlockMask::parse, BlockMask::toString);
class="kw">public class="kw">static class="kw">final String MASK_SEPARATOR = ",";
class="kw">public class="kw">static class="kw">final String ALT_MASK_SEPARATOR = ";";
class="kw">public class="kw">static class="kw">final String EMPTY_MASK_CHARACTER = "-";
class="kw">public class="kw">static class="kw">final String OR_MASK_SEPARATOR = "|";
class="kw">private class="kw">final BlockFilter[] filters;
class="kw">private boolean inverted;
class="kw">public BlockMask(BlockFilter[] var1) {
this.filters = var1;
}
@Nonnull
class="kw">public BlockMask withOptions(@Nonnull BlockFilter.FilterType var1, boolean var2) {
if (this == EMPTY) {
class="kw">return this;
}
BlockFilter[] var3 = this.filters;
for (BlockFilter var7 : var3) {
if (var7.getBlockFilterType() != var1 || var7.isInverted() != var2) {
var3 = new BlockFilter[var3.length];
break;
}
}
if (var3 == this.filters) {
class="kw">return this;
}
for (int var8 = 0; var8 < var3.length; var8++) {
BlockFilter var9 = this.filters[var8];
if (var9.getBlockFilterType() != var1 || var9.isInverted() != var2) {
var9 = new BlockFilter(var1, var9.getBlocks(), var2);
}
var3[var8] = var9;
}
class="kw">return new BlockMask(var3);
}
class="kw">public BlockFilter[] getFilters() {
class="kw">return this.filters;
}
class="kw">public void setInverted(boolean var1) {
this.inverted = var1;
}
class="kw">public boolean isInverted() {
class="kw">return this.inverted;
}
class="kw">public boolean hasInvalidBlocks() {
for (BlockFilter var4 : this.filters) {
if (var4.hasInvalidBlocks()) {
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">public boolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7) {
class="kw">return this.isExcluded(var1, var2, var3, var4, var5, var6, var7, -1);
}
class="kw">public boolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7, int var8) {
boolean var9 = false;
for (BlockFilter var13 : this.filters) {
if (var13.isExcluded(var1, var2, var3, var4, var5, var6, var7, var8)) {
var9 = true;
break;
}
}
class="kw">return this.inverted != var9;
}
@Nonnull
@Override
class="kw">public String toString() {
if (this.filters.length == 0) {
class="kw">return "-";
}
String var1 = joinElements(",", this.filters);
class="kw">return this.inverted ? "!" + var1 : var1;
}
@Nonnull
class="kw">public String informativeToString() {
if (this.filters.length == 0) {
class="kw">return "-";
}
StringBuilder var1 = new StringBuilder();
if (this.inverted) {
var1.append("NOT(");
}
if (this.filters.length > 1) {
var1.append("(");
}
for (int var2 = 0; var2 < this.filters.length; var2++) {
var1.append(this.filters[var2].informativeToString());
if (var2 != this.filters.length - 1) {
var1.append(" AND ");
}
}
if (this.filters.length > 1) {
var1.append(")");
}
if (this.inverted) {
var1.append(")");
}
class="kw">return var1.toString();
}
@Nonnull
class="kw">protected class="kw">static String joinElements(String var0, @Nonnull Object[] var1) {
StringBuilder var2 = new StringBuilder();
for (Object var6 : var1) {
if (!var2.isEmpty()) {
var2.append(var0);
}
var2.append(var6);
}
class="kw">return var2.toString();
}
class="kw">public class="kw">static BlockMask parse(@Nonnull String var0) {
if (!var0.isEmpty() && !var0.equals("-")) {
var0 = var0.replace(";", ",");
class="kw">return parse(var0.split(",", 0));
} else {
class="kw">return EMPTY;
}
}
class="kw">public class="kw">static BlockMask parse(@Nonnull String[] var0) {
if (var0.length == 0) {
class="kw">return EMPTY;
}
if (var0.length == 1) {
class="kw">return new BlockMask(new BlockFilter[]{BlockFilter.parse(var0[0])});
}
BlockFilter[] var1 = new BlockFilter[var0.length];
for (int var2 = 0; var2 < var0.length; var2++) {
var1[var2] = BlockFilter.parse(var0[var2]);
}
class="kw">return groupFilters(var1);
}
class="kw">public class="kw">static BlockMask combine(@Nullable BlockMask... var0) {
if (var0 != null && var0.length != 0) {
int var1 = 0;
for (BlockMask var5 : var0) {
if (var5 != null && var5 != EMPTY) {
var1 += var5.getFilters().length;
}
}
if (var1 == 0) {
class="kw">return EMPTY;
}
BlockFilter[] var12 = new BlockFilter[var1];
int var13 = 0;
for (BlockMask var7 : var0) {
if (var7 != null && var7 != EMPTY) {
for (BlockFilter var11 : var7.getFilters()) {
var12[var13++] = var11;
}
}
}
class="kw">return groupFilters(var12);
} else {
class="kw">return EMPTY;
}
}
class="kw">private class="kw">static BlockMask groupFilters(@Nonnull BlockFilter[] var0) {
if (var0.length == 0) {
class="kw">return EMPTY;
}
if (var0.length == 1) {
class="kw">return new BlockMask(var0);
}
Int2ObjectLinkedOpenHashMap var1 = new Int2ObjectLinkedOpenHashMap();
for (BlockFilter var5 : var0) {
int var6 = var5.getBlockFilterType().ordinal() << 1 | (var5.isInverted() ? 1 : 0);
List var7 = (List<String>)var1.computeIfAbsent(var6, var0x -> new ArrayList());
for (String var11 : var5.getBlocks()) {
var7.add(var11);
}
}
if (var1.size() == var0.length) {
class="kw">return new BlockMask(var0);
}
BlockFilter[] var12 = new BlockFilter[var1.size()];
int var13 = 0;
ObjectBidirectionalIterator var14 = var1.int2ObjectEntrySet().iterator();
while (var14.hasNext()) {
Entry var15 = (Entry<List<String>>)var14.next();
int var16 = var15.getIntKey();
BlockFilter.FilterType var17 = BlockFilter.FilterType.values()[var16 >> 1];
boolean var18 = (var16 & 1) != 0;
String[] var19 = ((List)var15.getValue()).toArray(new String[0]);
var12[var13++] = new BlockFilter(var17, var19, var18);
}
class="kw">return new BlockMask(var12);
}
}