Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Animations & CustomFOV: much more customization #857

Merged
merged 6 commits into from
Dec 6, 2024
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 151 additions & 21 deletions src/main/java/keystrokesmod/module/impl/render/Animations.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import keystrokesmod.module.impl.combat.KillAura;
import keystrokesmod.module.impl.other.SlotHandler;
import keystrokesmod.module.setting.impl.ButtonSetting;
import keystrokesmod.module.setting.impl.DescriptionSetting;
import keystrokesmod.module.setting.impl.ModeSetting;
import keystrokesmod.module.setting.impl.SliderSetting;
import keystrokesmod.utility.Utils;
Expand All @@ -28,16 +29,51 @@ public class Animations extends Module {
private final ModeSetting swingAnimation = new ModeSetting("Swing animation", new String[]{"None", "1.9+", "Smooth", "Punch", "Shove"}, 0);
private final ModeSetting otherAnimation = new ModeSetting("Other animation", new String[]{"None", "1.7"}, 1);
private final ButtonSetting fakeSlotReset = new ButtonSetting("Fake slot reset", false);
private final SliderSetting x = new SliderSetting("X", 0, -1, 1, 0.05);
private final SliderSetting y = new SliderSetting("Y", 0, -1, 1, 0.05);
private final SliderSetting z = new SliderSetting("Z", 0, -1, 1, 0.05);
private final SliderSetting swingSpeed = new SliderSetting("Swing speed", 0, -200, 50, 5);

private final ButtonSetting modifyAnimations = new ButtonSetting("Customize Animations", false);
private final SliderSetting staticStartSwingProgress = new SliderSetting("Starting Swing Progress", 0, -1, 2.5, 0.1, modifyAnimations::isToggled);
private final SliderSetting swingSpeed = new SliderSetting("Swing speed", 0, -200, 50, 5, modifyAnimations::isToggled);
//translation
private final SliderSetting translatex = new SliderSetting("X", 0, -4, 4, 0.05);
private final SliderSetting translatey = new SliderSetting("Y", 0, -2, 2, 0.05);
private final SliderSetting translatez = new SliderSetting("Z", 0, -10, 10, 0.05);

private final ButtonSetting precustomtranslation = new ButtonSetting("Custom Translation (pre)", false);
private final SliderSetting pretranslatex = new SliderSetting("X", 0, -4, 4, 0.05, precustomtranslation::isToggled);
private final SliderSetting pretranslatey = new SliderSetting("Y", 0, -2, 2, 0.05, precustomtranslation::isToggled);
private final SliderSetting pretranslatez = new SliderSetting("Z", 0, -6, 3, 0.05, precustomtranslation::isToggled);

private final ButtonSetting customscaling = new ButtonSetting("Custom Scaling", false);
private final SliderSetting scalex = new SliderSetting("ScaleX", 1, -1, 5, 0.05, customscaling::isToggled);
private final SliderSetting scaley = new SliderSetting("ScaleY", 1, -1, 5, 0.05, customscaling::isToggled);
private final SliderSetting scalez = new SliderSetting("ScaleZ", 1, -1, 5, 0.05, customscaling::isToggled);

private final ButtonSetting customrotation = new ButtonSetting("Custom Rotation", false);
private final SliderSetting rotatex = new SliderSetting("rotation x", 0, -180, 180, 1, customrotation::isToggled);
private final SliderSetting rotatey = new SliderSetting("rotation y", 0, -180, 180, 1, customrotation::isToggled);
private final SliderSetting rotatez = new SliderSetting("rotation z", 0, -180, 180, 1, customrotation::isToggled);


private int swing;

private static final double staticscalemultiplier_x = 1;
private static final double staticscalemultiplier_y = 1;
private static final double staticscalemultiplier_z = 1;
Comment on lines +60 to +62
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Use camelCase for variable names to adhere to Java conventions

The variables staticscalemultiplier_x, staticscalemultiplier_y, and staticscalemultiplier_z should use camelCase naming conventions in Java.

Apply this diff to rename the variables:

- private static final double staticscalemultiplier_x = 1;
- private static final double staticscalemultiplier_y = 1;
- private static final double staticscalemultiplier_z = 1;
+ private static final double staticScaleMultiplierX = 1;
+ private static final double staticScaleMultiplierY = 1;
+ private static final double staticScaleMultiplierZ = 1;

Also, update their usage in the scale() method.

Committable suggestion skipped: line range outside the PR's diff.

float staticStartSwingProgressFloat;


public Animations() {
super("Animations", category.render);
this.registerSetting(blockAnimation, swingAnimation, otherAnimation, swingWhileDigging, clientSide, fakeSlotReset, x, y, z, swingSpeed);
this.registerSetting(blockAnimation, swingAnimation, otherAnimation, swingWhileDigging, clientSide, fakeSlotReset);

this.registerSetting(modifyAnimations);
this.registerSetting(staticStartSwingProgress, swingSpeed);
this.registerSetting(new DescriptionSetting("Custom Translation"));
this.registerSetting(translatex, translatey, translatez);
this.registerSetting(precustomtranslation, pretranslatex, pretranslatey, pretranslatez);
this.registerSetting(customscaling, scalex, scaley, scalez);
this.registerSetting(customrotation, rotatex, rotatey, rotatez);

}

@SubscribeEvent
Expand Down Expand Up @@ -81,34 +117,62 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
float swingProgress = event.getSwingProgress();
final float convertedProgress = MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float) Math.PI);

this.translate(x.getInput(), y.getInput(), z.getInput());

if(modifyAnimations.isToggled()) {
staticStartSwingProgressFloat = ((float) staticStartSwingProgress.getInput());
} else{
staticStartSwingProgressFloat = 0.0F;
}
Comment on lines +121 to +124
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Initialize staticStartSwingProgressFloat outside the condition

Currently, staticStartSwingProgressFloat is conditionally initialized, which may lead to uninitialized usage if modifyAnimations is not toggled. It's advisable to initialize it outside the condition to ensure it always has a defined value.

Consider modifying the code as follows:

- if(modifyAnimations.isToggled()) {
-     staticStartSwingProgressFloat = ((float) staticStartSwingProgress.getInput());
- } else{
-     staticStartSwingProgressFloat = 0.0F;
- }
+ staticStartSwingProgressFloat = 0.0F;
+ if(modifyAnimations.isToggled()) {
+     staticStartSwingProgressFloat = ((float) staticStartSwingProgress.getInput());
+ }

This ensures that staticStartSwingProgressFloat is always initialized before use.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
staticStartSwingProgressFloat = ((float) staticStartSwingProgress.getInput());
} else{
staticStartSwingProgressFloat = 0.0F;
}
staticStartSwingProgressFloat = 0.0F;
if(modifyAnimations.isToggled()) {
staticStartSwingProgressFloat = ((float) staticStartSwingProgress.getInput());
}


if(precustomtranslation.isToggled()) {
this.pretranslate(pretranslatex.getInput(), pretranslatey.getInput(), pretranslatez.getInput());

}

if(customrotation.isToggled()) {
this.rotate((float) rotatex.getInput(), (float) rotatey.getInput(), (float) rotatez.getInput());

}
Comment on lines +132 to +134
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Rotate method may not apply rotations as expected

In the onRenderItem method, when customrotation is toggled, the rotate() method is called with parameters cast to float, but inside rotate(), the settings are retrieved again. This might lead to applying rotations twice or unexpected behavior.

Consider adjusting the rotate() method to use the parameters passed instead of retrieving the settings again:

private void rotate(float rotatex, float rotatey, float rotatez) {
-    GlStateManager.rotate((float) this.rotatex.getInput(), 1, 0, 0);
-    GlStateManager.rotate((float) this.rotatey.getInput(), 0, 1, 0);
-    GlStateManager.rotate((float) this.rotatez.getInput(), 0, 0, 1);
+    GlStateManager.rotate(rotatex, 1, 0, 0);
+    GlStateManager.rotate(rotatey, 0, 1, 0);
+    GlStateManager.rotate(rotatez, 0, 0, 1);
}

And ensure that you are passing the correct values when calling rotate().

Committable suggestion skipped: line range outside the PR's diff.


if(customscaling.isToggled()) {
this.scale(1, 1, 1);
}
Comment on lines +137 to +138
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Scaling method uses hard-coded values

In the onRenderItem method, when customscaling is toggled, the scale() method is called with parameters (1, 1, 1), which may not reflect the intended custom scaling based on user input.

Consider passing the scaling inputs to the scale() method:

- this.scale(1, 1, 1);
+ this.scale(scalex.getInput(), scaley.getInput(), scalez.getInput());

