ExplosiveSystems class
Пакет: com.hypixel.hytale.builtin.reactiveblocks.systems
Файл: com/hypixel/hytale/builtin/reactiveblocks/systems/ExplosiveSystems.java
Поля (25)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> |
blockStateInfoComponentType |
|
private final ComponentType<ChunkStore, BlockExplosive> |
explosiveBlockComponentType |
|
private final ComponentType<ChunkStore, BlockExplosive> |
explosiveBlockComponentType |
|
private final Query<ChunkStore> |
query |
|
private final Query<ChunkStore> |
query |
|
Ref |
var10 |
|
BlockType |
var10 |
|
ChunkSection |
var11 |
|
BlockSection |
var12 |
|
int |
var13 |
|
int |
var14 |
|
int |
var15 |
|
int |
var16 |
|
int |
var17 |
|
int |
var18 |
|
int |
var19 |
|
int |
var20 |
|
RotationTuple |
var21 |
|
Rotation3f |
var22 |
|
BlockExplosive |
var5 |
|
Instant |
var6 |
|
BlockExplosive |
var6 |
|
BlockModule.BlockStateInfo |
var7 |
|
World |
var8 |
|
Instant |
var9 |
Методы (10)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
OnExplosiveAddedpublic OnExplosiveAdded(@Nonnull ComponentType<ChunkStore, BlockModule.BlockStateInfo> var1) |
|
public |
Tickingpublic Ticking() |
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
|
|
if if(var6 != null && var7 != null) |
|
|
if if(var11 != null) |
|
|
if if(var12 != null) |
|
public void |
onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4) |
|
public void |
onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4) |
|
public void |
tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.reactiveblocks.systems;
class="kw">import com.hypixel.hytale.builtin.reactiveblocks.ReactiveBlocksPlugin;
class="kw">import com.hypixel.hytale.builtin.reactiveblocks.states.BlockExplosive;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
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.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.time.Instant;
class="kw">import java.time.temporal.ChronoUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.checkerframework.checker.nullness.compatqual.NullableDecl;
class="kw">import org.joml.Vector3d;
class="kw">public class ExplosiveSystems {
class="kw">public ExplosiveSystems() {
}
class="kw">public class="kw">static class OnExplosiveAdded class="kw">extends RefSystem<ChunkStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<ChunkStore, BlockExplosive> explosiveBlockComponentType = ReactiveBlocksPlugin.get().getExplosiveComponentType();
@Nonnull
class="kw">private class="kw">final Query<ChunkStore> query;
class="kw">public OnExplosiveAdded(@Nonnull ComponentType<ChunkStore, BlockModule.BlockStateInfo> var1) {
this.query = Query.and(var1, this.explosiveBlockComponentType);
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
BlockExplosive var5 = var4.getComponent(var1, this.explosiveBlockComponentType);
assert var5 != null;
if (var5.getPrimedOnPlace()) {
Instant var6 = Instant.now().plus((long)(var5.getFuseDuration() * 1000.0F), ChronoUnit.MILLIS);
var5.setDetonationInstant(var6);
}
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
) {
}
@Nonnull
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.query;
}
}
class="kw">public class="kw">static class Ticking class="kw">extends EntityTickingSystem<ChunkStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<ChunkStore, BlockExplosive> explosiveBlockComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
@Nonnull
class="kw">private class="kw">final Query<ChunkStore> query;
class="kw">public Ticking() {
this.explosiveBlockComponentType = ReactiveBlocksPlugin.get().getExplosiveComponentType();
this.query = Query.and(this.explosiveBlockComponentType);
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
BlockExplosive var6 = var3.getComponent(var2, this.explosiveBlockComponentType);
BlockModule.BlockStateInfo var7 = var3.getComponent(var2, this.blockStateInfoComponentType);
if (var6 != null && var7 != null) {
World var8 = var5.getExternalData().getWorld();
Instant var9 = var6.getDetonationInstant();
if (var9 != null && !Instant.now().isBefore(var9)) {
Ref var10 = var7.getSectionRef();
if (var10.isValid()) {
ChunkSection var11 = var5.getComponent(var10, ChunkSection.getComponentType());
if (var11 != null) {
BlockSection var12 = var5.getComponent(var10, BlockSection.getComponentType());
if (var12 != null) {
int var13 = var7.getIndex();
int var14 = ChunkUtil.xFromIndex(var13);
int var15 = ChunkUtil.yFromIndex(var13);
int var16 = ChunkUtil.zFromIndex(var13);
int var17 = ChunkUtil.worldCoordFromLocalCoord(var11.getX(), var14);
int var18 = ChunkUtil.worldCoordFromLocalCoord(var11.getY(), var15);
int var19 = ChunkUtil.worldCoordFromLocalCoord(var11.getZ(), var16);
int var20 = var12.getRotationIndex(var17, var15, var19);
RotationTuple var21 = RotationTuple.get(var20);
Rotation3f var22 = new Rotation3f((float)var21.pitch().getRadians(), (float)var21.yaw().getRadians(), (float)var21.roll().getRadians());
var8.execute(
() -> {
BlockType var10 = BlockType.getAssetMap().getAsset(var12.get(var17, var15, var19));
if (var10 != null && var10.isValid()) {
BlockOperations.setBlock(var4.getExternalData(), var10, var17, var18, var19, 0, BlockType.EMPTY, 0, 0, 0);
var6.doExplosion(
var10,
new Vector3d(var17 + 0.5, var18 + 0.5, var19 + 0.5),
var22,
var8.getEntityStore().getStore(),
var8.getChunkStore().getStore()
);
}
}
);
}
}
}
}
}
}
@NullableDecl
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.query;
}
}
}