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; package carpet.fakes;
import net.minecraft.block.BlockRenderLayer;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.client.render.BufferBuilder;
public interface BlockEntityRenderDispatcherInterface 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; package carpet.mixins;
import carpet.fakes.BlockEntityRenderDispatcherInterface; 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.block.entity.BlockEntity;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Camera; 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.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.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import org.lwjgl.opengl.GL20;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@@ -26,28 +30,43 @@ public abstract class BlockEntityRenderDispatcher_movableTEMixin implements Bloc
@Shadow @Shadow
public World world; public World world;
//@Shadow //@Shadow //Shadow doesn't work due to private+static+mixins requires abstract, therefore copied the whole method. //Todo fix this
//public abstract void renderEntity(BlockEntity blockEntity_1, double double_1, double double_2, double double_3, private static void renderEntity(BlockEntity blockEntity_1, Runnable runnable_1){
// float float_1, int int_1, boolean boolean_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 * @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) //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, //Code copied and modified from BlockEntityRenderDispatcher::render(BlockEntity blockEntity_1, float float_1, int int_1, BlockRenderLayer blockRenderLayer_1, BufferBuilder bufferBuilder_1)
double yOffset, double zOffset) 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, if (blockEntity_1.getSquaredDistance(this.cameraEntity.getPos().x - xOffset, this.cameraEntity.getPos().y - yOffset, this.cameraEntity.getPos().z - zOffset) < blockEntity_1.getSquaredRenderDistance()) {
this.cameraEntity.getPos().z - zOffset) < blockEntity_1.getSquaredRenderDistance()) BlockEntityRenderer<BlockEntity> blockEntityRenderer_1 = this.get(blockEntity_1);
{ if (blockEntityRenderer_1 != null) {
GuiLighting.enable(); if (blockEntity_1.hasWorld() && blockEntity_1.getType().supports(blockEntity_1.getCachedState().getBlock())) {
int i = this.world.getLightmapIndex(blockEntity_1.getPos()); BlockPos blockPos_1 = blockEntity_1.getPos();
int j = i % 65536; renderEntity(blockEntity_1, () ->
int k = i / 65536; {
RenderSystem.glMultiTexCoord2f(GL20.GL_TEXTURE1, (float) j, (float) k); bufferBuilder_1.method_22629(); //add layer to stack
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); bufferBuilder_1.method_22626(xOffset,yOffset,zOffset); //add offset for the Blockentity
BlockPos blockpos = blockEntity_1.getPos(); 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);
this.renderEntity(blockEntity_1, (double) blockpos.getX() - renderOffsetX + xOffset, (double) blockpos.getY() - renderOffsetY + yOffset, (double) blockpos.getZ() - renderOffsetZ + zOffset, partialTicks, destroyStage, false); //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.settings.CarpetSettings;
import carpet.fakes.BlockEntityRenderDispatcherInterface; import carpet.fakes.BlockEntityRenderDispatcherInterface;
import carpet.fakes.PistonBlockEntityInterface; import carpet.fakes.PistonBlockEntityInterface;
import net.minecraft.block.BlockRenderLayer;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.PistonBlockEntity; 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.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.block.entity.PistonBlockEntityRenderer; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(PistonBlockEntityRenderer.class) @Mixin(PistonBlockEntityRenderer.class)
public abstract class PistonBlockEntityRenderer_movableTEMixin extends BlockEntityRenderer<PistonBlockEntity> public abstract class PistonBlockEntityRenderer_movableTEMixin extends BlockEntityRenderer<PistonBlockEntity>
{ {
/*
@Inject(method = "method_3576", at = @At(value = "INVOKE", @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)) 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, 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)
double double_3, float float_1, int int_1, CallbackInfo ci)
{ {
if (!((PistonBlockEntityInterface) pistonBlockEntity_1).isRenderModeSet()) if (!((PistonBlockEntityInterface) pistonBlockEntity_1).isRenderModeSet())
((PistonBlockEntityInterface) pistonBlockEntity_1).setRenderCarriedBlockEntity(CarpetSettings.movableBlockEntities && ((PistonBlockEntityInterface) pistonBlockEntity_1).getCarriedBlockEntity() != null); ((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, @Inject(method = "method_3576", at = @At("RETURN"), locals = LocalCapture.NO_CAPTURE)
float float_1, int int_1, CallbackInfo ci) 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()) if (((PistonBlockEntityInterface) pistonBlockEntity_1).getRenderCarriedBlockEntity())
{ {
@@ -36,9 +37,8 @@ public abstract class PistonBlockEntityRenderer_movableTEMixin extends BlockEnti
if (carriedBlockEntity != null) if (carriedBlockEntity != null)
{ {
carriedBlockEntity.setPos(pistonBlockEntity_1.getPos()); 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));
} }
} }
} }
*/
} }