Skip to content

Commit fa62c69

Browse files
Merge pull request #417
More compatible with 1.21.9
2 parents 16ee414 + d183b09 commit fa62c69

File tree

17 files changed

+74
-149
lines changed

17 files changed

+74
-149
lines changed

src/main/java/me/juancarloscp52/bedrockify/client/features/bedrockShading/BedrockBlockShading.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ public class BedrockBlockShading {
1111

1212
public float getBlockShade (Direction direction){
1313
MinecraftClient client = MinecraftClient.getInstance();
14+
boolean isNether = client.player != null && client.player.getEntityWorld().getRegistryKey() == World.NETHER;
1415
return switch (direction) {
1516
case UP -> 1.0f;
16-
case DOWN -> client.player.getEntityWorld().getRegistryKey() == World.NETHER ? 0.9f : 0.87f;
17+
case DOWN -> isNether ? 0.9f : 0.87f;
1718
case NORTH, SOUTH -> 0.95f;
1819
default -> 0.9f;
1920
};

src/main/java/me/juancarloscp52/bedrockify/common/block/PotionCauldronBlock.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public static boolean tryPickFluid(BlockState state, World world, BlockPos pos)
117117

118118
if (!state.contains(LEVEL)) {
119119
Bedrockify.LOGGER.error(
120-
"[%s] cannot retrieve fluid level".formatted(Bedrockify.class.getSimpleName()),
120+
"[{}] cannot retrieve fluid level", Bedrockify.class.getSimpleName(),
121121
new IllegalStateException("BlockState of %s does not have state: %s".formatted(state.getBlock(), LEVEL)));
122122
return false;
123123
}
@@ -158,7 +158,7 @@ public static boolean tryPickFluid(BlockState state, World world, BlockPos pos)
158158
public static int getMaxTippedArrowCount(ItemStack itemStack, BlockState state) {
159159
if (!state.contains(LEVEL)) {
160160
Bedrockify.LOGGER.error(
161-
"[%s] cannot retrieve fluid level".formatted(Bedrockify.class.getSimpleName()),
161+
"[{}] cannot retrieve fluid level", Bedrockify.class.getSimpleName(),
162162
new IllegalStateException("BlockState of %s does not have the state: LEVEL".formatted(state.getBlock())));
163163
return 0;
164164
}
Lines changed: 9 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,123 +1,33 @@
11
package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.sunGlare;
22

3+
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
34
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
45
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5-
import com.mojang.blaze3d.buffers.GpuBuffer;
6-
import com.mojang.blaze3d.buffers.GpuBufferSlice;
7-
import com.mojang.blaze3d.systems.RenderPass;
8-
import com.mojang.blaze3d.systems.RenderSystem;
9-
import com.mojang.blaze3d.textures.GpuTextureView;
10-
import com.mojang.blaze3d.vertex.VertexFormat;
116
import me.juancarloscp52.bedrockify.client.BedrockifyClient;
127
import me.juancarloscp52.bedrockify.client.features.bedrockShading.BedrockSunGlareShading;
13-
import net.minecraft.client.MinecraftClient;
14-
import net.minecraft.client.gl.RenderPipelines;
15-
import net.minecraft.client.render.*;
16-
import net.minecraft.client.render.state.SkyRenderState;
17-
import net.minecraft.client.texture.AbstractTexture;
18-
import net.minecraft.client.texture.TextureManager;
19-
import net.minecraft.client.util.BufferAllocator;
20-
import net.minecraft.client.util.math.MatrixStack;
21-
import net.minecraft.client.world.ClientWorld;
22-
import net.minecraft.util.Identifier;
8+
import net.minecraft.client.render.SkyRendering;
239
import net.minecraft.util.math.MathHelper;
24-
import net.minecraft.util.math.Vec3d;
2510
import org.joml.Matrix4f;
2611
import org.joml.Matrix4fStack;
27-
import org.joml.Vector3f;
2812
import org.joml.Vector4f;
2913
import org.spongepowered.asm.mixin.Mixin;
3014
import org.spongepowered.asm.mixin.Unique;
31-
import org.spongepowered.asm.mixin.gen.Accessor;
3215
import org.spongepowered.asm.mixin.injection.At;
33-
import org.spongepowered.asm.mixin.injection.Inject;
34-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
35-
36-
import java.util.Objects;
37-
import java.util.OptionalDouble;
38-
import java.util.OptionalInt;
3916

4017
@Mixin(SkyRendering.class)
4118
public abstract class SkyRenderingMixin {
4219
@Unique
4320
private final BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading;
44-
@Unique
45-
private GpuBuffer sunVertexBuffer;
46-
@Unique
47-
private int sunIndexCount;
48-
49-
@Accessor("SUN_TEXTURE")
50-
public static Identifier getSunTextureId() {
51-
throw new AssertionError();
52-
}
53-
54-
@Inject(method = "<init>", at = @At("RETURN"))
55-
private void bedrockify$SkyRenderingCtor(CallbackInfo ci) {
56-
// Allocate buffer.
57-
try (BufferAllocator bufferAllocator = BufferAllocator.fixedSized(4 * VertexFormats.POSITION_TEXTURE_COLOR.getVertexSize())) {
58-
BufferBuilder bufferBuilder = new BufferBuilder(bufferAllocator, VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
59-
60-
Matrix4f matrix4f = new Matrix4f();
61-
bufferBuilder.vertex(matrix4f, -30.0F, 100.0F, -30.0F).texture(0.0F, 0.0F).color(-1);
62-
bufferBuilder.vertex(matrix4f, 30.0F, 100.0F, -30.0F).texture(1.0F, 0.0F).color(-1);
63-
bufferBuilder.vertex(matrix4f, 30.0F, 100.0F, 30.0F).texture(1.0F, 1.0F).color(-1);
64-
bufferBuilder.vertex(matrix4f, -30.0F, 100.0F, 30.0F).texture(0.0F, 1.0F).color(-1);
65-
66-
try (BuiltBuffer builtBuffer = bufferBuilder.end()) {
67-
this.sunIndexCount = builtBuffer.getDrawParameters().indexCount();
68-
this.sunVertexBuffer = RenderSystem.getDevice().createBuffer(() -> "Bedrockify Sun vertex buffer", 8, builtBuffer.getBuffer());
69-
}
70-
}
71-
}
7221

73-
@WrapOperation(method = "renderCelestialBodies", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/SkyRendering;renderSun(FLnet/minecraft/client/util/math/MatrixStack;)V"))
74-
private void bedrockify$modifySunIntensity(SkyRendering instance, float alpha, MatrixStack matrices, Operation<Void> original) {
75-
final float intensity = MathHelper.lerp(sunGlareShading.getSunBrightnessDelta(), 1.5f + sunGlareShading.getSunIntensityDelta() * 0.5f, 1.0f);
22+
@WrapOperation(method = "renderSun", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4fStack;scale(FFF)Lorg/joml/Matrix4f;"))
23+
private Matrix4f bedrockify$modifySunRadius(Matrix4fStack instance, float x, float y, float z, Operation<Matrix4f> original) {
7624
final float scale = MathHelper.lerp(sunGlareShading.getSunBrightnessDelta(), 1.3f, 1f);
77-
78-
// Get model view matrix.
79-
Matrix4fStack modelView = RenderSystem.getModelViewStack();
80-
modelView.pushMatrix();
81-
82-
// Get position matrix.
83-
Matrix4f position = matrices.peek().getPositionMatrix();
84-
// Apply scaling.
85-
modelView.mul(position).scale(scale, 1f, scale);
86-
87-
// Set up texture renderer.
88-
TextureManager textureManager = MinecraftClient.getInstance().getTextureManager();
89-
AbstractTexture abstractTexture = textureManager.getTexture(getSunTextureId());
90-
abstractTexture.setUseMipmaps(false);
91-
RenderSystem.ShapeIndexBuffer shapeIndexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.DrawMode.QUADS);
92-
GpuBuffer gpuBuffer = shapeIndexBuffer.getIndexBuffer(this.sunIndexCount);
93-
GpuTextureView colorView = MinecraftClient.getInstance().getFramebuffer().getColorAttachmentView();
94-
GpuTextureView depthView = MinecraftClient.getInstance().getFramebuffer().getDepthAttachmentView();
95-
GpuBufferSlice uniform = RenderSystem.getDynamicUniforms().write(modelView, new Vector4f(intensity, intensity, intensity, alpha), new Vector3f(), new Matrix4f(), 0.0F);
96-
97-
// Draw.
98-
try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "Bedrockify Sun", colorView, OptionalInt.empty(), depthView, OptionalDouble.empty())) {
99-
renderPass.setPipeline(RenderPipelines.POSITION_TEX_COLOR_CELESTIAL);
100-
RenderSystem.bindDefaultUniforms(renderPass);
101-
renderPass.setUniform("DynamicTransforms", uniform);
102-
renderPass.bindSampler("Sampler0", abstractTexture.getGlTextureView());
103-
renderPass.setVertexBuffer(0, Objects.requireNonNull(this.sunVertexBuffer));
104-
renderPass.setIndexBuffer(gpuBuffer, shapeIndexBuffer.getIndexType());
105-
renderPass.drawIndexed(0, 0, this.sunIndexCount, 1);
106-
}
107-
108-
modelView.popMatrix();
109-
}
110-
111-
@Inject(method = "updateRenderState", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;getSkyColor(Lnet/minecraft/util/math/Vec3d;F)I"))
112-
private static void bedrockify$updateSunAngleDiff(ClientWorld world, float f, Vec3d pos, SkyRenderState state, CallbackInfo ci) {
113-
final BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading;
114-
sunGlareShading.updateSunBrightnessDelta(f);
25+
return original.call(instance, x * scale, y, z * scale);
11526
}
11627

117-
@Inject(method = "close", at = @At("HEAD"))
118-
private void bedrockify$closeBuffer(CallbackInfo ci) {
119-
if (this.sunVertexBuffer != null) {
120-
this.sunVertexBuffer.close();
121-
}
28+
@ModifyExpressionValue(method = "renderSun", at = @At(value = "NEW", target = "org/joml/Vector4f"))
29+
private Vector4f bedrockify$modifySunBrightness(Vector4f original) {
30+
final float brightness = MathHelper.lerp(sunGlareShading.getSunBrightnessDelta(), 1.5f + sunGlareShading.getSunIntensityDelta() * 0.5f, 1.0f);
31+
return original.mul(brightness, brightness, brightness, 1);
12232
}
12333
}

src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/WorldRendererMixin.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.sunGlare;
22

3+
import com.mojang.blaze3d.buffers.GpuBufferSlice;
34
import me.juancarloscp52.bedrockify.client.BedrockifyClient;
5+
import me.juancarloscp52.bedrockify.client.features.bedrockShading.BedrockSunGlareShading;
46
import net.minecraft.client.MinecraftClient;
7+
import net.minecraft.client.render.Camera;
8+
import net.minecraft.client.render.RenderTickCounter;
59
import net.minecraft.client.render.WorldRenderer;
10+
import net.minecraft.client.util.ObjectAllocator;
11+
import org.joml.Matrix4f;
12+
import org.joml.Vector4f;
613
import org.spongepowered.asm.mixin.Final;
714
import org.spongepowered.asm.mixin.Mixin;
815
import org.spongepowered.asm.mixin.Shadow;
@@ -23,4 +30,9 @@ public abstract class WorldRendererMixin {
2330
BedrockifyClient.getInstance().bedrockSunGlareShading.reloadCustomShaderState();
2431
}
2532

33+
@Inject(method = "render", at = @At("HEAD"))
34+
private static void bedrockify$updateSunAngleDiff(ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, Matrix4f positionMatrix, Matrix4f matrix4f, Matrix4f projectionMatrix, GpuBufferSlice fogBuffer, Vector4f fogColor, boolean renderSky, CallbackInfo ci) {
35+
final BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading;
36+
sunGlareShading.updateSunBrightnessDelta(tickCounter.getTickProgress(false));
37+
}
2638
}

src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/eatingAnimations/PlayerEntityRendererMixin.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import me.juancarloscp52.bedrockify.client.BedrockifyClient;
44
import me.juancarloscp52.bedrockify.client.features.eatingAnimations.IEatingState;
5+
import net.minecraft.client.network.ClientPlayerLikeEntity;
56
import net.minecraft.client.render.entity.PlayerEntityRenderer;
6-
import net.minecraft.client.render.entity.state.LivingEntityRenderState;
77
import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
8-
import net.minecraft.entity.LivingEntity;
8+
import net.minecraft.entity.PlayerLikeEntity;
99
import net.minecraft.item.ItemStack;
1010
import net.minecraft.item.consume.UseAction;
1111
import net.minecraft.util.Hand;
@@ -16,27 +16,26 @@
1616
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1717

1818
@Mixin(PlayerEntityRenderer.class)
19-
public abstract class PlayerEntityRendererMixin {
20-
@Inject(method = "updateRenderState(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;F)V", at = @At("HEAD"))
21-
private void bedrockify$storeEatingState(LivingEntity livingEntity, LivingEntityRenderState livingEntityRenderState, float f, CallbackInfo ci) {
22-
if (!BedrockifyClient.getInstance().settings.isEatingAnimationsEnabled() || !(livingEntityRenderState instanceof IEatingState state)) {
19+
public abstract class PlayerEntityRendererMixin<AvatarlikeEntity extends PlayerLikeEntity & ClientPlayerLikeEntity> {
20+
@Inject(method = "updateRenderState", at = @At("HEAD"))
21+
private void bedrockify$storeEatingState(AvatarlikeEntity avatarlikeEntity, PlayerEntityRenderState playerEntityRenderState, float f, CallbackInfo ci) {
22+
if (!BedrockifyClient.getInstance().settings.isEatingAnimationsEnabled() || !(playerEntityRenderState instanceof IEatingState state)) {
2323
return;
2424
}
2525

26-
ItemStack mainHandStack = livingEntity.getMainHandStack();
27-
ItemStack offHandStack = livingEntity.getOffHandStack();
28-
if (bedrockify$checkEatingAction(livingEntityRenderState, Hand.MAIN_HAND, mainHandStack)) {
26+
ItemStack mainHandStack = avatarlikeEntity.getMainHandStack();
27+
ItemStack offHandStack = avatarlikeEntity.getOffHandStack();
28+
if (bedrockify$checkEatingAction(avatarlikeEntity, playerEntityRenderState, Hand.MAIN_HAND, mainHandStack)) {
2929
state.setEatingHand(Hand.MAIN_HAND);
30-
} else if (bedrockify$checkEatingAction(livingEntityRenderState, Hand.OFF_HAND, offHandStack)) {
30+
} else if (bedrockify$checkEatingAction(avatarlikeEntity, playerEntityRenderState, Hand.OFF_HAND, offHandStack)) {
3131
state.setEatingHand(Hand.OFF_HAND);
3232
} else {
3333
state.setEatingHand(null);
3434
}
3535
}
3636

3737
@Unique
38-
private boolean bedrockify$checkEatingAction(LivingEntityRenderState state, Hand hand, ItemStack itemStack) {
39-
PlayerEntityRenderState playerState = (PlayerEntityRenderState) state;
40-
return playerState.itemUseTime > 0 && playerState.activeHand == hand && (itemStack.getUseAction() == UseAction.EAT || itemStack.getUseAction() == UseAction.DRINK);
38+
private boolean bedrockify$checkEatingAction(AvatarlikeEntity entity, PlayerEntityRenderState state, Hand hand, ItemStack itemStack) {
39+
return entity.isUsingItem() && state.activeHand == hand && (itemStack.getUseAction() == UseAction.EAT || itemStack.getUseAction() == UseAction.DRINK);
4140
}
4241
}

src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/fishingBobber/FishingBobberEntityRendererMixin.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44
import me.juancarloscp52.bedrockify.client.features.fishingBobber.FishingBobber3DModel;
55
import net.minecraft.client.model.Model;
66
import net.minecraft.client.render.OverlayTexture;
7-
import net.minecraft.client.render.VertexConsumer;
87
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
98
import net.minecraft.client.render.entity.EntityRendererFactory;
109
import net.minecraft.client.render.entity.FishingBobberEntityRenderer;
1110
import net.minecraft.client.render.entity.state.FishingBobberEntityState;
1211
import net.minecraft.client.render.state.CameraRenderState;
1312
import net.minecraft.client.util.math.MatrixStack;
14-
import net.minecraft.util.Colors;
1513
import org.spongepowered.asm.mixin.Mixin;
1614
import org.spongepowered.asm.mixin.Unique;
1715
import org.spongepowered.asm.mixin.injection.At;
@@ -21,32 +19,31 @@
2119
@Mixin(FishingBobberEntityRenderer.class)
2220
public abstract class FishingBobberEntityRendererMixin {
2321
@Unique
24-
private Model bobberModel;
22+
private Model<FishingBobberEntityState> bobberModel;
2523

2624
@Inject(method = "<init>", at = @At("RETURN"))
2725
private void bedrockify$injectCtor(EntityRendererFactory.Context context, CallbackInfo ci) {
2826
this.bobberModel = new FishingBobber3DModel<>(context.getPart(FishingBobber3DModel.MODEL_LAYER));
2927
}
3028

3129
@Inject(method = "vertex", at = @At("HEAD"), cancellable = true)
32-
private static void bedrockify$cancelOriginalBobberRendering(VertexConsumer buffer, MatrixStack.Entry matrix, int light, float x, int y, int u, int v, CallbackInfo ci) {
30+
private static void bedrockify$cancelOriginalBobberRendering(CallbackInfo ci) {
3331
if (!BedrockifyClient.getInstance().settings.fishingBobber3D) {
3432
return;
3533
}
3634

3735
ci.cancel();
3836
}
3937

40-
@Inject(method = "render(Lnet/minecraft/client/render/entity/state/FishingBobberEntityState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("RETURN"))
38+
@Inject(method = "render", at = @At("RETURN"))
4139
private void bedrockify$render3DBobber(FishingBobberEntityState fishingBobberEntityState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo ci) {
4240
if (!BedrockifyClient.getInstance().settings.fishingBobber3D) {
4341
return;
4442
}
4543

4644
matrixStack.push();
4745
matrixStack.translate(0f, -0.0075f, 0f);
48-
//TODO: is white/ too bright
49-
orderedRenderCommandQueue.submitModel(bobberModel, fishingBobberEntityState, matrixStack, FishingBobber3DModel.RENDER_LAYER, fishingBobberEntityState.light, OverlayTexture.DEFAULT_UV, Colors.WHITE, null);
46+
orderedRenderCommandQueue.submitModel(this.bobberModel, fishingBobberEntityState, matrixStack, FishingBobber3DModel.RENDER_LAYER, fishingBobberEntityState.light, OverlayTexture.DEFAULT_UV, fishingBobberEntityState.outlineColor, null);
5047
matrixStack.pop();
5148
}
5249
}

src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/idleHandAnimations/HeldItemRendererMixin.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import me.juancarloscp52.bedrockify.client.BedrockifyClient;
44
import net.minecraft.client.MinecraftClient;
5-
import net.minecraft.client.network.ClientPlayerEntity;
6-
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
75
import net.minecraft.client.render.item.HeldItemRenderer;
86
import net.minecraft.client.util.math.MatrixStack;
97
import net.minecraft.util.Arm;
@@ -23,7 +21,7 @@ public class HeldItemRendererMixin {
2321
private static final double ONE_CYCLE = 2 * Math.PI;
2422

2523
@Inject(method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V", at = @At("HEAD"))
26-
private void bedrockify$updateSwayDelta(float tickProgress, MatrixStack matrices, OrderedRenderCommandQueue orderedRenderCommandQueue, ClientPlayerEntity player, int light, CallbackInfo ci) {
24+
private void bedrockify$updateSwayDelta(CallbackInfo ci) {
2725
if (MinecraftClient.getInstance().isPaused()) {
2826
return;
2927
}

src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/loadingScreens/LevelLoadingScreenMixin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.client.world.ClientChunkLoadProgress;
99
import net.minecraft.text.Text;
1010
import net.minecraft.util.Util;
11+
import net.minecraft.util.math.MathHelper;
1112
import net.minecraft.world.chunk.ChunkLoadMap;
1213
import org.spongepowered.asm.mixin.Final;
1314
import org.spongepowered.asm.mixin.Mixin;
@@ -36,7 +37,8 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta, Cal
3637

3738
int xPosition = this.width / 2;
3839
int yPosition = this.height / 2;
39-
LoadingScreenWidget.getInstance().render(context, xPosition, yPosition, Text.translatable("narrator.loading", Text.translatable("loading.progress", (this.chunkLoadProgress.getLoadProgress()*100.0F)).getString()), null, (int)(this.chunkLoadProgress.getLoadProgress()*100.0F));
40+
int loadPercent = MathHelper.ceil(this.chunkLoadProgress.getLoadProgress() * 100);
41+
LoadingScreenWidget.getInstance().render(context, xPosition, yPosition, Text.translatable("narrator.loading", Text.translatable("loading.progress", loadPercent).getString()), null, loadPercent);
4042

4143
long l = Util.getMeasuringTimeMs();
4244
if (l - this.lastNarrationTime > 2000L) {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package me.juancarloscp52.bedrockify.mixin.common.features.animalEatingParticles;
2+
3+
import me.juancarloscp52.bedrockify.common.features.animalEatingParticles.EatingParticlesUtil;
4+
import net.minecraft.entity.passive.AnimalEntity;
5+
import net.minecraft.entity.player.PlayerEntity;
6+
import net.minecraft.item.ItemStack;
7+
import net.minecraft.util.Hand;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
@Mixin(AnimalEntity.class)
12+
public class AnimalEntityMixin extends ExtendMobEntityMixin {
13+
@Override
14+
protected void bedrockify$mobEat_AtHead(PlayerEntity player, Hand hand, ItemStack stack, CallbackInfo ci) {
15+
EatingParticlesUtil.spawnItemParticles(player, stack, AnimalEntity.class.cast(this));
16+
}
17+
}

0 commit comments

Comments
 (0)