mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-07-12 23:12:52 +00:00

This adds SPDX license headers to all source code files, following the REUSE[1] specification. This does not include any asset files (such as generated JSON files, or textures). While REUSE does support doing so with ".license" files, for now we define these licences using the .reuse/dep5 file. [1]: https://reuse.software/
67 lines
2.4 KiB
Java
67 lines
2.4 KiB
Java
// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
|
|
//
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package dan200.computercraft.mixin.client;
|
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
import dan200.computercraft.client.ClientHooks;
|
|
import net.minecraft.client.renderer.block.BlockModelShaper;
|
|
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
|
import net.minecraft.client.renderer.block.ModelBlockRenderer;
|
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.util.RandomSource;
|
|
import net.minecraft.world.level.BlockAndTintGetter;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraftforge.client.model.data.ModelData;
|
|
import org.spongepowered.asm.mixin.Final;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.Shadow;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
|
|
/**
|
|
* Provides custom block breaking progress for modems, so it only applies to the current part.
|
|
*
|
|
* @see BlockRenderDispatcher#renderBreakingTexture(BlockState, BlockPos, BlockAndTintGetter, PoseStack, VertexConsumer, ModelData)
|
|
*/
|
|
@Mixin(BlockRenderDispatcher.class)
|
|
public class BlockRenderDispatcherMixin {
|
|
@Shadow
|
|
@Final
|
|
private RandomSource random;
|
|
|
|
@Shadow
|
|
@Final
|
|
private BlockModelShaper blockModelShaper;
|
|
|
|
@Shadow
|
|
@Final
|
|
private ModelBlockRenderer modelRenderer;
|
|
|
|
@Inject(
|
|
method = "name=/^renderBreakingTexture/ desc=/ModelData;\\)V$/",
|
|
at = @At("HEAD"),
|
|
cancellable = true,
|
|
require = 0 // This isn't critical functionality, so don't worry if we can't apply it.
|
|
)
|
|
public void renderBlockDamage(
|
|
BlockState state, BlockPos pos, BlockAndTintGetter world, PoseStack pose, VertexConsumer buffers, ModelData modelData,
|
|
CallbackInfo info
|
|
) {
|
|
var newState = ClientHooks.getBlockBreakingState(state, pos);
|
|
if (newState != null) {
|
|
info.cancel();
|
|
|
|
var model = blockModelShaper.getBlockModel(newState);
|
|
modelRenderer.tesselateBlock(
|
|
world, model, newState, pos, pose, buffers, true, random, newState.getSeed(pos),
|
|
OverlayTexture.NO_OVERLAY, modelData, null
|
|
);
|
|
}
|
|
}
|
|
}
|