EntityHitboxDebugRenderer.java
net.minecraft.client.renderer.debug.EntityHitboxDebugRenderer
信息
- 全限定名:net.minecraft.client.renderer.debug.EntityHitboxDebugRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.debug
- 源码路径:src/main/java/net/minecraft/client/renderer/debug/EntityHitboxDebugRenderer.java
- 起始行号:L25
- 实现:DebugRenderer.SimpleDebugRenderer
- 职责:
TODO
字段/常量
minecraft- 类型:
Minecraft - 修饰符:
final - 源码定位:
L26 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public EntityHitboxDebugRenderer(Minecraft minecraft) @ L28
- 构造器名:EntityHitboxDebugRenderer
- 源码定位:L28
- 修饰符:public
参数:
- minecraft: Minecraft
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) @ L32
- 方法名:emitGizmos
- 源码定位:L32
- 返回类型:void
- 修饰符:public
参数:
- camX: double
- camY: double
- camZ: double
- debugValues: DebugValueAccess
- frustum: Frustum
- partialTicks: float
说明:
TODO
private Entity getServerEntity(Entity entity) @ L60
- 方法名:getServerEntity
- 源码定位:L60
- 返回类型:Entity
- 修饰符:private
参数:
- entity: Entity
说明:
TODO
private void showHitboxes(Entity entity, float partialTicks, boolean isServerEntity) @ L72
- 方法名:showHitboxes
- 源码定位:L72
- 返回类型:void
- 修饰符:private
参数:
- entity: Entity
- partialTicks: float
- isServerEntity: boolean
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class EntityHitboxDebugRenderer implements DebugRenderer.SimpleDebugRenderer {
final Minecraft minecraft;
public EntityHitboxDebugRenderer(Minecraft minecraft) {
this.minecraft = minecraft;
}
@Override
public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) {
if (this.minecraft.level != null) {
for (Entity entity : this.minecraft.level.entitiesForRendering()) {
if (!entity.isInvisible()
&& frustum.isVisible(entity.getBoundingBox())
&& (entity != this.minecraft.getCameraEntity() || this.minecraft.options.getCameraType() != CameraType.FIRST_PERSON)) {
float entityPartialTicks = this.minecraft
.getDeltaTracker()
.getGameTimeDeltaPartialTick(!this.minecraft.level.tickRateManager().isEntityFrozen(entity));
this.showHitboxes(entity, entityPartialTicks, false);
if (SharedConstants.DEBUG_SHOW_LOCAL_SERVER_ENTITY_HIT_BOXES) {
Entity serverEntity = this.getServerEntity(entity);
if (serverEntity != null) {
this.showHitboxes(entity, entityPartialTicks, true);
} else {
Gizmos.billboardText(
"Missing Server Entity",
entity.getPosition(entityPartialTicks).add(0.0, entity.getBoundingBox().getYsize() + 1.5, 0.0),
TextGizmo.Style.forColorAndCentered(-65536)
);
}
}
}
}
}
}
private @Nullable Entity getServerEntity(Entity entity) {
IntegratedServer server = this.minecraft.getSingleplayerServer();
if (server != null) {
ServerLevel level = server.getLevel(entity.level().dimension());
if (level != null) {
return level.getEntity(entity.getId());
}
}
return null;
}
private void showHitboxes(Entity entity, float partialTicks, boolean isServerEntity) {
Vec3 latestPosition = entity.position();
Vec3 currentPosition = entity.getPosition(partialTicks);
Vec3 offset = currentPosition.subtract(latestPosition);
int mainColor = isServerEntity ? -16711936 : -1;
Gizmos.cuboid(entity.getBoundingBox().move(offset), GizmoStyle.stroke(mainColor));
Gizmos.point(currentPosition, mainColor, 2.0F);
Entity vehicle = entity.getVehicle();
if (vehicle != null) {
float width = Math.min(vehicle.getBbWidth(), entity.getBbWidth()) / 2.0F;
float height = 0.0625F;
Vec3 position = vehicle.getPassengerRidingPosition(entity).add(offset);
Gizmos.cuboid(
new AABB(position.x - width, position.y, position.z - width, position.x + width, position.y + 0.0625, position.z + width),
GizmoStyle.stroke(-256)
);
}
if (entity instanceof LivingEntity) {
AABB bb = entity.getBoundingBox().move(offset);
float padding = 0.01F;
Gizmos.cuboid(
new AABB(bb.minX, bb.minY + entity.getEyeHeight() - 0.01F, bb.minZ, bb.maxX, bb.minY + entity.getEyeHeight() + 0.01F, bb.maxZ),
GizmoStyle.stroke(-65536)
);
}
if (entity instanceof EnderDragon dragon) {
for (EnderDragonPart subEntity : dragon.getSubEntities()) {
Vec3 latestSubPosition = subEntity.position();
Vec3 currentSubPosition = subEntity.getPosition(partialTicks);
Vec3 subOffset = currentSubPosition.subtract(latestSubPosition);
Gizmos.cuboid(subEntity.getBoundingBox().move(subOffset), GizmoStyle.stroke(ARGB.colorFromFloat(1.0F, 0.25F, 1.0F, 0.0F)));
}
}
Vec3 eyePosition = currentPosition.add(0.0, entity.getEyeHeight(), 0.0);
Vec3 viewVector = entity.getViewVector(partialTicks);
Gizmos.arrow(eyePosition, eyePosition.add(viewVector.scale(2.0)), -16776961);
if (isServerEntity) {
Vec3 deltaMovement = entity.getDeltaMovement();
Gizmos.arrow(currentPosition, currentPosition.add(deltaMovement), -256);
}
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GizmoStyle.stroke()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Gizmos.arrow(), Gizmos.billboardText(), Gizmos.cuboid(), Gizmos.point()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TextGizmo.Style.forColorAndCentered()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ARGB.colorFromFloat()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
AABB()
- 引用位置: