Files
MinecraftForge/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch
T
d50a3b5ab7 Minecraft 1.21.5
Co-authored-by: Ven <tudurap.com@gmail.com>
Co-authored-by: Jonathing <me@jonathing.me>
2025-03-26 16:34:26 -07:00

72 lines
4.0 KiB
Diff

--- a/net/minecraft/client/renderer/ScreenEffectRenderer.java
+++ b/net/minecraft/client/renderer/ScreenEffectRenderer.java
@@ -27,17 +_,24 @@
Player player = p_110719_.player;
if (!player.noPhysics) {
BlockState blockstate = getViewBlockingState(player);
- if (blockstate != null) {
- renderTex(p_110719_.getBlockRenderer().getBlockModelShaper().getParticleIcon(blockstate), p_110720_, p_378238_);
+ var overlay = getOverlayBlock(player);
+ if (overlay != null) {
+ if (!net.minecraftforge.client.ForgeHooksClient.renderBlockOverlay(player, p_110720_, net.minecraftforge.client.event.RenderBlockScreenEffectEvent.OverlayType.BLOCK, overlay.getLeft(), overlay.getRight())) {
+ renderTex(p_110719_.getBlockRenderer().getBlockModelShaper().getParticleIcon(overlay.getLeft(), p_110719_.level, overlay.getRight()), p_110720_, p_378238_);
+ }
}
}
if (!p_110719_.player.isSpectator()) {
if (p_110719_.player.isEyeInFluid(FluidTags.WATER)) {
+ if (!net.minecraftforge.client.ForgeHooksClient.renderWaterOverlay(player, p_110720_))
renderWater(p_110719_, p_110720_, p_378238_);
+ } else if (!player.getEyeInFluidType().isAir()) {
+ net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions.of(player.getEyeInFluidType()).renderOverlay(p_110719_, p_110720_, p_378238_);
}
if (p_110719_.player.isOnFire()) {
+ if (!net.minecraftforge.client.ForgeHooksClient.renderFireOverlay(player, p_110720_))
renderFire(p_110720_, p_378238_);
}
}
@@ -45,6 +_,12 @@
@Nullable
private static BlockState getViewBlockingState(Player p_110717_) {
+ var ret = getOverlayBlock(p_110717_);
+ return ret == null ? null : ret.getLeft();
+ }
+
+ @Nullable
+ private static org.apache.commons.lang3.tuple.Pair<BlockState, BlockPos> getOverlayBlock(Player p_110717_) {
BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();
for (int i = 0; i < 8; i++) {
@@ -54,7 +_,7 @@
blockpos$mutableblockpos.set(d0, d1, d2);
BlockState blockstate = p_110717_.level().getBlockState(blockpos$mutableblockpos);
if (blockstate.getRenderShape() != RenderShape.INVISIBLE && blockstate.isViewBlocking(p_110717_.level(), blockpos$mutableblockpos)) {
- return blockstate;
+ return org.apache.commons.lang3.tuple.Pair.of(blockstate, blockpos$mutableblockpos.immutable());
}
}
@@ -82,6 +_,10 @@
}
private static void renderWater(Minecraft p_110726_, PoseStack p_110727_, MultiBufferSource p_376402_) {
+ renderFluid(p_110726_, p_110727_, p_376402_, UNDERWATER_LOCATION);
+ }
+
+ public static void renderFluid(Minecraft p_110726_, PoseStack p_110727_, MultiBufferSource p_376402_, ResourceLocation texture) {
BlockPos blockpos = BlockPos.containing(p_110726_.player.getX(), p_110726_.player.getEyeY(), p_110726_.player.getZ());
float f = LightTexture.getBrightness(p_110726_.player.level().dimensionType(), p_110726_.player.level().getMaxLocalRawBrightness(blockpos));
int i = ARGB.colorFromFloat(0.1F, f, f, f);
@@ -94,7 +_,7 @@
float f7 = -p_110726_.player.getYRot() / 64.0F;
float f8 = p_110726_.player.getXRot() / 64.0F;
Matrix4f matrix4f = p_110727_.last().pose();
- VertexConsumer vertexconsumer = p_376402_.getBuffer(RenderType.blockScreenEffect(UNDERWATER_LOCATION));
+ VertexConsumer vertexconsumer = p_376402_.getBuffer(RenderType.blockScreenEffect(texture));
vertexconsumer.addVertex(matrix4f, -1.0F, -1.0F, -0.5F).setUv(4.0F + f7, 4.0F + f8).setColor(i);
vertexconsumer.addVertex(matrix4f, 1.0F, -1.0F, -0.5F).setUv(0.0F + f7, 4.0F + f8).setColor(i);
vertexconsumer.addVertex(matrix4f, 1.0F, 1.0F, -0.5F).setUv(0.0F + f7, 0.0F + f8).setColor(i);