PortalInstanceRelinker class
Пакет: com.hypixel.hytale.builtin.portals
Файл: com/hypixel/hytale/builtin/portals/PortalInstanceRelinker.java
Поля (14)
| Модификаторы | Тип | Имя |
|---|---|---|
|
Map |
var1 |
|
int |
var10 |
|
Ref |
var11 |
|
PortalDevice |
var12 |
|
|
var12 |
|
String |
var2 |
|
PortalInstanceLinks.DevicePos |
var4 |
|
PortalInstanceLinks.Link |
var5 |
|
ChunkStore |
var5 |
|
World |
var6 |
|
Store |
var6 |
|
BlockSection |
var7 |
|
BlockComponentSection |
var8 |
|
BlockType |
var9 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var1 != null) |
|
|
if if(var7 != null && var8 != null) |
|
|
if if(var12 == null) |
static |
boolean |
isInDeviceStateboolean isInDeviceState(@Nonnull BlockType var0, @Nonnull PortalDeviceConfig var1) |
static |
void |
relinkvoid relink(@Nonnull World var0,
@Nullable Ref<ChunkStore> var1,
@Nonnull PortalInstanceLinks.DevicePos var2,
@Nonnull PortalInstanceLinks.Link var3,
@Nonnull World var4) |
static |
void |
relinkAllvoid relinkAll(@Nonnull World var0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.portals;
class="kw">import com.hypixel.hytale.builtin.portals.components.PortalDevice;
class="kw">import com.hypixel.hytale.builtin.portals.components.PortalDeviceConfig;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
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.universe.Universe;
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.section.BlockComponentSection;
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.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">final class PortalInstanceRelinker {
class="kw">private PortalInstanceRelinker() {
}
class="kw">public class="kw">static void relinkAll(@Nonnull World var0) {
Map var1 = PortalInstanceLinks.linksFor(var0);
if (var1 != null) {
for (Entry var3 : var1.entrySet()) {
PortalInstanceLinks.DevicePos var4 = var3.getKey();
PortalInstanceLinks.Link var5 = var3.getValue();
World var6 = Universe.get().getWorld(var5.destinationWorldUuid());
if (var6 != null && var6.isAlive()) {
var0.getChunkStore()
.getChunkSectionReferenceAtBlockAsync(var4.x(), var4.y(), var4.z(), 4)
.thenAcceptAsync(var4x -> relink(var0, (Ref<ChunkStore>)var4x, var4, var5, var6), var0)
.exceptionally(
var2 -> {
((HytaleLogger.Api)HytaleLogger.getLogger().at(Level.WARNING).withCause(var2))
.log("Could not re-link the portal device at %d, %d, %d in %s", var4.x(), var4.y(), var4.z(), var0.getName());
class="kw">return null;
}
);
} else {
PortalInstanceLinks.forget(var0, var4);
}
}
}
}
class="kw">private class="kw">static void relink(
@Nonnull World var0,
@Nullable Ref<ChunkStore> var1,
@Nonnull PortalInstanceLinks.DevicePos var2,
@Nonnull PortalInstanceLinks.Link var3,
@Nonnull World var4
) {
if (var1 != null && var1.isValid()) {
ChunkStore var5 = var0.getChunkStore();
Store var6 = var5.getStore();
BlockSection var7 = var6.getComponent(var1, BlockSection.getComponentType());
BlockComponentSection var8 = var6.getComponent(var1, BlockComponentSection.getComponentType());
if (var7 != null && var8 != null) {
BlockType var9 = BlockType.getAssetMap().getAsset(var7.get(var2.x(), var2.y(), var2.z()));
if (var9 != null && isInDeviceState(var9, var3.config())) {
int var10 = ChunkUtil.indexBlock(var2.x(), var2.y(), var2.z());
Ref var11 = var8.getBlockReference(var10);
if (var11 != null && var11.isValid()) {
PortalDevice var12 = var6.getComponent(var11, PortalDevice.getComponentType());
if (var12 == null || var12.getDestinationWorld() == null) {
if (var12 == null) {
var12 = new PortalDevice(var3.config(), var9.getId());
var6.putComponent(var11, PortalDevice.getComponentType(), var12);
}
var12.setDestinationWorld(var4);
var8.markBlockNeedsSaving(var10);
BlockOperations.setBlockInteractionState(var5, var1, var2.x(), var2.y(), var2.z(), var9, var3.config().getOnState(), false);
HytaleLogger.getLogger()
.at(Level.INFO)
.log("Re-linked the portal device at %d, %d, %d in %s to %s", var2.x(), var2.y(), var2.z(), var0.getName(), var4.getName());
}
}
}
}
}
}
class="kw">private class="kw">static boolean isInDeviceState(@Nonnull BlockType var0, @Nonnull PortalDeviceConfig var1) {
if (var0.getState() == null) {
class="kw">return false;
}
String var2 = var0.getStateForBlock(var0);
class="kw">return var2 == null
? false
: Objects.equals(var2, var1.getOnState()) || Objects.equals(var2, var1.getOffState()) || Objects.equals(var2, var1.getSpawningState());
}
}