OnExplosiveAdded class

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

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

extends: RefSystem<ChunkStore>

Поля (4)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BlockExplosive> explosiveBlockComponentType
private final Query<ChunkStore> query
BlockExplosive var5
Instant var6

Методы (3)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
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)

Исходный код

Показать/скрыть
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;
      }
   }
}