mirror of
https://github.com/neoforged/NeoForge.git
synced 2026-02-04 03:16:50 -06:00
[1.21.10] Pass MaterialSet and MultiBufferSource to RenderBlockScreenEffectEvent (#2703)
This commit is contained in:
parent
340cb5423a
commit
ef5dde844d
@ -8,21 +8,21 @@
|
||||
- if (blockstate != null) {
|
||||
- renderTex(this.minecraft.getBlockRenderer().getBlockModelShaper().getParticleIcon(blockstate), posestack, this.bufferSource);
|
||||
+ org.apache.commons.lang3.tuple.Pair<BlockState, BlockPos> overlay = getOverlayBlock(player);
|
||||
+ if (overlay != null && !net.neoforged.neoforge.client.ClientHooks.renderBlockOverlay(player, posestack, net.neoforged.neoforge.client.event.RenderBlockScreenEffectEvent.OverlayType.BLOCK, overlay.getLeft(), overlay.getRight())) {
|
||||
+ if (overlay != null && !net.neoforged.neoforge.client.ClientHooks.renderBlockOverlay(player, posestack, net.neoforged.neoforge.client.event.RenderBlockScreenEffectEvent.OverlayType.BLOCK, overlay.getLeft(), overlay.getRight(), materials, bufferSource)) {
|
||||
+ renderTex(this.minecraft.getBlockRenderer().getBlockModelShaper().getParticleIcon(overlay.getLeft(), this.minecraft.level, overlay.getRight()), posestack, this.bufferSource);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.minecraft.player.isSpectator()) {
|
||||
if (this.minecraft.player.isEyeInFluid(FluidTags.WATER)) {
|
||||
+ if (!net.neoforged.neoforge.client.ClientHooks.renderWaterOverlay(player, posestack))
|
||||
+ if (!net.neoforged.neoforge.client.ClientHooks.renderWaterOverlay(player, posestack, materials, bufferSource))
|
||||
renderWater(this.minecraft, posestack, this.bufferSource);
|
||||
}
|
||||
+ else if (!player.getEyeInFluidType().isAir()) net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions.of(player.getEyeInFluidType()).renderOverlay(this.minecraft, posestack, this.bufferSource);
|
||||
|
||||
if (this.minecraft.player.isOnFire()) {
|
||||
TextureAtlasSprite textureatlassprite = this.materials.get(ModelBakery.FIRE_1);
|
||||
+ if (!net.neoforged.neoforge.client.ClientHooks.renderFireOverlay(player, posestack))
|
||||
+ if (!net.neoforged.neoforge.client.ClientHooks.renderFireOverlay(player, posestack, materials, bufferSource))
|
||||
renderFire(posestack, this.bufferSource, textureatlassprite);
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,6 +81,7 @@ import net.minecraft.client.player.ClientInput;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import net.minecraft.client.renderer.LevelTargetBundle;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderPipelines;
|
||||
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||
import net.minecraft.client.renderer.block.model.BlockElement;
|
||||
@ -101,6 +102,7 @@ import net.minecraft.client.resources.language.I18n;
|
||||
import net.minecraft.client.resources.model.AtlasManager;
|
||||
import net.minecraft.client.resources.model.EquipmentClientInfo;
|
||||
import net.minecraft.client.resources.model.Material;
|
||||
import net.minecraft.client.resources.model.MaterialSet;
|
||||
import net.minecraft.client.resources.model.ModelBakery;
|
||||
import net.minecraft.client.resources.model.ModelManager;
|
||||
import net.minecraft.client.resources.sounds.SoundInstance;
|
||||
@ -844,16 +846,16 @@ public class ClientHooks {
|
||||
return NeoForge.EVENT_BUS.post(new ToastAddEvent(toast)).isCanceled();
|
||||
}
|
||||
|
||||
public static boolean renderFireOverlay(Player player, PoseStack mat) {
|
||||
return renderBlockOverlay(player, mat, RenderBlockScreenEffectEvent.OverlayType.FIRE, Blocks.FIRE.defaultBlockState(), player.blockPosition());
|
||||
public static boolean renderFireOverlay(Player player, PoseStack poseStack, MaterialSet materials, MultiBufferSource bufferSource) {
|
||||
return renderBlockOverlay(player, poseStack, RenderBlockScreenEffectEvent.OverlayType.FIRE, Blocks.FIRE.defaultBlockState(), player.blockPosition(), materials, bufferSource);
|
||||
}
|
||||
|
||||
public static boolean renderWaterOverlay(Player player, PoseStack mat) {
|
||||
return renderBlockOverlay(player, mat, RenderBlockScreenEffectEvent.OverlayType.WATER, Blocks.WATER.defaultBlockState(), player.blockPosition());
|
||||
public static boolean renderWaterOverlay(Player player, PoseStack poseStack, MaterialSet materials, MultiBufferSource bufferSource) {
|
||||
return renderBlockOverlay(player, poseStack, RenderBlockScreenEffectEvent.OverlayType.WATER, Blocks.WATER.defaultBlockState(), player.blockPosition(), materials, bufferSource);
|
||||
}
|
||||
|
||||
public static boolean renderBlockOverlay(Player player, PoseStack mat, RenderBlockScreenEffectEvent.OverlayType type, BlockState block, BlockPos pos) {
|
||||
return NeoForge.EVENT_BUS.post(new RenderBlockScreenEffectEvent(player, mat, type, block, pos)).isCanceled();
|
||||
public static boolean renderBlockOverlay(Player player, PoseStack poseStack, RenderBlockScreenEffectEvent.OverlayType type, BlockState block, BlockPos pos, MaterialSet materials, MultiBufferSource bufferSource) {
|
||||
return NeoForge.EVENT_BUS.post(new RenderBlockScreenEffectEvent(player, poseStack, type, block, pos, materials, bufferSource)).isCanceled();
|
||||
}
|
||||
|
||||
public static int getMaxMipmapLevel(int width, int height) {
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
package net.neoforged.neoforge.client.event;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.resources.model.MaterialSet;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
@ -18,7 +20,7 @@ import org.jetbrains.annotations.ApiStatus;
|
||||
/**
|
||||
* Fired before a block texture will be overlaid on the player's view.
|
||||
*
|
||||
* <p>This event is {@linkplain ICancellableEvent cancellable}, and does not {@linkplain HasResult have a result}.
|
||||
* <p>This event is {@linkplain ICancellableEvent cancellable}.
|
||||
* If this event is cancelled, then the overlay will not be rendered.</p>
|
||||
*
|
||||
* <p>This event is fired on the {@linkplain NeoForge#EVENT_BUS main Forge event bus},
|
||||
@ -50,14 +52,18 @@ public class RenderBlockScreenEffectEvent extends Event implements ICancellableE
|
||||
private final OverlayType overlayType;
|
||||
private final BlockState blockState;
|
||||
private final BlockPos blockPos;
|
||||
private final MaterialSet materials;
|
||||
private final MultiBufferSource bufferSource;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public RenderBlockScreenEffectEvent(Player player, PoseStack poseStack, OverlayType type, BlockState block, BlockPos blockPos) {
|
||||
public RenderBlockScreenEffectEvent(Player player, PoseStack poseStack, OverlayType type, BlockState block, BlockPos blockPos, MaterialSet materials, MultiBufferSource bufferSource) {
|
||||
this.player = player;
|
||||
this.poseStack = poseStack;
|
||||
this.overlayType = type;
|
||||
this.blockState = block;
|
||||
this.blockPos = blockPos;
|
||||
this.materials = materials;
|
||||
this.bufferSource = bufferSource;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -94,4 +100,18 @@ public class RenderBlockScreenEffectEvent extends Event implements ICancellableE
|
||||
public BlockPos getBlockPos() {
|
||||
return blockPos;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the materials used in rendering}
|
||||
*/
|
||||
public MaterialSet getMaterials() {
|
||||
return materials;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the buffer source used in rendering}
|
||||
*/
|
||||
public MultiBufferSource getBufferSource() {
|
||||
return bufferSource;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user