Updated MovableBlockEntity Rendering Code

This commit is contained in:
2No2Name committed 2019-09-19 01:07:43 +02:00
1 parent a825134fba
commit ef94e7c302
3 files changed
+54 -31

No files matched your search

@@ -1,8 +1,12 @@
package carpet.fakes;
import net.minecraft.block.BlockRenderLayer;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.client.render.BufferBuilder;
public interface BlockEntityRenderDispatcherInterface
{
void renderBlockEntityOffset(BlockEntity blockEntity, float partialTicks, int destroyStage, double xOffset, double yOffset, double zOffset);
void renderBlockEntityOffset(BlockEntity blockEntity_1, float partialTicks, int destroyStage, BlockRenderLayer blockRenderLayer_1, BufferBuilder bufferBuilder_1,
double xOffset, double yOffset, double zOffset);
}
@@ -1,14 +1,18 @@
package carpet.mixins;
import carpet.fakes.BlockEntityRenderDispatcherInterface;
import com.mojang.blaze3d.systems.RenderSystem;
import com.sun.istack.internal.Nullable;
import net.minecraft.block.BlockRenderLayer;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.GuiLighting;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.util.crash.CrashException;
import net.minecraft.util.crash.CrashReport;
import net.minecraft.util.crash.CrashReportSection;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.lwjgl.opengl.GL20;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -26,28 +30,43 @@ public abstract class BlockEntityRenderDispatcher_movableTEMixin implements Bloc
@Shadow
public World world;
//@Shadow
//public abstract void renderEntity(BlockEntity blockEntity_1, double double_1, double double_2, double double_3,
// float float_1, int int_1, boolean boolean_1);
//@Shadow //Shadow doesn't work due to private+static+mixins requires abstract, therefore copied the whole method. //Todo fix this
private static void renderEntity(BlockEntity blockEntity_1, Runnable runnable_1){
try {
runnable_1.run();
} catch (Throwable var5) {
CrashReport crashReport_1 = CrashReport.create(var5, "Rendering Block Entity");
CrashReportSection crashReportSection_1 = crashReport_1.addElement("Block Entity Details");
blockEntity_1.populateCrashReport(crashReportSection_1);
throw new CrashException(crashReport_1);
}
}
@Shadow
public abstract <T extends BlockEntity> BlockEntityRenderer<T> get(@Nullable BlockEntity blockEntity_1);
/**
* @author 2No2Name
*/
//Renders the BlockEntity offset by the amount specified in the arguments xOffset yOffset zOffset (the moving block moved in the animation by this)
public void renderBlockEntityOffset(BlockEntity blockEntity_1, float partialTicks, int destroyStage, double xOffset,
double yOffset, double zOffset)
{
/*if (blockEntity_1.getSquaredDistance(this.cameraEntity.getPos().x - xOffset, this.cameraEntity.getPos().y - yOffset,
this.cameraEntity.getPos().z - zOffset) < blockEntity_1.getSquaredRenderDistance())
{
GuiLighting.enable();
int i = this.world.getLightmapIndex(blockEntity_1.getPos());
int j = i % 65536;
int k = i / 65536;
RenderSystem.glMultiTexCoord2f(GL20.GL_TEXTURE1, (float) j, (float) k);
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
BlockPos blockpos = blockEntity_1.getPos();
this.renderEntity(blockEntity_1, (double) blockpos.getX() - renderOffsetX + xOffset, (double) blockpos.getY() - renderOffsetY + yOffset, (double) blockpos.getZ() - renderOffsetZ + zOffset, partialTicks, destroyStage, false);
}*/
//Code copied and modified from BlockEntityRenderDispatcher::render(BlockEntity blockEntity_1, float float_1, int int_1, BlockRenderLayer blockRenderLayer_1, BufferBuilder bufferBuilder_1)
public void renderBlockEntityOffset(BlockEntity blockEntity_1, float partialTicks, int destroyStage, BlockRenderLayer blockRenderLayer_1, BufferBuilder bufferBuilder_1, double xOffset,
double yOffset, double zOffset){
if (blockEntity_1.getSquaredDistance(this.cameraEntity.getPos().x - xOffset, this.cameraEntity.getPos().y - yOffset, this.cameraEntity.getPos().z - zOffset) < blockEntity_1.getSquaredRenderDistance()) {
BlockEntityRenderer<BlockEntity> blockEntityRenderer_1 = this.get(blockEntity_1);
if (blockEntityRenderer_1 != null) {
if (blockEntity_1.hasWorld() && blockEntity_1.getType().supports(blockEntity_1.getCachedState().getBlock())) {
BlockPos blockPos_1 = blockEntity_1.getPos();
renderEntity(blockEntity_1, () ->
{
bufferBuilder_1.method_22629(); //add layer to stack
bufferBuilder_1.method_22626(xOffset,yOffset,zOffset); //add offset for the Blockentity
blockEntityRenderer_1.method_22747(blockEntity_1, (double)blockPos_1.getX() - renderOffsetX, (double)blockPos_1.getY() - renderOffsetY, (double)blockPos_1.getZ() - renderOffsetZ, partialTicks, destroyStage, bufferBuilder_1, blockRenderLayer_1, blockPos_1);
//bufferBuilder_1.method_22626(-xOffset,-yOffset,-zOffset); //remove offset
bufferBuilder_1.method_22630(); //remove layer from stack
}
);
}
}
}
}
}
@@ -3,8 +3,10 @@ package carpet.mixins;
import carpet.settings.CarpetSettings;
import carpet.fakes.BlockEntityRenderDispatcherInterface;
import carpet.fakes.PistonBlockEntityInterface;
import net.minecraft.block.BlockRenderLayer;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.PistonBlockEntity;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.block.entity.PistonBlockEntityRenderer;
@@ -12,23 +14,22 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(PistonBlockEntityRenderer.class)
public abstract class PistonBlockEntityRenderer_movableTEMixin extends BlockEntityRenderer<PistonBlockEntity>
{
/*
@Inject(method = "method_3576", at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/render/block/entity/PistonBlockEntityRenderer;method_3575(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/client/render/BufferBuilder;Lnet/minecraft/world/World;Z)Z", ordinal = 3))
private void updateRenderBool(PistonBlockEntity pistonBlockEntity_1, double double_1, double double_2,
double double_3, float float_1, int int_1, CallbackInfo ci)
private void updateRenderBool(PistonBlockEntity pistonBlockEntity_1, double double_1, double double_2, double double_3, float float_1, int int_1, BlockRenderLayer blockRenderLayer_1, BufferBuilder bufferBuilder_1, int int_2, int int_3, CallbackInfo ci)
{
if (!((PistonBlockEntityInterface) pistonBlockEntity_1).isRenderModeSet())
((PistonBlockEntityInterface) pistonBlockEntity_1).setRenderCarriedBlockEntity(CarpetSettings.movableBlockEntities && ((PistonBlockEntityInterface) pistonBlockEntity_1).getCarriedBlockEntity() != null);
}
@Inject(method = "method_3576", at = @At("RETURN"))
private void endMethod3576(PistonBlockEntity pistonBlockEntity_1, double double_1, double double_2, double double_3,
float float_1, int int_1, CallbackInfo ci)
@Inject(method = "method_3576", at = @At("RETURN"), locals = LocalCapture.NO_CAPTURE)
private void endMethod3576(PistonBlockEntity pistonBlockEntity_1, double double_1, double double_2, double double_3, float float_1, int int_1, BlockRenderLayer blockRenderLayer_1, BufferBuilder bufferBuilder_1, int int_2, int int_3, CallbackInfo ci)
{
if (((PistonBlockEntityInterface) pistonBlockEntity_1).getRenderCarriedBlockEntity())
{
@@ -36,9 +37,8 @@ public abstract class PistonBlockEntityRenderer_movableTEMixin extends BlockEnti
if (carriedBlockEntity != null)
{
carriedBlockEntity.setPos(pistonBlockEntity_1.getPos());
((BlockEntityRenderDispatcherInterface) BlockEntityRenderDispatcher.INSTANCE).renderBlockEntityOffset(carriedBlockEntity, float_1, int_1, pistonBlockEntity_1.getRenderOffsetX(float_1), pistonBlockEntity_1.getRenderOffsetY(float_1), pistonBlockEntity_1.getRenderOffsetZ(float_1));
((BlockEntityRenderDispatcherInterface) BlockEntityRenderDispatcher.INSTANCE).renderBlockEntityOffset(carriedBlockEntity, float_1, int_1, BlockRenderLayer.field_20799, bufferBuilder_1, pistonBlockEntity_1.getRenderOffsetX(float_1), pistonBlockEntity_1.getRenderOffsetY(float_1), pistonBlockEntity_1.getRenderOffsetZ(float_1));
}
}
}
*/
}