Skip to content

Commit fd336ce

Browse files
authored
Add RenderArmEvent (#507)
1 parent b9f995a commit fd336ce

File tree

3 files changed

+100
-4
lines changed

3 files changed

+100
-4
lines changed

patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.java.patch

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,31 @@
1616
}
1717

1818
private void setModelVisibilities(AbstractClientPlayer clientPlayer)
19-
@@ -127,6 +129,11 @@
20-
if (enumaction1 == EnumAction.BLOCK)
19+
@@ -128,6 +130,11 @@
2120
{
2221
modelbiped$armpose1 = ModelBiped.ArmPose.BLOCK;
23-
+ }
22+
}
2423
+ // FORGE: fix MC-88356 allow offhand to use bow and arrow animation
2524
+ else if (enumaction1 == EnumAction.BOW)
2625
+ {
2726
+ modelbiped$armpose1 = ModelBiped.ArmPose.BOW_AND_ARROW;
28-
}
27+
+ }
2928
}
3029
}
30+
31+
@@ -183,6 +190,7 @@
32+
33+
public void renderRightArm(AbstractClientPlayer clientPlayer)
34+
{
35+
+ if (net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonArm(this, clientPlayer, EnumHandSide.RIGHT)) return;
36+
float f = 1.0F;
37+
GlStateManager.color(1.0F, 1.0F, 1.0F);
38+
float f1 = 0.0625F;
39+
@@ -201,6 +209,7 @@
40+
41+
public void renderLeftArm(AbstractClientPlayer clientPlayer)
42+
{
43+
+ if (net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonArm(this, clientPlayer, EnumHandSide.LEFT)) return;
44+
float f = 1.0F;
45+
GlStateManager.color(1.0F, 1.0F, 1.0F);
46+
float f1 = 0.0625F;

src/main/java/net/minecraftforge/client/ForgeHooksClient.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import net.minecraft.client.audio.ISound;
4444
import net.minecraft.client.audio.SoundHandler;
4545
import net.minecraft.client.audio.SoundManager;
46+
import net.minecraft.client.entity.AbstractClientPlayer;
4647
import net.minecraft.client.gui.BossInfoClient;
4748
import net.minecraft.client.gui.FontRenderer;
4849
import net.minecraft.client.gui.GuiMainMenu;
@@ -68,6 +69,7 @@
6869
import net.minecraft.client.renderer.block.model.SimpleBakedModel;
6970
import net.minecraft.client.renderer.color.BlockColors;
7071
import net.minecraft.client.renderer.color.ItemColors;
72+
import net.minecraft.client.renderer.entity.RenderPlayer;
7173
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
7274
import net.minecraft.client.renderer.texture.TextureManager;
7375
import net.minecraft.client.renderer.texture.TextureMap;
@@ -94,6 +96,7 @@
9496
import net.minecraft.util.BlockRenderLayer;
9597
import net.minecraft.util.EnumFacing;
9698
import net.minecraft.util.EnumHand;
99+
import net.minecraft.util.EnumHandSide;
97100
import net.minecraft.util.MovementInput;
98101
import net.minecraft.util.ResourceLocation;
99102
import net.minecraft.util.math.BlockPos;
@@ -111,6 +114,7 @@
111114
import net.minecraftforge.client.event.InputUpdateEvent;
112115
import net.minecraftforge.client.event.ModelBakeEvent;
113116
import net.minecraftforge.client.event.MouseEvent;
117+
import net.minecraftforge.client.event.RenderArmEvent;
114118
import net.minecraftforge.client.event.RenderGameOverlayEvent;
115119
import net.minecraftforge.client.event.RenderHandEvent;
116120
import net.minecraftforge.client.event.RenderSpecificHandEvent;
@@ -193,6 +197,11 @@ public static boolean renderSpecificFirstPersonHand(EnumHand hand, float partial
193197
return MinecraftForge.EVENT_BUS.post(new RenderSpecificHandEvent(hand, partialTicks, interpPitch, swingProgress, equipProgress, stack));
194198
}
195199

200+
public static boolean renderSpecificFirstPersonArm(RenderPlayer renderer, AbstractClientPlayer player, EnumHandSide arm)
201+
{
202+
return MinecraftForge.EVENT_BUS.post(new RenderArmEvent(renderer, player, arm));
203+
}
204+
196205
public static void onTextureStitchedPre(TextureMap map)
197206
{
198207
MinecraftForge.EVENT_BUS.post(new TextureStitchEvent.Pre(map));
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Minecraft Forge
3+
* Copyright (c) 2016-2021.
4+
*
5+
* This library is free software; you can redistribute it and/or
6+
* modify it under the terms of the GNU Lesser General Public
7+
* License as published by the Free Software Foundation version 2.1
8+
* of the License.
9+
*
10+
* This library is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13+
* Lesser General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU Lesser General Public
16+
* License along with this library; if not, write to the Free Software
17+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18+
*/
19+
20+
package net.minecraftforge.client.event;
21+
22+
import net.minecraft.client.entity.AbstractClientPlayer;
23+
import net.minecraft.client.renderer.entity.RenderPlayer;
24+
import net.minecraft.util.EnumHandSide;
25+
import net.minecraftforge.fml.common.eventhandler.Cancelable;
26+
import net.minecraftforge.fml.common.eventhandler.Event;
27+
28+
/**
29+
* This is a more targeted version of {@link RenderHandEvent} event that is fired specifically when
30+
* a player's arm is being rendered in first person, and should be used instead if the desired
31+
* outcome is just to replace the rendering of the arm, such as to make armor render on it or
32+
* instead of it.
33+
*
34+
* This event is fired on the {@link net.minecraftforge.common.MinecraftForge#EVENT_BUS}
35+
* Canceling the event causes the arm to not render.
36+
*/
37+
@Cancelable
38+
public class RenderArmEvent extends Event
39+
{
40+
private final RenderPlayer renderer;
41+
private final AbstractClientPlayer player;
42+
private final EnumHandSide arm;
43+
44+
public RenderArmEvent(RenderPlayer renderer, AbstractClientPlayer player, EnumHandSide arm)
45+
{
46+
this.renderer = renderer;
47+
this.player = player;
48+
this.arm = arm;
49+
}
50+
51+
/**
52+
* @return The arm being rendered.
53+
*/
54+
public EnumHandSide getArm()
55+
{
56+
return arm;
57+
}
58+
59+
public RenderPlayer getRenderer()
60+
{
61+
return renderer;
62+
}
63+
64+
/**
65+
* @return the client player that is having their arm rendered. In general this will be the same as {@link net.minecraft.client.Minecraft#player}.
66+
*/
67+
public AbstractClientPlayer getPlayer()
68+
{
69+
return player;
70+
}
71+
}

0 commit comments

Comments
 (0)