mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 16:27:47 +00:00
72 lines
4.0 KiB
Diff
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);
|