Merge pull request #80 from 2No2Name/1.15
Updated MovableBlockEntity Rendering Code
This commit is contained in:
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
Reference in new issue
Block a user