Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MinecraftForge
GitHub Repository: MinecraftForge/MinecraftForge
Path: blob/1.21.x/src/main/java/net/minecraftforge/client/event/RenderPlayerEvent.java
7045 views
1
/*
2
* Copyright (c) Forge Development LLC and contributors
3
* SPDX-License-Identifier: LGPL-2.1-only
4
*/
5
6
package net.minecraftforge.client.event;
7
8
import com.mojang.blaze3d.vertex.PoseStack;
9
import net.minecraft.client.renderer.LightTexture;
10
import net.minecraft.client.renderer.MultiBufferSource;
11
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
12
import net.minecraft.client.renderer.entity.state.PlayerRenderState;
13
import net.minecraftforge.common.MinecraftForge;
14
import net.minecraftforge.eventbus.api.bus.CancellableEventBus;
15
import net.minecraftforge.eventbus.api.bus.EventBus;
16
import net.minecraftforge.eventbus.api.event.InheritableEvent;
17
import net.minecraftforge.eventbus.api.event.MutableEvent;
18
import net.minecraftforge.eventbus.api.event.characteristic.Cancellable;
19
import net.minecraftforge.fml.LogicalSide;
20
import org.jetbrains.annotations.ApiStatus;
21
22
/**
23
* Fired when a player is being rendered.
24
* See the two subclasses for listening for before and after rendering.
25
*
26
* @see RenderPlayerEvent.Pre
27
* @see RenderPlayerEvent.Post
28
* @see PlayerRenderer
29
*/
30
public abstract sealed class RenderPlayerEvent extends MutableEvent implements InheritableEvent {
31
public static final EventBus<RenderPlayerEvent> BUS = EventBus.create(RenderPlayerEvent.class);
32
33
private final PlayerRenderState state;
34
private final PlayerRenderer renderer;
35
private final PoseStack poseStack;
36
private final MultiBufferSource multiBufferSource;
37
private final int packedLight;
38
39
@ApiStatus.Internal
40
protected RenderPlayerEvent(PlayerRenderState state, PlayerRenderer renderer, PoseStack poseStack, MultiBufferSource multiBufferSource, int packedLight) {
41
this.state = state;
42
this.renderer = renderer;
43
this.poseStack = poseStack;
44
this.multiBufferSource = multiBufferSource;
45
this.packedLight = packedLight;
46
}
47
48
public PlayerRenderState getState() {
49
return this.state;
50
}
51
52
/**
53
* {@return the player entity renderer}
54
*/
55
public PlayerRenderer getRenderer() {
56
return renderer;
57
}
58
59
/**
60
* {@return the pose stack used for rendering}
61
*/
62
public PoseStack getPoseStack() {
63
return poseStack;
64
}
65
66
/**
67
* {@return the source of rendering buffers}
68
*/
69
public MultiBufferSource getMultiBufferSource() {
70
return multiBufferSource;
71
}
72
73
/**
74
* {@return the amount of packed (sky and block) light for rendering}
75
*
76
* @see LightTexture
77
*/
78
public int getPackedLight() {
79
return packedLight;
80
}
81
82
/**
83
* Fired <b>before</b> the player is rendered.
84
* This can be used for rendering additional effects or suppressing rendering.
85
*
86
* <p>This event is {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}.
87
* If this event is cancelled, then the player will not be rendered and the corresponding
88
* {@link RenderPlayerEvent.Post} will not be fired.</p>
89
*
90
* <p>This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
91
* only on the {@linkplain LogicalSide#CLIENT logical client}.</p>
92
*/
93
public static final class Pre extends RenderPlayerEvent implements Cancellable {
94
public static final CancellableEventBus<Pre> BUS = CancellableEventBus.create(Pre.class);
95
96
@ApiStatus.Internal
97
public Pre(PlayerRenderState state, PlayerRenderer renderer, PoseStack poseStack, MultiBufferSource multiBufferSource, int packedLight) {
98
super(state, renderer, poseStack, multiBufferSource, packedLight);
99
}
100
}
101
102
/**
103
* Fired <b>after</b> the player is rendered, if the corresponding {@link RenderPlayerEvent.Pre} is not cancelled.
104
*
105
* <p>This event is not {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}.</p>
106
*
107
* <p>This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
108
* only on the {@linkplain LogicalSide#CLIENT logical client}.</p>
109
*/
110
public static final class Post extends RenderPlayerEvent {
111
public static final EventBus<Post> BUS = EventBus.create(Post.class);
112
113
@ApiStatus.Internal
114
public Post(PlayerRenderState state, PlayerRenderer renderer, PoseStack poseStack, MultiBufferSource multiBufferSource, int packedLight) {
115
super(state, renderer, poseStack, multiBufferSource, packedLight);
116
}
117
}
118
}
119
120