BlockSelectionSupportUtil class
Пакет: com.hypixel.hytale.builtin.blockphysics
Файл: com/hypixel/hytale/builtin/blockphysics/BlockSelectionSupportUtil.java
Поля (25)
| Модификаторы | Тип | Имя |
|---|---|---|
|
Long2ObjectMap |
var1 |
|
long |
var10 |
|
BlockPhysicsUtil.SupportBlock |
var12 |
|
BlockType |
var13 |
|
int |
var14 |
|
int |
var15 |
|
int |
var16 |
|
int |
var17 |
|
LongArrayList |
var18 |
|
ObjectIterator |
var19 |
|
Fluid |
var2 |
|
int |
var20 |
|
Entry |
var21 |
|
Long2IntOpenHashMap |
var23 |
|
ObjectIterator |
var24 |
|
it.unimi.dsi.fastutil.longs.Long2IntMap.Entry |
var25 |
|
Long2IntOpenHashMap |
var3 |
|
BlockSelectionSupportUtil.SelectionSupportReader |
var4 |
|
int |
var5 |
|
|
var5 |
|
ObjectIterator |
var6 |
|
BlockType |
var6 |
|
Entry |
var7 |
|
int |
var7 |
|
BlockType |
var8 |
Методы (11)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
applySupportValuesvoid applySupportValues(@Nonnull BlockSelection var0) |
|
public boolean |
doesMissingNeighbourSatisfySupportpublic boolean doesMissingNeighbourSatisfySupport(@Nonnull Vector3ic var1) |
|
|
for for(int var22 = 0; var22 < var20; var22++) |
abstract |
|
for for(int var9 = 0; var9 < var18.size() |
|
public BlockPhysicsUtil.SupportBlock |
getBlockpublic BlockPhysicsUtil.SupportBlock getBlock(int var1, int var2, int var3) |
|
public int |
getSupportValuepublic int getSupportValue(int var1, int var2, int var3) |
|
|
if if(var2 != null) |
|
|
if if(var8 != null) |
|
|
if if(var12 != null) |
|
|
if if(var17 == -1 || var17 == -2) |
|
public boolean |
isPositionAvailablepublic boolean isPositionAvailable(int var1, int var2, int var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.blockphysics;
class="kw">import com.hypixel.hytale.math.block.BlockUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.longs.LongArrayList;
class="kw">import it.unimi.dsi.fastutil.longs.LongComparators;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3ic;
class="kw">public class="kw">final class BlockSelectionSupportUtil {
class="kw">private BlockSelectionSupportUtil() {
}
class="kw">public class="kw">static void applySupportValues(@Nonnull BlockSelection var0) {
Long2ObjectMap var1 = new Long2ObjectOpenHashMap();
Fluid var2 = Fluid.getAssetMap().getAsset(0);
if (var2 != null) {
var0.forEachBlock(
(var2x, var3x, var4x, var5x) -> var1.put(
BlockUtil.pack(var2x, var3x, var4x), new BlockPhysicsUtil.SupportBlock(var5x.blockId(), var5x.rotation(), var5x.filler(), 0, var2)
)
);
if (!var1.isEmpty()) {
Long2IntOpenHashMap var3 = new Long2IntOpenHashMap(var1.size());
var3.defaultReturnValue(0);
BlockSelectionSupportUtil.SelectionSupportReader var4 = new BlockSelectionSupportUtil.SelectionSupportReader(var1, var3);
int var5 = 0;
ObjectIterator var6 = var1.long2ObjectEntrySet().iterator();
while (var6.hasNext()) {
Entry var7 = (Entry<BlockPhysicsUtil.SupportBlock>)var6.next();
BlockType var8 = BlockType.getAssetMap().getAsset(((BlockPhysicsUtil.SupportBlock)var7.getValue()).blockId());
if (var8 != null) {
var5 = Math.max(var5, var8.getMaxSupportDistance());
}
}
LongArrayList var18 = new LongArrayList(var1.size());
ObjectIterator var19 = var1.long2ObjectEntrySet().iterator();
while (var19.hasNext()) {
Entry var21 = (Entry<BlockPhysicsUtil.SupportBlock>)var19.next();
var18.add(var21.getLongKey());
}
var18.sort(LongComparators.asLongComparator((var0x, var1x) -> Integer.compare(BlockUtil.unpackY(var0x), BlockUtil.unpackY(var1x))));
int var20 = Math.max(1, var5 + 1);
for (int var22 = 0; var22 < var20; var22++) {
for (int var9 = 0; var9 < var18.size(); var9++) {
long var10 = var18.getLong(var9);
BlockPhysicsUtil.SupportBlock var12 = (BlockPhysicsUtil.SupportBlock)var1.get(var10);
if (var12 != null) {
BlockType var13 = BlockType.getAssetMap().getAsset(var12.blockId());
if (var13 != null && var13.hasSupport()) {
int var14 = BlockUtil.unpackX(var10);
int var15 = BlockUtil.unpackY(var10);
int var16 = BlockUtil.unpackZ(var10);
int var17 = var12.filler() != 0
? -1
: BlockPhysicsUtil.testBlockPhysics(var4, var14, var15, var16, var13, var12.rotation(), var12.filler());
if (var17 == -1 || var17 == -2) {
var3.put(var10, 0);
} else if (var17 > 0) {
var3.put(var10, var17);
} else {
var3.put(var10, 0);
}
}
}
}
}
Long2IntOpenHashMap var23 = new Long2IntOpenHashMap();
var0.forEachBlock((var2x, var3x, var4x, var5x) -> {
BlockType var6 = BlockType.getAssetMap().getAsset(var5x.blockId());
if (var6 != null && var6.hasSupport()) {
int var7 = var3.get(BlockUtil.pack(var2x, var3x, var4x));
if (var7 != var5x.supportValue()) {
var23.put(BlockUtil.pack(var2x, var3x, var4x), var7);
}
}
});
ObjectIterator var24 = var23.long2IntEntrySet().iterator();
while (var24.hasNext()) {
it.unimi.dsi.fastutil.longs.Long2IntMap.Entry var25 = (it.unimi.dsi.fastutil.longs.Long2IntMap.Entry)var24.next();
var0.setSupportValueAtLocalPos(
BlockUtil.unpackX(var25.getLongKey()), BlockUtil.unpackY(var25.getLongKey()), BlockUtil.unpackZ(var25.getLongKey()), var25.getIntValue()
);
}
}
}
}
class="kw">private record SelectionSupportReader(@Nonnull Long2ObjectMap<BlockPhysicsUtil.SupportBlock> blocks, @Nonnull Long2IntOpenHashMap supportValues)
class="kw">implements BlockPhysicsUtil.SupportReader {
class="kw">private SelectionSupportReader {
}
@Override
class="kw">public boolean isPositionAvailable(int var1, int var2, int var3) {
class="kw">return true;
}
@Nullable
@Override
class="kw">public BlockPhysicsUtil.SupportBlock getBlock(int var1, int var2, int var3) {
class="kw">return (BlockPhysicsUtil.SupportBlock)this.blocks.get(BlockUtil.pack(var1, var2, var3));
}
@Override
class="kw">public int getSupportValue(int var1, int var2, int var3) {
class="kw">return this.supportValues.get(BlockUtil.pack(var1, var2, var3));
}
@Override
class="kw">public boolean doesMissingNeighbourSatisfySupport(@Nonnull Vector3ic var1) {
class="kw">return var1.y() < 0;
}
}
}