AugmentBlocksUtils class
Пакет: com.hypixel.hytale.builtin.augmentblocks
Файл: com/hypixel/hytale/builtin/augmentblocks/AugmentBlocksUtils.java
Поля (31)
| Модификаторы | Тип | Имя |
|---|---|---|
|
boolean |
var10 |
|
|
var10 |
|
BlockModule.BlockStateInfo |
var10 |
|
double |
var11 |
|
double |
var13 |
|
double |
var15 |
|
BlockModule.BlockStateInfo |
var2 |
|
BlockModule.BlockStateInfo |
var2 |
|
BenchBlock |
var3 |
|
Ref |
var3 |
|
Vector3i |
var3 |
|
List |
var4 |
|
AugmentBlock |
var4 |
|
Vector3i |
var4 |
|
Vector3i |
var4 |
|
BlockSection |
var4 |
|
List |
var4 |
|
List |
var4 |
|
Set |
var5 |
|
ChunkStore |
var5 |
|
BlockType |
var5 |
|
double |
var5 |
|
Ref |
var6 |
|
WorldChunk |
var6 |
|
AugmentBlock |
var7 |
|
BlockSection |
var7 |
|
Vector3i |
var7 |
|
BlockType |
var8 |
|
int |
var8 |
|
Set |
var9 |
|
int |
var9 |
Методы (20)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
applyStatevoid applyState(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3) |
static |
boolean |
canReplaceBlockboolean canReplaceBlock(@Nonnull World var0, @Nonnull Vector3i var1, @Nonnull String var2) |
abstract |
return |
collectNearbyByScanreturn collectNearbyByScan(var0, var1, var2) |
|
|
for for(AugmentBlock var8 : var4) |
|
|
for for(String var5 : var1) |
abstract |
|
for for(int var9 = var6.size() |
|
|
if if(var7 != null) |
|
|
if if(var3 != null) |
|
|
if if(var4 != null) |
|
|
if if(var7 != null) |
|
|
if if(var8 != null) |
|
|
if if(var4 != null && var5 != null) |
|
|
if if(var6 != null) |
|
|
if if(var2 == null) |
|
|
if if(var2 == null) |
static |
void |
replaceBlockvoid replaceBlock(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3) |
static |
boolean |
requirementsMetboolean requirementsMet(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2, @Nonnull String[] var4) |
static |
boolean |
requirementsMetFromboolean requirementsMetFrom(@Nonnull Set<String> var0, @Nonnull String[] var1) |
static |
void |
syncBenchAugmentTagsvoid syncBenchAugmentTags(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, @Nonnull Vector3i var2) |
|
|
while while(var10) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.augmentblocks;
class="kw">import com.hypixel.hytale.builtin.crafting.component.BenchBlock;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockOperations;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class="kw">final class AugmentBlocksUtils {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private AugmentBlocksUtils() {
}
@Nonnull
class="kw">public class="kw">static Set<String> collectActiveAugmentTags(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2) {
List var4 = new ArrayList<>();
for (Ref var6 : collectNearby(var0, var1, var2)) {
AugmentBlock var7 = var0.getComponent(var6, AugmentBlock.getComponentType());
if (var7 != null) {
var4.add(var7);
}
}
Set var9 = new HashSet<>();
boolean var10 = true;
while (var10) {
var10 = false;
for (AugmentBlock var8 : var4) {
var10 |= var8.collectGrantedAugmentTags(var9, var9);
}
}
class="kw">return var9;
}
class="kw">public class="kw">static boolean requirementsMet(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2, @Nonnull String[] var4) {
class="kw">return var4.length == 0 ? true : requirementsMetFrom(collectActiveAugmentTags(var0, var1, var2), var4);
}
class="kw">public class="kw">static void syncBenchAugmentTags(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, @Nonnull Vector3i var2) {
BenchBlock var3 = var0.getComponent(var1, BenchBlock.getComponentType());
if (var3 != null) {
AugmentBlock var4 = var0.getComponent(var1, AugmentBlock.getComponentType());
if (var4 != null) {
Set var5 = collectActiveAugmentTags(var0, var2, var4.getRadius());
if (!var5.equals(var3.getGrantedAugmentTags())) {
var3.setGrantedAugmentTags(var5);
}
}
}
}
class="kw">private class="kw">static boolean requirementsMetFrom(@Nonnull Set<String> var0, @Nonnull String[] var1) {
for (String var5 : var1) {
if (!var0.contains(var5)) {
class="kw">return false;
}
}
class="kw">return true;
}
class="kw">public class="kw">static boolean canReplaceBlock(@Nonnull World var0, @Nonnull Vector3i var1, @Nonnull String var2) {
if (BlockType.getAssetMap().getAsset(var2) == null) {
LOGGER.at(Level.WARNING).log("AugmentBlocks: ReplaceBlock target '%s' not found", var2);
class="kw">return false;
} else {
class="kw">return var0.getChunk(ChunkUtil.indexChunkFromBlock(var1.x, var1.z)) != null;
}
}
class="kw">public class="kw">static void replaceBlock(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3) {
Vector3i var4 = worldPos(var1, var2);
if (var4 != null && canReplaceBlock(var0, var4, var3)) {
ChunkStore var5 = var0.getChunkStore();
Ref var6 = var5.getChunkSectionReferenceAtBlock(var4.x, var4.y, var4.z);
if (var6 != null && var6.isValid()) {
BlockSection var7 = var5.getStore().getComponent(var6, BlockSection.getComponentType());
if (var7 != null) {
BlockType var8 = BlockType.getAssetMap().getAsset(var3);
if (var8 != null) {
int var9 = var7.getRotationIndex(var4.x, var4.y, var4.z);
BlockOperations.setBlock(var5, var6, var4.x, var4.y, var4.z, BlockType.getAssetMap().getIndex(var3), var8, var9, 0, 0);
}
}
}
}
}
class="kw">public class="kw">static void applyState(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3) {
Vector3i var4 = worldPos(var1, var2);
BlockType var5 = currentBlockType(var1, var2);
if (var4 != null && var5 != null) {
WorldChunk var6 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var4.x, var4.z));
if (var6 != null) {
var6.setBlockInteractionState(var4.x, var4.y, var4.z, var5, var3, false);
}
}
}
@Nullable
class="kw">private class="kw">static BlockType currentBlockType(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1) {
BlockModule.BlockStateInfo var2 = var0.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
if (var2 == null) {
class="kw">return null;
}
Ref var3 = var2.getSectionRef();
if (!var3.isValid()) {
class="kw">return null;
}
BlockSection var4 = var3.getStore().getComponent(var3, BlockSection.getComponentType());
class="kw">return var4 == null ? null : BlockType.getAssetMap().getAsset(var4.get(var2.getIndex()));
}
@Nullable
class="kw">public class="kw">static Vector3i worldPos(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1) {
BlockModule.BlockStateInfo var2 = var0.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
if (var2 == null) {
class="kw">return null;
}
Vector3i var3 = new Vector3i();
class="kw">return var2.fillWorldPos(var0, var3) ? var3 : null;
}
@Nonnull
class="kw">private class="kw">static List<Ref<ChunkStore>> collectNearby(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2) {
if (!var0.getExternalData().getWorld().isTicking()) {
class="kw">return collectNearbyByScan(var0, var1, var2);
}
List var4 = SpatialResource.getThreadLocalReferenceList();
var0.getResource(AugmentBlocksPlugin.get().getSpatialResource()).getSpatialStructure().collect(new Vector3d(var1.x, var1.y, var1.z), var2, var4);
class="kw">return new ArrayList<>(var4);
}
@Nonnull
class="kw">private class="kw">static List<Ref<ChunkStore>> collectNearbyByScan(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2) {
List var4 = new ArrayList<>();
double var5 = var2 * var2;
Vector3i var7 = new Vector3i();
var0.forEachChunk(AugmentBlocksSpatialSystem.QUERY, (var6, var7x) -> {
int var8 = 0;
for (int var9 = var6.size(); var8 < var9; var8++) {
BlockModule.BlockStateInfo var10 = var6.getComponent(var8, BlockModule.BlockStateInfo.getComponentType());
if (var10 != null && var10.fillWorldPos(var0, var7)) {
double var11 = var7.x - var1.x;
double var13 = var7.y - var1.y;
double var15 = var7.z - var1.z;
if (!(var11 * var11 + var13 * var13 + var15 * var15 > var5)) {
var4.add(var6.getReferenceTo(var8));
}
}
}
});
class="kw">return var4;
}
}