And adjust the scale() method accordingly to avoid multiplying the settings twice.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
this.scale(1, 1, 1);
}
this.scale(scalex.getInput(), scaley.getInput(), scalez.getInput());
}



this.translate(translatex.getInput(), translatey.getInput(), translatez.getInput());


if (event.isUseItem()) {
switch (itemAction) {
case NONE:
switch ((int) otherAnimation.getInput()) {
case 0:
itemRenderer.transformFirstPersonItem(animationProgression, 0.0F);
//none
itemRenderer.transformFirstPersonItem(animationProgression, staticStartSwingProgressFloat);
break;
case 1:
//1.7
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
break;
}
break;
case BLOCK:
switch ((int) blockAnimation.getInput()) {
case 0:
itemRenderer.transformFirstPersonItem(animationProgression, 0.0F);
//none
itemRenderer.transformFirstPersonItem(animationProgression, staticStartSwingProgressFloat);
itemRenderer.blockTransformation();
break;

case 1:
//1.7
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
itemRenderer.blockTransformation();
break;

case 2:
itemRenderer.transformFirstPersonItem(animationProgression, 0.0F);
//smooth
itemRenderer.transformFirstPersonItem(animationProgression, staticStartSwingProgressFloat);
final float y = -convertedProgress * 2.0F;
this.translate(0.0F, y / 10.0F + 0.1F, 0.0F);
GlStateManager.rotate(y * 10.0F, 0.0F, 1.0F, 0.0F);
Expand All @@ -118,14 +182,16 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
break;

case 3:
itemRenderer.transformFirstPersonItem(animationProgression / 2.0F, 0.0F);
//exhibition
itemRenderer.transformFirstPersonItem(animationProgression / 2.0F, staticStartSwingProgressFloat);
this.translate(0.0F, 0.3F, -0.0F);
GlStateManager.rotate(-convertedProgress * 31.0F, 1.0F, 0.0F, 2.0F);
GlStateManager.rotate(-convertedProgress * 33.0F, 1.5F, (convertedProgress / 1.1F), 0.0F);
itemRenderer.blockTransformation();
break;

case 4:
//stab
final float spin = MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float) Math.PI);

this.translate(0.6f, 0.3f, -0.6f + -spin * 0.7);
Expand All @@ -137,7 +203,8 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
break;

case 5:
itemRenderer.transformFirstPersonItem(animationProgression, 0.0F);
//spin
itemRenderer.transformFirstPersonItem(animationProgression, staticStartSwingProgressFloat);
this.translate(0, 0.2F, -1);
GlStateManager.rotate(-59, -1, 0, 3);
// Don't cast as float
Expand All @@ -146,16 +213,17 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
break;

case 6:
itemRenderer.transformFirstPersonItem(animationProgression, 0.0F);
//sigma
itemRenderer.transformFirstPersonItem(animationProgression, staticStartSwingProgressFloat);
this.translate(0.0f, 0.1F, 0.0F);
itemRenderer.blockTransformation();
GlStateManager.rotate(convertedProgress * 35.0F / 2.0F, 0.0F, 1.0F, 1.5F);
GlStateManager.rotate(-convertedProgress * 135.0F / 4.0F, 1.0f, 1.0F, 0.0F);

break;

case 7:
itemRenderer.transformFirstPersonItem(animationProgression / 2.0F, 0.0F);
//wood
itemRenderer.transformFirstPersonItem(animationProgression / 2.0F, staticStartSwingProgressFloat);
this.translate(0.0F, 0.3F, -0.0F);
GlStateManager.rotate(-convertedProgress * 30.0F, 1.0F, 0.0F, 2.0F);
GlStateManager.rotate(-convertedProgress * 44.0F, 1.5F, (convertedProgress / 1.2F), 0.0F);
Expand All @@ -164,6 +232,7 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
break;

case 8:
//swong
itemRenderer.transformFirstPersonItem(animationProgression / 2.0F, swingProgress);
GlStateManager.rotate(convertedProgress * 30.0F / 2.0F, -convertedProgress, -0.0F, 9.0F);
GlStateManager.rotate(convertedProgress * 40.0F, 1.0F, -convertedProgress / 2.0F, -0.0F);
Expand All @@ -173,13 +242,15 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
break;

case 9:
//chill
itemRenderer.transformFirstPersonItem(-0.25F, 1.0F + convertedProgress / 10.0F);
GL11.glRotated(-convertedProgress * 25.0F, 1.0F, 0.0F, 0.0F);
itemRenderer.blockTransformation();

break;

case 10:
//komorebi
this.translate(0.41F, -0.25F, -0.5555557F);
this.translate(0.0F, 0, 0.0F);
GlStateManager.rotate(35.0F, 0f, 1.5F, 0.0F);
Expand All @@ -194,21 +265,29 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
break;

case 11:
//rhys
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
itemRenderer.blockTransformation();
this.translate(-0.3F, -0.1F, -0.0F);
break;

case 12:
//Allah
itemRenderer.transformFirstPersonItem(animationProgression, staticStartSwingProgressFloat);
itemRenderer.blockTransformation();
break;
}
break;
case EAT:
case DRINK:
switch ((int) otherAnimation.getInput()) {
case 0:
//none
func_178104_a(mc.thePlayer.getHeldItem(), mc.thePlayer, event.getPartialTicks());
itemRenderer.transformFirstPersonItem(animationProgression, 0.0F);
break;
case 1:
//1.7
func_178104_a(mc.thePlayer.getHeldItem(), mc.thePlayer, event.getPartialTicks());
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
break;
Expand All @@ -217,10 +296,12 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
case BOW:
switch ((int) otherAnimation.getInput()) {
case 0:
//none
itemRenderer.transformFirstPersonItem(animationProgression, 0.0F);
func_178098_a(mc.thePlayer.getHeldItem(), event.getPartialTicks(), mc.thePlayer);
break;
case 1:
//1.7
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
func_178098_a(mc.thePlayer.getHeldItem(), event.getPartialTicks(), mc.thePlayer);
break;
Expand All @@ -233,28 +314,33 @@ public void onRenderItem(@NotNull RenderItemEvent event) {
} else {
switch ((int) swingAnimation.getInput()) {
case 0:
//none
func_178105_d(swingProgress);
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
break;

case 1:
//1.9+
func_178105_d(swingProgress);
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
this.translate(0, -((swing - 1) -
(swing == 0 ? 0 : Utils.getTimer().renderPartialTicks)) / 5f, 0);
break;

case 2:
//smooth
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
func_178105_d(animationProgression);
break;

case 3:
//punch
itemRenderer.transformFirstPersonItem(animationProgression, swingProgress);
func_178105_d(swingProgress);
break;

case 4:
//shove
itemRenderer.transformFirstPersonItem(animationProgression, animationProgression);
func_178105_d(swingProgress);
break;
Expand All @@ -280,19 +366,63 @@ public void onPreMotion(PreMotionEvent event) {

@SubscribeEvent
public void onSwingAnimation(@NotNull SwingAnimationEvent event) {
event.setAnimationEnd(event.getAnimationEnd() * (int) ((-swingSpeed.getInput() / 100) + 1));
if(modifyAnimations.isToggled()) {
event.setAnimationEnd(event.getAnimationEnd() * (int) ((-swingSpeed.getInput() / 100) + 1));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Avoid integer truncation when setting animation end in onSwingAnimation

In the onSwingAnimation method, casting the result to int may cause unintended truncation:

event.setAnimationEnd(event.getAnimationEnd() * (int) ((-swingSpeed.getInput() / 100) + 1));

Consider removing the cast to int and using appropriate floating-point arithmetic to ensure correct animation timing.

Apply this diff to correct the calculation:

- event.setAnimationEnd(event.getAnimationEnd() * (int) ((-swingSpeed.getInput() / 100) + 1));
+ event.setAnimationEnd(event.getAnimationEnd() * ((-swingSpeed.getInput() / 100f) + 1));

}
}


private void translate(double x, double y, double z) {
GlStateManager.translate(
x + this.x.getInput(),
y + this.y.getInput(),
z + this.z.getInput()
x + this.translatex.getInput(),
y + this.translatey.getInput(),
z + this.translatez.getInput()
);
}
Copy link

@coderabbitai coderabbitai bot Dec 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix double addition of translation values in translate() method

The translate() method adds the parameters x, y, z to the settings this.translatex.getInput(), this.translatey.getInput(), this.translatez.getInput(). When you call translate() with translatex.getInput(), etc., it results in doubling the translation values.

Consider changing the method to use only the parameters or the settings to avoid unintended behavior.

Apply this diff to fix the issue:

private void translate(double x, double y, double z) {
    GlStateManager.translate(
-       x + this.translatex.getInput(),
-       y + this.translatey.getInput(),
-       z + this.translatez.getInput()
+       x,
+       y,
+       z
    );
}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private void translate(double x, double y, double z) {
GlStateManager.translate(
x + this.x.getInput(),
y + this.y.getInput(),
z + this.z.getInput()
x + this.translatex.getInput(),
y + this.translatey.getInput(),
z + this.translatez.getInput()
);
}
private void translate(double x, double y, double z) {
GlStateManager.translate(
x,
y,
z
);
}

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

translate is not only used to perform the base translation of an object but is also used in block animations to adjust the item to the correct position, its not double addition most of the time

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Kefpull, understood. Thank you for the clarification about the translate() method and its role in adjusting the item's position during block animations.


✏️ Learnings added
Learnt from: Kefpull
PR: xia-mc/Raven-XD#857
File: src/main/java/keystrokesmod/module/impl/render/Animations.java:374-381
Timestamp: 2024-12-02T01:55:30.892Z
Learning: In `Animations.java`, the `translate()` method intentionally adds the parameters `x`, `y`, `z` to the settings `translatex.getInput()`, `translatey.getInput()`, and `translatez.getInput()` to adjust the item's position during block animations.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


private void pretranslate(double x, double y, double z) {
GlStateManager.translate(
x + this.pretranslatex.getInput(),
y + this.pretranslatey.getInput(),
z + this.pretranslatez.getInput()
);
}
Comment on lines +385 to +391
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix double addition of translation values in pretranslate() method

Similar to the translate() method, the pretranslate() method adds the parameters to the settings values, which may cause translation values to be applied twice.

Apply this diff to fix the issue:

private void pretranslate(double x, double y, double z) {
    GlStateManager.translate(
-       x + this.pretranslatex.getInput(),
-       y + this.pretranslatey.getInput(),
-       z + this.pretranslatez.getInput()
+       x,
+       y,
+       z
    );
}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private void pretranslate(double x, double y, double z) {
GlStateManager.translate(
x + this.pretranslatex.getInput(),
y + this.pretranslatey.getInput(),
z + this.pretranslatez.getInput()
);
}
private void pretranslate(double x, double y, double z) {
GlStateManager.translate(
x,
y,
z
);
}


private void scale(double staticscalemultiplier_x, double staticscalemultiplier_y, double staticscalemultiplier_z) {
GlStateManager.scale(
staticscalemultiplier_x * this.scalex.getInput(),
staticscalemultiplier_y * this.scaley.getInput(),
staticscalemultiplier_z * this.scalez.getInput()
);
}

private void rotate(float rotatex, float rotatey, float rotatez) {
//x rotation
GlStateManager.rotate(
(float) this.rotatex.getInput(),
1,
0,
0
);

//y rotation
GlStateManager.rotate(
(float) this.rotatey.getInput(),
0,
1,
0
);

//z rotation
GlStateManager.rotate(
(float) this.rotatez.getInput(),
0,
0,
1
);
}
/**
* @see net.minecraft.client.renderer.ItemRenderer#func_178105_d(float swingProgress)
//* @see net.minecraft.client.renderer.ItemRenderer#func_178105_d(float swingProgress)
*/
private void func_178105_d(float swingProgress) {
float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(swingProgress) * 3.1415927F);
Expand All @@ -302,7 +432,7 @@ private void func_178105_d(float swingProgress) {
}

/**
* @see net.minecraft.client.renderer.ItemRenderer#func_178104_a(AbstractClientPlayer player, float swingProgress)
//* @see net.minecraft.client.renderer.ItemRenderer#func_178104_a(AbstractClientPlayer player, float swingProgress)
*/
private void func_178104_a(ItemStack itemToRender, @NotNull AbstractClientPlayer p_178104_1_, float p_178104_2_) {
if (itemToRender == null) return;
Expand All @@ -323,7 +453,7 @@ private void func_178104_a(ItemStack itemToRender, @NotNull AbstractClientPlayer
}

/**
* @see net.minecraft.client.renderer.ItemRenderer#func_178098_a(float, AbstractClientPlayer)
//* @see net.minecraft.client.renderer.ItemRenderer#func_178098_a(float, AbstractClientPlayer)
*/
private void func_178098_a(@NotNull ItemStack itemToRender, float p_178098_1_, @NotNull AbstractClientPlayer p_178098_2_) {
GlStateManager.rotate(-18.0F, 0.0F, 0.0F, 1.0F);
Expand Down
Loading