PlayerProcessMovementSystem class
Пакет: com.hypixel.hytale.server.core.modules.entity.player
Файл: com/hypixel/hytale/server/core/modules/entity/player/PlayerProcessMovementSystem.java
extends: EntityTickingSystem<EntityStore>
Поля (27)
| Модификаторы | Тип | Имя |
|---|---|---|
static |
boolean |
FIND_MOTION_PATH_TRIGGERS |
|
CollisionResultComponent |
var10 |
|
InteractionManager |
var11 |
|
PlayerRef |
var12 |
|
TransformComponent |
var13 |
|
boolean |
var14 |
|
BoundingBox |
var15 |
|
Box |
var16 |
|
BlockCollisionData |
var17 |
|
PositionDataComponent |
var18 |
|
Store |
var19 |
|
BlockSection |
var20 |
|
PositionDataComponent |
var21 |
|
Vector3i |
var22 |
|
int |
var23 |
|
BlockSection |
var24 |
|
|
var24 |
|
|
var24 |
|
Ref |
var25 |
|
Ref |
var26 |
|
ChunkStore |
var27 |
|
World |
var6 |
|
Ref |
var7 |
|
Player |
var8 |
|
int |
var8 |
|
Velocity |
var9 |
|
Damage |
var9 |
Методы (5)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var11 != null) |
|
|
if if(var14 && FIND_MOTION_PATH_TRIGGERS) |
|
|
if if(var17 != null) |
|
|
if if(var24 != null) |
|
|
if if(var8.executeBlockDamage && var8 > 0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.player;
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.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.server.core.entity.Entity;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.collision.BlockCollisionData;
class="kw">import com.hypixel.hytale.server.core.modules.collision.CollisionModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.CollisionResultComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PositionDataComponent;
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.DamageCause;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageSystems;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.Velocity;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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 com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;
class="kw">public class PlayerProcessMovementSystem class="kw">extends EntityTickingSystem<EntityStore> {
class="kw">private class="kw">static boolean FIND_MOTION_PATH_TRIGGERS = false;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, BoundingBox> boundingBoxComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, Velocity> velocityComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, CollisionResultComponent> collisionResultComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, PositionDataComponent> positionDataComponentType;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public PlayerProcessMovementSystem(
@Nonnull ComponentType<EntityStore, Player> var1,
@Nonnull ComponentType<EntityStore, Velocity> var2,
@Nonnull ComponentType<EntityStore, CollisionResultComponent> var3
) {
this.playerComponentType = var1;
this.velocityComponentType = var2;
this.collisionResultComponentType = var3;
this.boundingBoxComponentType = BoundingBox.getComponentType();
this.playerRefComponentType = PlayerRef.getComponentType();
this.transformComponentType = TransformComponent.getComponentType();
this.positionDataComponentType = PositionDataComponent.getComponentType();
this.query = Query.and(
var1, this.playerRefComponentType, this.transformComponentType, this.boundingBoxComponentType, var2, var3, this.positionDataComponentType
);
}
@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 false;
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5) {
World var6 = var4.getExternalData().getWorld();
Ref var7 = var3.getReferenceTo(var2);
Player var8 = var3.getComponent(var2, this.playerComponentType);
assert var8 != null;
Velocity var9 = var3.getComponent(var2, this.velocityComponentType);
assert var9 != null;
CollisionResultComponent var10 = var3.getComponent(var2, this.collisionResultComponentType);
assert var10 != null;
InteractionManager var11 = var3.getComponent(var2, InteractionModule.get().getInteractionManagerComponent());
if (var11 != null) {
PlayerRef var12 = var3.getComponent(var2, this.playerRefComponentType);
assert var12 != null;
TransformComponent var13 = var3.getComponent(var2, this.transformComponentType);
assert var13 != null;
boolean var14 = var10.isPendingCollisionCheck();
var10.getCollisionStartPositionCopy().set(var14 ? var10.getCollisionStartPosition() : var13.getPosition());
var10.getCollisionPositionOffsetCopy().set(var10.getCollisionPositionOffset());
var10.resetLocationChange();
if (var10.getCollisionPositionOffsetCopy().lengthSquared() >= 100.0) {
if (var8.getGameMode() == GameMode.Adventure) {
Entity.LOGGER
.at(Level.WARNING)
.log(
"%s, %s: Jump in location in processMovementBlockCollisions %s",
var12.getUsername(),
var12.getUuid(),
var10.getCollisionPositionOffsetCopy().length()
);
}
var8.resetVelocity(var9);
} else {
BoundingBox var15 = var3.getComponent(var2, this.boundingBoxComponentType);
assert var15 != null;
Box var16 = var15.getBoundingBox();
if (var14 && FIND_MOTION_PATH_TRIGGERS) {
CollisionModule.findCollisions(
var16, var10.getCollisionStartPositionCopy(), var10.getCollisionPositionOffsetCopy(), var10.getCollisionResult(), var5
);
BlockCollisionData var17 = var10.getCollisionResult().getFirstBlockCollision();
if (var17 != null) {
}
} else {
CollisionModule.get().findIntersections(var6, var16, var10.getCollisionStartPositionCopy(), var10.getCollisionResult(), true, false);
}
var8.processVelocitySample(var1, var10.getCollisionPositionOffsetCopy(), var9);
Ref var26 = var13.getSectionRef();
if (var26 != null && var26.isValid()) {
ChunkStore var27 = var6.getChunkStore();
Store var19 = var27.getStore();
BlockSection var20 = var19.getComponent(var26, BlockSection.getComponentType());
assert var20 != null;
PositionDataComponent var21 = var3.getComponent(var2, this.positionDataComponentType);
assert var21 != null;
Vector3i var22 = Vector3dUtil.toVector3i(var13.getPosition());
var21.setInsideBlockTypeId(var20.get(var22.x, var22.y, var22.z));
int var23 = var22.y - 1;
BlockSection var24;
if (ChunkUtil.chunkCoordinate(var23) == ChunkUtil.chunkCoordinate(var22.y)) {
var24 = var20;
} else {
Ref var25 = var27.getChunkSectionReferenceAtBlock(var22.x, var23, var22.z);
var24 = var25 != null && var25.isValid() ? var19.getComponent(var25, BlockSection.getComponentType()) : null;
}
if (var24 != null) {
var21.setStandingOnBlockTypeId(var24.get(var22.x, var23, var22.z));
} else {
var21.setStandingOnBlockTypeId(0);
}
} else {
PositionDataComponent var18 = var3.getComponent(var2, this.positionDataComponentType);
assert var18 != null;
var18.setInsideBlockTypeId(0);
var18.setStandingOnBlockTypeId(0);
}
var5.run(var7x -> {
int var8 = var10.getCollisionResult().defaultTriggerBlocksProcessing(var11, var8, var7, var8.executeTriggers, var5);
if (var8.executeBlockDamage && var8 > 0) {
Damage var9 = new Damage(Damage.NULL_SOURCE, DamageCause.ENVIRONMENT, var8);
DamageSystems.executeDamage(var2, var3, var5, var9);
}
});
}
}
}
}