TrackerUpdate class

Пакет: com.hypixel.hytale.builtin.mounts

Файл: com/hypixel/hytale/builtin/mounts/MountSystems.java

extends: EntityTickingSystem<EntityStore>

Поля (23)

МодификаторыТипИмя
private final ComponentType<EntityStore, MountedComponent> mountedComponentType
private final Query<EntityStore> query
return
return
return
Vector3d var10
Rotation3f var11
BlockMount var12
NetworkId var13
int var15
Ref var3
Ref var4
Vector3fc var5
EntityTrackerSystems.Visible var6
MountedUpdate var6
var6
var6
MountedComponent var7
BlockMountComponent var7
Ref var8
BlockMountPoint var8
BlockType var9
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType

Методы (12)

МодификаторыВозвратСигнатура
abstract throw new UnsupportedOperationExceptionthrow new UnsupportedOperationException("Couldn't create MountedUpdate packet for MountedComponent")
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var13 == null)
if if(var4 == null)
if if(var7 == null)
if if(var8 == null)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
private static void queueUpdatesForprivate static void queueUpdatesFor(@Nonnull Ref<EntityStore> var0, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var1, @Nonnull MountedComponent var2)
abstract queueUpdatesFor queueUpdatesFor(var8, var6.visibleTo, var7)
abstract queueUpdatesFor queueUpdatesFor(var8, var6.newlyVisibleTo, var7)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.mounts;

class="kw">import com.hypixel.hytale.builtin.mounts.minecart.MinecartComponent;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
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.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemGroup;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.OrderPriority;
class="kw">import com.hypixel.hytale.component.dependency.RootDependency;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.dependency.SystemGroupDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
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.vector.Rotation3f;
class="kw">import com.hypixel.hytale.protocol.AnimationSlot;
class="kw">import com.hypixel.hytale.protocol.BlockMount;
class="kw">import com.hypixel.hytale.protocol.ComponentUpdateType;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.protocol.MountController;
class="kw">import com.hypixel.hytale.protocol.MountedUpdate;
class="kw">import com.hypixel.hytale.protocol.MovementStates;
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.mountpoints.BlockMountPoint;
class="kw">import com.hypixel.hytale.server.core.entity.AnimationUtils;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.movement.MovementStatesComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.RespondToHit;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Spectating;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.Damage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageEventSystem;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerInput;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.TeleportSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.EntityTrackerSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabCopyableComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.time.Duration;
class="kw">import java.time.Instant;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector3fc;

class="kw">public class MountSystems {
   class="kw">public MountSystems() {
   }

   class="kw">private class="kw">static void handleMountedRemoval(@Nonnull Ref<EntityStore> var0, @Nonnull CommandBuffer<EntityStore> var1, @Nonnull MountedComponent var2) {
      Ref var3 = var2.getMountedToEntity();
      if (var3 != null && var3.isValid()) {
         MountedByComponent var4 = var1.getComponent(var3, MountedByComponent.getComponentType());
         if (var4 != null) {
            var4.removePassenger(var0);
         }
      }

      Ref var7 = var2.getMountedToBlock();
      if (var7 != null && var7.isValid()) {
         Store var5 = var7.getStore();
         BlockMountComponent var6 = var5.getComponent(var7, BlockMountComponent.getComponentType());
         if (var6 != null) {
            var6.removeSeatedEntity(var0);
            if (var6.isDead()) {
               var5.removeComponent(var7, BlockMountComponent.getComponentType());
            }
         }
      }
   }

   class="kw">public class="kw">static class EnsureMinecartComponents class="kw">extends HolderSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MinecartComponent> minecartComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Interactable> interactableComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, NetworkId> networkIdComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PrefabCopyableComponent> prefabCopyableComponentType;

