FishingHookRenderer.java
net.minecraft.client.renderer.entity.FishingHookRenderer
信息
- 全限定名:net.minecraft.client.renderer.entity.FishingHookRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.entity
- 源码路径:src/main/java/net/minecraft/client/renderer/entity/FishingHookRenderer.java
- 起始行号:L24
- 继承:EntityRenderer<FishingHook,FishingHookRenderState>
- 职责:
TODO
字段/常量
-
TEXTURE_LOCATION- 类型:
Identifier - 修饰符:
private static final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
RENDER_TYPE- 类型:
RenderType - 修饰符:
private static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
VIEW_BOBBING_SCALE- 类型:
double - 修饰符:
private static final - 源码定位:
L27 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public FishingHookRenderer(EntityRendererProvider.Context context) @ L29
- 构造器名:FishingHookRenderer
- 源码定位:L29
- 修饰符:public
参数:
- context: EntityRendererProvider.Context
说明:
TODO
方法
下面的方法块按源码顺序生成。
public boolean shouldRender(FishingHook entity, Frustum culler, double camX, double camY, double camZ) @ L33
- 方法名:shouldRender
- 源码定位:L33
- 返回类型:boolean
- 修饰符:public
参数:
- entity: FishingHook
- culler: Frustum
- camX: double
- camY: double
- camZ: double
说明:
TODO
public void submit(FishingHookRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L37
- 方法名:submit
- 源码定位:L37
- 返回类型:void
- 修饰符:public
参数:
- state: FishingHookRenderState
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- camera: CameraRenderState
说明:
TODO
public static HumanoidArm getHoldingArm(Player owner) @ L67
- 方法名:getHoldingArm
- 源码定位:L67
- 返回类型:HumanoidArm
- 修饰符:public static
参数:
- owner: Player
说明:
TODO
private Vec3 getPlayerHandPos(Player owner, float swing, float partialTicks) @ L71
- 方法名:getPlayerHandPos
- 源码定位:L71
- 返回类型:Vec3
- 修饰符:private
参数:
- owner: Player
- swing: float
- partialTicks: float
说明:
TODO
private static float fraction(int i, int steps) @ L97
- 方法名:fraction
- 源码定位:L97
- 返回类型:float
- 修饰符:private static
参数:
- i: int
- steps: int
说明:
TODO
private static void vertex(VertexConsumer builder, PoseStack.Pose pose, int lightCoords, float x, int y, int u, int v) @ L101
- 方法名:vertex
- 源码定位:L101
- 返回类型:void
- 修饰符:private static
参数:
- builder: VertexConsumer
- pose: PoseStack.Pose
- lightCoords: int
- x: float
- y: int
- u: int
- v: int
说明:
TODO
private static void stringVertex(float xa, float ya, float za, VertexConsumer stringBuffer, PoseStack.Pose stringPose, float aa, float nexta, float width) @ L110
- 方法名:stringVertex
- 源码定位:L110
- 返回类型:void
- 修饰符:private static
参数:
- xa: float
- ya: float
- za: float
- stringBuffer: VertexConsumer
- stringPose: PoseStack.Pose
- aa: float
- nexta: float
- width: float
说明:
TODO
public FishingHookRenderState createRenderState() @ L124
- 方法名:createRenderState
- 源码定位:L124
- 返回类型:FishingHookRenderState
- 修饰符:public
参数:
- 无
说明:
TODO
public void extractRenderState(FishingHook entity, FishingHookRenderState state, float partialTicks) @ L128
- 方法名:extractRenderState
- 源码定位:L128
- 返回类型:void
- 修饰符:public
参数:
- entity: FishingHook
- state: FishingHookRenderState
- partialTicks: float
说明:
TODO
protected boolean affectedByCulling(FishingHook entity) @ L142
- 方法名:affectedByCulling
- 源码定位:L142
- 返回类型:boolean
- 修饰符:protected
参数:
- entity: FishingHook
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class FishingHookRenderer extends EntityRenderer<FishingHook, FishingHookRenderState> {
private static final Identifier TEXTURE_LOCATION = Identifier.withDefaultNamespace("textures/entity/fishing/fishing_hook.png");
private static final RenderType RENDER_TYPE = RenderTypes.entityCutoutCull(TEXTURE_LOCATION);
private static final double VIEW_BOBBING_SCALE = 960.0;
public FishingHookRenderer(EntityRendererProvider.Context context) {
super(context);
}
public boolean shouldRender(FishingHook entity, Frustum culler, double camX, double camY, double camZ) {
return super.shouldRender(entity, culler, camX, camY, camZ) && entity.getPlayerOwner() != null;
}
public void submit(FishingHookRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
poseStack.pushPose();
poseStack.pushPose();
poseStack.scale(0.5F, 0.5F, 0.5F);
poseStack.mulPose(camera.orientation);
submitNodeCollector.submitCustomGeometry(poseStack, RENDER_TYPE, (pose, buffer) -> {
vertex(buffer, pose, state.lightCoords, 0.0F, 0, 0, 1);
vertex(buffer, pose, state.lightCoords, 1.0F, 0, 1, 1);
vertex(buffer, pose, state.lightCoords, 1.0F, 1, 1, 0);
vertex(buffer, pose, state.lightCoords, 0.0F, 1, 0, 0);
});
poseStack.popPose();
float xa = (float)state.lineOriginOffset.x;
float ya = (float)state.lineOriginOffset.y;
float za = (float)state.lineOriginOffset.z;
float width = Minecraft.getInstance().gameRenderer.getGameRenderState().windowRenderState.appropriateLineWidth;
submitNodeCollector.submitCustomGeometry(poseStack, RenderTypes.lines(), (pose, buffer) -> {
int steps = 16;
for (int i = 0; i < 16; i++) {
float a0 = fraction(i, 16);
float a1 = fraction(i + 1, 16);
stringVertex(xa, ya, za, buffer, pose, a0, a1, width);
stringVertex(xa, ya, za, buffer, pose, a1, a0, width);
}
});
poseStack.popPose();
super.submit(state, poseStack, submitNodeCollector, camera);
}
public static HumanoidArm getHoldingArm(Player owner) {
return owner.getMainHandItem().getItem() instanceof FishingRodItem ? owner.getMainArm() : owner.getMainArm().getOpposite();
}
private Vec3 getPlayerHandPos(Player owner, float swing, float partialTicks) {
int invert = getHoldingArm(owner) == HumanoidArm.RIGHT ? 1 : -1;
if (this.entityRenderDispatcher.options.getCameraType().isFirstPerson() && owner == Minecraft.getInstance().player) {
float fov = this.entityRenderDispatcher.options.fov().get().intValue();
double viewBobbingScale = 960.0 / fov;
Vec3 viewVec = this.entityRenderDispatcher
.camera
.getNearPlane(fov)
.getPointOnPlane(invert * 0.525F, -0.1F)
.scale(viewBobbingScale)
.yRot(swing * 0.5F)
.xRot(-swing * 0.7F);
return owner.getEyePosition(partialTicks).add(viewVec);
} else {
float ownerYRot = Mth.lerp(partialTicks, owner.yBodyRotO, owner.yBodyRot) * (float) (Math.PI / 180.0);
double sin = Mth.sin(ownerYRot);
double cos = Mth.cos(ownerYRot);
float playerScale = owner.getScale();
double rightOffset = invert * 0.35 * playerScale;
double forwardOffset = 0.8 * playerScale;
float yOffset = owner.isCrouching() ? -0.1875F : 0.0F;
return owner.getEyePosition(partialTicks)
.add(-cos * rightOffset - sin * forwardOffset, yOffset - 0.45 * playerScale, -sin * rightOffset + cos * forwardOffset);
}
}
private static float fraction(int i, int steps) {
return (float)i / steps;
}
private static void vertex(VertexConsumer builder, PoseStack.Pose pose, int lightCoords, float x, int y, int u, int v) {
builder.addVertex(pose, x - 0.5F, y - 0.5F, 0.0F)
.setColor(-1)
.setUv(u, v)
.setOverlay(OverlayTexture.NO_OVERLAY)
.setLight(lightCoords)
.setNormal(pose, 0.0F, 1.0F, 0.0F);
}
private static void stringVertex(float xa, float ya, float za, VertexConsumer stringBuffer, PoseStack.Pose stringPose, float aa, float nexta, float width) {
float x = xa * aa;
float y = ya * (aa * aa + aa) * 0.5F + 0.25F;
float z = za * aa;
float nx = xa * nexta - x;
float ny = ya * (nexta * nexta + nexta) * 0.5F + 0.25F - y;
float nz = za * nexta - z;
float length = Mth.sqrt(nx * nx + ny * ny + nz * nz);
nx /= length;
ny /= length;
nz /= length;
stringBuffer.addVertex(stringPose, x, y, z).setColor(-16777216).setNormal(stringPose, nx, ny, nz).setLineWidth(width);
}
public FishingHookRenderState createRenderState() {
return new FishingHookRenderState();
}
public void extractRenderState(FishingHook entity, FishingHookRenderState state, float partialTicks) {
super.extractRenderState(entity, state, partialTicks);
Player owner = entity.getPlayerOwner();
if (owner == null) {
state.lineOriginOffset = Vec3.ZERO;
} else {
float swing = owner.getAttackAnim(partialTicks);
float swing2 = Mth.sin(Mth.sqrt(swing) * (float) Math.PI);
Vec3 playerPos = this.getPlayerHandPos(owner, swing2, partialTicks);
Vec3 hookPos = entity.getPosition(partialTicks).add(0.0, 0.25, 0.0);
state.lineOriginOffset = playerPos.subtract(hookPos);
}
}
protected boolean affectedByCulling(FishingHook entity) {
return false;
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
FishingHookRenderState()
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RenderTypes.entityCutoutCull(), RenderTypes.lines()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.cos(), Mth.lerp(), Mth.sin(), Mth.sqrt()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置: