Ticking class

Пакет: com.hypixel.hytale.builtin.reactiveblocks.systems

Файл: com/hypixel/hytale/builtin/reactiveblocks/systems/ExplosiveSystems.java

extends: EntityTickingSystem<ChunkStore>

Поля (21)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
private final ComponentType<ChunkStore, BlockExplosive> explosiveBlockComponentType
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 var6
BlockModule.BlockStateInfo var7
World var8
Instant var9

Методы (5)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var6 != null && var7 != null)
if if(var11 != null)
if if(var12 != null)
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;
      }
   }
}