      class="kw">public EnsureMinecartComponents(
         @Nonnull ComponentType<EntityStore, MinecartComponent> var1,
         @Nonnull ComponentType<EntityStore, Interactable> var2,
         @Nonnull ComponentType<EntityStore, NetworkId> var3,
         @Nonnull ComponentType<EntityStore, PrefabCopyableComponent> var4
      ) {
         this.minecartComponentType = var1;
         this.interactableComponentType = var2;
         this.networkIdComponentType = var3;
         this.prefabCopyableComponentType = var4;
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
         var1.ensureComponent(this.interactableComponentType);
         var1.putComponent(this.networkIdComponentType, new NetworkId(var3.getExternalData().takeNextNetworkId()));
         var1.ensureComponent(this.prefabCopyableComponentType);
         var1.ensureComponent(RespondToHit.getComponentType());
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.minecartComponentType;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return RootDependency.firstSet();
      }
   }

   class="kw">public class="kw">static class HandleMountInput class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerInput> playerInputComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MovementStatesComponent> movementStatesComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> deps = Set.of(new SystemDependency<>(Order.BEFORE, PlayerSystems.ProcessPlayerInput.class));

      class="kw">public HandleMountInput(
         @Nonnull ComponentType<EntityStore, MountedComponent> var1,
         @Nonnull ComponentType<EntityStore, PlayerInput> var2,
         @Nonnull ComponentType<EntityStore, MovementStatesComponent> var3,
         @Nonnull ComponentType<EntityStore, TransformComponent> var4
      ) {
         this.mountedComponentType = var1;
         this.playerInputComponentType = var2;
         this.movementStatesComponentType = var3;
         this.transformComponentType = var4;
         this.query = Query.and(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         MountedComponent var6 = var3.getComponent(var2, this.mountedComponentType);
         assert var6 != null;
         PlayerInput var7 = var3.getComponent(var2, this.playerInputComponentType);
         assert var7 != null;
         MountController var8 = var6.getControllerType();
         Ref var9 = var8 == MountController.BlockMount ? var3.getReferenceTo(var2) : var6.getMountedToEntity();
         if (var9 != null && var9.isValid()) {
            List var10 = var7.getMovementUpdateQueue();

            for (int var11 = 0; var11 < var10.size(); var11++) {
               PlayerInput.InputUpdate var12 = var10.get(var11);
               if (var8 == MountController.BlockMount && (var12 class="kw">instanceof PlayerInput.RelativeMovement || var12 class="kw">instanceof PlayerInput.AbsoluteMovement)) {
                  if (var6.getMountedDurationMs() < 600L) {
                     class="kw">continue;
                  }

                  Ref var13 = var3.getReferenceTo(var2);
                  var5.tryRemoveComponent(var13, this.mountedComponentType);
               }

               if (var12 class="kw">instanceof PlayerInput.SetRiderMovementStates var21) {
                  MovementStates var19 = var21.movementStates();
                  MovementStatesComponent var20 = var3.getComponent(var2, this.movementStatesComponentType);
                  if (var20 != null) {
                     var20.setMovementStates(var19);
                  }
               } else if (!(var12 class="kw">instanceof PlayerInput.WishMovement)) {
                  if (var12 class="kw">instanceof PlayerInput.RelativeMovement var14) {
                     var14.apply(var5, var3, var2);
                     TransformComponent var22 = var5.getComponent(var9, this.transformComponentType);
                     if (var22 != null) {
                        var22.getPosition().add(var14.getX(), var14.getY(), var14.getZ());
                     }
                  } else if (var12 class="kw">instanceof PlayerInput.AbsoluteMovement var15) {
                     var15.apply(var5, var3, var2);
                     TransformComponent var23 = var5.getComponent(var9, this.transformComponentType);
                     if (var23 != null) {
                        var23.getPosition().set(var15.getX(), var15.getY(), var15.getZ());
                     }
                  } else if (var12 class="kw">instanceof PlayerInput.SetMovementStates var16) {
                     MovementStates var24 = var16.movementStates();
                     MovementStatesComponent var26 = var5.getComponent(var9, this.movementStatesComponentType);
                     if (var26 != null) {
                        var26.setMovementStates(var24);
                     }
                  } else if (var12 class="kw">instanceof PlayerInput.SetBody var17) {
                     var17.apply(var5, var3, var2);
                     TransformComponent var25 = var5.getComponent(var9, this.transformComponentType);
                     if (var25 != null) {
                        var25.getRotation().set(var17.direction().pitch, var17.direction().yaw, var17.direction().roll);
                     }
                  } else if (var12 class="kw">instanceof PlayerInput.SetHead var18) {
                     var18.apply(var5, var3, var2);
                  }
               }
            }

            var10.clear();
         }
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.deps;
      }
   }

   class="kw">public class="kw">static class MountedEntityDeath class="kw">extends RefChangeSystem<EntityStore, DeathComponent> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, DeathComponent> deathComponentType;

      class="kw">public MountedEntityDeath(@Nonnull ComponentType<EntityStore, MountedComponent> var1, @Nonnull ComponentType<EntityStore, DeathComponent> var2) {
         this.mountedComponentType = var1;
         this.deathComponentType = var2;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.mountedComponentType;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, DeathComponent> componentType() {
         class="kw">return this.deathComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         var4.removeComponent(var1, this.mountedComponentType);
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         @Nullable DeathComponent var2,
         @Nonnull DeathComponent var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }
   }

   class="kw">public class="kw">static class MountedEntitySpectating class="kw">extends RefChangeSystem<EntityStore, Spectating> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;

      class="kw">public MountedEntitySpectating(@Nonnull ComponentType<EntityStore, MountedComponent> var1) {
         this.mountedComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.mountedComponentType;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, Spectating> componentType() {
         class="kw">return Spectating.getComponentType();
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Spectating var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         var4.removeComponent(var1, this.mountedComponentType);
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         @Nullable Spectating var2,
         @Nonnull Spectating var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull Spectating var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }
   }

   class="kw">public class="kw">static class OnMinecartHit class="kw">extends DamageEventSystem {
      class="kw">private class="kw">static class="kw">final Duration HIT_RESET_TIME = Duration.ofSeconds(10L);
      class="kw">private class="kw">static class="kw">final int NUMBER_OF_HITS = 3;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MinecartComponent> minecartComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;
      @Nonnull
      class="kw">private class="kw">final ResourceType<EntityStore, TimeResource> timeResourceType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
         new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getGatherDamageGroup()),
         new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getFilterDamageGroup()),
         new SystemGroupDependency<>(Order.BEFORE, DamageModule.get().getInspectDamageGroup())
      );

      class="kw">public OnMinecartHit(
         @Nonnull ComponentType<EntityStore, MinecartComponent> var1,
         @Nonnull ComponentType<EntityStore, TransformComponent> var2,
         @Nonnull ComponentType<EntityStore, Player> var3,
         @Nonnull ResourceType<EntityStore, TimeResource> var4
      ) {
         this.minecartComponentType = var1;
         this.transformComponentType = var2;
         this.playerComponentType = var3;
         this.timeResourceType = var4;
         this.query = Archetype.of(var1, var2);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         MinecartComponent var6 = var2.getComponent(var1, this.minecartComponentType);
         assert var6 != null;
         Instant var7 = var4.getResource(this.timeResourceType).getNow();
         if (var6.getLastHit() != null && var7.isAfter(var6.getLastHit().plus(HIT_RESET_TIME))) {
            var6.setLastHit(null);
            var6.setNumberOfHits(0);
         }

         if (!(var5.getAmount() <= 0.0F)) {
            var6.setNumberOfHits(var6.getNumberOfHits() + 1);
            var6.setLastHit(var7);
            if (var6.getNumberOfHits() == 3) {
               var4.removeEntity(var2.getReferenceTo(var1), RemoveReason.REMOVE);
               boolean var8 = true;
               if (var5.getSource() class="kw">instanceof Damage.EntitySource var9) {
                  Player var13 = var9.getRef().isValid() ? var4.getComponent(var9.getRef(), this.playerComponentType) : null;
                  if (var13 != null) {
                     var8 = var13.getGameMode() != GameMode.Creative;
                  }
               }

               if (var8 && var6.getSourceItem() != null) {
                  TransformComponent var12 = var2.getComponent(var1, this.transformComponentType);
                  assert var12 != null;
                  Vector3d var14 = var12.getPosition().add(new Vector3d(0.0, 0.5, 0.0));
                  Holder var11 = ItemComponent.generateItemDrop(var4, new ItemStack(var6.getSourceItem()), var14, var12.getRotation(), 0.0F, 1.0F, 0.0F);
                  if (var11 != null) {
                     var4.addEntity(var11, AddReason.SPAWN);
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class PlayerMount class="kw">extends RefChangeSystem<EntityStore, MountedComponent> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerInput> playerInputComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, NetworkId> networkIdComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public PlayerMount(
         @Nonnull ComponentType<EntityStore, MountedComponent> var1,
         @Nonnull ComponentType<EntityStore, PlayerInput> var2,
         @Nonnull ComponentType<EntityStore, NetworkId> var3
      ) {
         this.mountedComponentType = var1;
         this.playerInputComponentType = var2;
         this.networkIdComponentType = var3;
         this.query = var2;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, MountedComponent> componentType() {
         class="kw">return this.mountedComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull MountedComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         MountedComponent var5 = var4.getComponent(var1, this.mountedComponentType);
         assert var5 != null;
         PlayerInput var6 = var4.getComponent(var1, this.playerInputComponentType);
         assert var6 != null;
         Ref var7 = var5.getMountedToEntity();
         if (var7 != null && var7.isValid()) {
            NetworkId var8 = var4.getComponent(var7, this.networkIdComponentType);
            if (var8 != null) {
               int var9 = var8.getId();
               var6.setMountId(var9);
               var6.getMovementUpdateQueue().clear();
            }
         }
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         @Nullable MountedComponent var2,
         @Nonnull MountedComponent var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull MountedComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         PlayerInput var5 = var4.getComponent(var1, this.playerInputComponentType);
         assert var5 != null;
         var5.setMountId(0);
      }
   }

   class="kw">public class="kw">static class RemoveBlockSeat class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockMountComponent> blockMountComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;

      class="kw">public RemoveBlockSeat(@Nonnull ComponentType<ChunkStore, BlockMountComponent> var1, @Nonnull ComponentType<EntityStore, MountedComponent> var2) {
         this.blockMountComponentType = var1;
         this.mountedComponentType = var2;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         BlockMountComponent var5 = var4.getComponent(var1, this.blockMountComponentType);
         assert var5 != null;
         ObjectArrayList var6 = new ObjectArrayList(var5.getSeatedEntities());
         World var7 = var1.getStore().getExternalData().getWorld();
         ObjectListIterator var8 = var6.iterator();

         while (var8.hasNext()) {
            Ref var9 = (Ref<EntityStore>)var8.next();
            var5.removeSeatedEntity(var9);
            var7.execute(() -> {
               if (var9.isValid()) {
                  var9.getStore().tryRemoveComponent(var9, this.mountedComponentType);
               }
            });
         }
      }

      @Nonnull
      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return this.blockMountComponentType;
      }
   }

   class="kw">public class="kw">static class RemoveMounted class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;

      class="kw">public RemoveMounted(@Nonnull ComponentType<EntityStore, MountedComponent> var1) {
         this.mountedComponentType = var1;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         MountedComponent var5 = var4.getComponent(var1, this.mountedComponentType);
         MountSystems.handleMountedRemoval(var1, var4, var5);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.mountedComponentType;
      }
   }

   class="kw">public class="kw">static class RemoveMountedBy class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedByComponent> mountedByComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;

      class="kw">public RemoveMountedBy(@Nonnull ComponentType<EntityStore, MountedByComponent> var1, @Nonnull ComponentType<EntityStore, MountedComponent> var2) {
         this.mountedByComponentType = var1;
         this.mountedComponentType = var2;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         MountedByComponent var5 = var4.getComponent(var1, this.mountedByComponentType);
         assert var5 != null;

         for (Ref var7 : var5.getPassengers()) {
            if (var7.isValid()) {
               MountedComponent var8 = var4.getComponent(var7, this.mountedComponentType);
               if (var8 != null) {
                  Ref var9 = var8.getMountedToEntity();
                  if (var9 != null && (!var9.isValid() || var9.equals(var1))) {
                     var4.removeComponent(var7, this.mountedComponentType);
                  }
               }
            }
         }
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.mountedByComponentType;
      }
   }

   class="kw">public class="kw">static class RemoveMountedHolder class="kw">extends HolderSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;

      class="kw">public RemoveMountedHolder(@Nonnull ComponentType<EntityStore, MountedComponent> var1) {
         this.mountedComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.mountedComponentType;
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
         var1.removeComponent(this.mountedComponentType);
      }
   }

   class="kw">public class="kw">static class TeleportMountedEntity class="kw">extends RefChangeSystem<EntityStore, Teleport> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Teleport> teleportComponentType;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
         new SystemDependency<>(Order.BEFORE, TeleportSystems.MoveSystem.class, OrderPriority.CLOSEST),
         new SystemDependency<>(Order.BEFORE, TeleportSystems.PlayerMoveSystem.class, OrderPriority.CLOSEST)
      );

      class="kw">public TeleportMountedEntity(@Nonnull ComponentType<EntityStore, MountedComponent> var1, @Nonnull ComponentType<EntityStore, Teleport> var2) {
         this.mountedComponentType = var1;
         this.teleportComponentType = var2;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.mountedComponentType;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, Teleport> componentType() {
         class="kw">return this.teleportComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         var4.removeComponent(var1, this.mountedComponentType);
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         @Nullable Teleport var2,
         @Nonnull Teleport var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }
   }

   class="kw">public class="kw">static class TrackedMounted class="kw">extends RefChangeSystem<EntityStore, MountedComponent> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedByComponent> mountedByComponentType;

      class="kw">public TrackedMounted(@Nonnull ComponentType<EntityStore, MountedComponent> var1, @Nonnull ComponentType<EntityStore, MountedByComponent> var2) {
         this.mountedComponentType = var1;
         this.mountedByComponentType = var2;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.mountedComponentType;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, MountedComponent> componentType() {
         class="kw">return this.mountedComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull MountedComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Ref var5 = var2.getMountedToEntity();
         if (var5 != null && var5.isValid()) {
            MountedByComponent var6 = var4.ensureAndGetComponent(var5, this.mountedByComponentType);
            var6.addPassenger(var1);
         }
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         MountedComponent var2,
         @Nonnull MountedComponent var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull MountedComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         MountSystems.handleMountedRemoval(var1, var4, var2);
      }
   }

   class="kw">public class="kw">static class TrackerRemove class="kw">extends RefChangeSystem<EntityStore, MountedComponent> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;

      class="kw">public TrackerRemove(@Nonnull ComponentType<EntityStore, MountedComponent> var1, @Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var2) {
         this.mountedComponentType = var1;
         this.visibleComponentType = var2;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.visibleComponentType;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, MountedComponent> componentType() {
         class="kw">return this.mountedComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull MountedComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         MountedComponent var2,
         @Nonnull MountedComponent var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull MountedComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         if (var2.getControllerType() == MountController.BlockMount) {
            AnimationUtils.stopAnimation(var1, AnimationSlot.Movement, true, var4);
         }

         EntityTrackerSystems.Visible var5 = var3.getComponent(var1, this.visibleComponentType);
         assert var5 != null;

         for (EntityTrackerSystems.EntityViewer var7 : var5.visibleTo.values()) {
            var7.queueRemove(var1, ComponentUpdateType.Mounted);
         }
      }
   }

   class="kw">public class="kw">static class TrackerUpdate class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public TrackerUpdate(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1, @Nonnull ComponentType<EntityStore, MountedComponent> var2) {
         this.visibleComponentType = var1;
         this.mountedComponentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.QUEUE_UPDATE_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
         assert var6 != null;
         MountedComponent var7 = var3.getComponent(var2, this.mountedComponentType);
         assert var7 != null;
         Ref var8 = var3.getReferenceTo(var2);
         if (var7.consumeNetworkOutdated()) {
            queueUpdatesFor(var8, var6.visibleTo, var7);
         } else if (!var6.newlyVisibleTo.isEmpty()) {
            queueUpdatesFor(var8, var6.newlyVisibleTo, var7);
         }
      }

      class="kw">private class="kw">static void queueUpdatesFor(
         @Nonnull Ref<EntityStore> var0, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var1, @Nonnull MountedComponent var2
      ) {
         Ref var3 = var2.getMountedToEntity();
         Ref var4 = var2.getMountedToBlock();
         Vector3fc var5 = var2.getAttachmentOffset();
         MountedUpdate var6;
         if (var3 != null && var3.isValid()) {
            NetworkId var13 = var0.getStore().getComponent(var3, NetworkId.getComponentType());
            if (var13 == null) {
               class="kw">return;
            }

            int var15 = var13.getId();
            var6 = new MountedUpdate(var15, var5, var2.getControllerType(), null);
         } else {
            if (var4 == null) {
               throw new UnsupportedOperationException("Couldn't create MountedUpdate packet for MountedComponent");
            }

            BlockMountComponent var7 = var4.getStore().getComponent(var4, BlockMountComponent.getComponentType());
            if (var7 == null) {
               class="kw">return;
            }

            BlockMountPoint var8 = var7.getSeatBlockBySeatedEntity(var0);
            if (var8 == null) {
               class="kw">return;
            }

            BlockType var9 = var7.getExpectedBlockType();
            Vector3d var10 = var8.computeWorldSpacePosition(var7.getBlockPos());
            Rotation3f var11 = var8.computeRotationEuler(var7.getExpectedRotation());
            BlockMount var12 = new BlockMount(
               var7.getType(),
               new Vector3f((float)var10.x, (float)var10.y, (float)var10.z),
               new Vector3f(var11.x, var11.y, var11.z),
               BlockType.getAssetMap().getIndex(var9.getId())
            );
            var6 = new MountedUpdate(0, var5, var2.getControllerType(), var12);
         }

         for (EntityTrackerSystems.EntityViewer var16 : var1.values()) {
            var16.queueUpdate(var0, var6);
         }
      }
   }
}