From 2a487f28641c308a8a50ef05971154dbb6eec9f3 Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Fri, 14 Dec 2018 00:21:04 +0100 Subject: [PATCH] Testing a new block preview --- .../effortlessbuilding/BuildConfig.java | 2 +- .../helper/RenderHelper.java | 52 ++++++++++++++++--- .../network/QuickReplaceMessage.java | 1 - 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java b/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java index c72ac06..a6afa45 100644 --- a/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java @@ -47,7 +47,7 @@ public class BuildConfig { } public static class Visuals { - @Comment({"Shows a white block outline for the block you manually place,", + @Comment({"Shows a block preview for the block you manually place,", "in addition to blocks placed by the mirror or array."}) public boolean showOutlineOnCurrentBlock = false; } diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/RenderHelper.java b/src/main/java/nl/requios/effortlessbuilding/helper/RenderHelper.java index 0bf5c80..5a4f0c0 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/RenderHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/helper/RenderHelper.java @@ -1,20 +1,26 @@ package nl.requios.effortlessbuilding.helper; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.RenderGlobal; -import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.*; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import nl.requios.effortlessbuilding.*; +import nl.requios.effortlessbuilding.item.ItemRandomizerBag; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL14; import org.lwjgl.util.Color; @Mod.EventBusSubscriber(Side.CLIENT) @@ -115,17 +121,29 @@ public class RenderHelper { } - //Render block outlines + //Render block previews RayTraceResult objectMouseOver = Minecraft.getMinecraft().objectMouseOver; //Checking for null is necessary! Even in vanilla when looking down ladders it is occasionally null (instead of Type MISS) if (objectMouseOver != null && objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK) { BlockPos blockPos = objectMouseOver.getBlockPos(); + ItemStack stack = ItemStack.EMPTY; + ItemStack mainhand = player.getHeldItemMainhand(); + IBlockState blockState = null; + if (mainhand.getItem() instanceof ItemBlock) { + stack = mainhand; + Block block = ((ItemBlock) stack.getItem()).getBlock(); + Vec3d hitVec = objectMouseOver.hitVec; + hitVec = new Vec3d(Math.abs(hitVec.x - ((int) hitVec.x)), Math.abs(hitVec.y - ((int) hitVec.y)), Math.abs(hitVec.z - ((int) hitVec.z))); + blockState = block.getStateForPlacement(player.world, blockPos, objectMouseOver.sideHit, + ((float) hitVec.x), ((float) hitVec.y), ((float) hitVec.z), stack.getMetadata(), player, EnumHand.MAIN_HAND); + } + if (mainhand.getItem() instanceof ItemRandomizerBag) { + //TODO figure this out + } + //TODO check offhand //Check if tool (or none) in hand - ItemStack mainhand = player.getHeldItemMainhand(); - //ItemStack offhand = player.getHeldItemOffhand(); - //boolean noneInHand = mainhand.isEmpty() && (offhand.isEmpty() || offhand.getItem() instanceof ItemTool); boolean toolInHand = !mainhand.isEmpty() && mainhand.getItem() instanceof ItemTool; if (!buildSettings.doQuickReplace() && !toolInHand) { blockPos = blockPos.offset(objectMouseOver.sideHit); @@ -143,6 +161,26 @@ public class RenderHelper { RenderHelper.renderBlockOutline(blockPos); } + //TODO testing + if (blockState != null) { + BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GlStateManager.pushMatrix();//Push matrix again just because + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_TEXTURE_2D); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_CONSTANT_ALPHA, GL11.GL_ONE_MINUS_CONSTANT_ALPHA); + GlStateManager.translate(blockPos.getX(), blockPos.getY(), blockPos.getZ()); + GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(-0.005f, -0.005f, 0.005f); + GlStateManager.scale(1.01f, 1.01f, 1.01f); + GL14.glBlendColor(1F, 1F, 1F, 0.6f); + dispatcher.renderBlockBrightness(blockState, 1f); + GlStateManager.popMatrix(); + GL11.glPopAttrib(); + } + //Mirror if (m != null && m.enabled && (m.mirrorX || m.mirrorY || m.mirrorZ) && !(blockPos.getX() + 0.5 < m.position.x - m.radius) && !(blockPos.getX() + 0.5 > m.position.x + m.radius) && diff --git a/src/main/java/nl/requios/effortlessbuilding/network/QuickReplaceMessage.java b/src/main/java/nl/requios/effortlessbuilding/network/QuickReplaceMessage.java index e6f0c98..774c89d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/network/QuickReplaceMessage.java +++ b/src/main/java/nl/requios/effortlessbuilding/network/QuickReplaceMessage.java @@ -71,7 +71,6 @@ public class QuickReplaceMessage implements IMessage { //Send back your info return new QuickReplaceMessage(ClientProxy.previousLookAt); - //TODO break block then return // Minecraft.getMinecraft().addScheduledTask(() -> { // EffortlessBuilding.packetHandler.sendToServer(new QuickReplaceMessage(Minecraft.getMinecraft().objectMouseOver)); // });