Jump to content

Silverminer

Members
  • Posts

    9
  • Joined

  • Last visited

Posts posted by Silverminer

  1. Look the Forge's source code. In BedBlock, minecrafts uses PlayerEntity#displayClientMessage to display sleep result (which can be success or failure, so "You can only sleep at night"). Just give an ITextComponent (StringTextComponent or TranslationTextComponent in most cases) and set the second boolean to true to send an state text instead of sending it to the chat.

    So:
     

    PlayerEntity player = //Get player here
    player.displayClientMessage(new StringTextComponent(""), true);

    I havn't check that, but it should be somthing like that

    • Thanks 1
  2. Looks like it is an issue with FOV, because when disabling FOV effects the box is rendered fine. Changing fov in options screen, does move the world but not my box, when i use worldrender last event. It looks like #renderWorld does implement fov anywhere, but i can't figure out where. Do i need to implement fov myself and if yes how to do it?

    Or do i need something else, what BlockHighlight Event already implements? Anybody an idea, or an idea where to look? An working example would help too.

    Thanks in advance

  3. Thanks for the replys. I was using the same translation as minecraft, but i've tried yours too and it still does not work. The lines are still moving while flying and so on, but now sneaking does affect it too. The lines were also in the middle of the block instead of beeing at the side.

    Vector3d vec = mc.gameRenderer.getMainCamera().getPosition();
    double renderPosX = vec.x();
    double renderPosY = vec.y();
    double renderPosZ = vec.z();
    ms.pushPose();
    ms.translate(-renderPosX, -renderPosY, -renderPosZ);

    Right now i was using this translation and i've checked, the Minecraft function (WorldRenderer#renderLineBox) uses MatrixStack#last#pose in vertexbuilder.

    I'll keep on searching for the right translation and any idea would be nice.

    Any idea about the colour or the lineWidth?

    Thanks for all the help again

  4. I just need to translate the matrixstack back to the world coordinates. How should i do it instead? Were is the difference between the MatrixStacks of the two events?
    To me it looks like Minecraft does some translations in #renderLevel, but i can see which ones.  Am i wrong?
    Is the translation using render entities position and partial ticks better?

    Or is the translation completly useless?

  5. Hello,

    this is my first post, so please be considerate of errors

    The whole code is on my github too: https://github.com/Silverminer007/Shrines/blob/experimental/src/main/java/com/silverminer/shrines/events/ClientEvents.java

    So, i want to draw boxes to the world which don't depent on any block/tileentity in the world. I've written a method that should draw the lines. I'm calling it from RenderWorldLastEvent event. Here is my code:

    public static void renderBounds(MatrixStack ms) {
    			// Enable depth test first
    			RenderSystem.depthMask(false);
    
    			// Get Minecraft and store it locally for multiple use
    			Minecraft mc = Minecraft.getInstance();
    
    			// Get dimension to draw only bounds of the correct dimension
    			RegistryKey<World> dim;
    			if (mc.level != null) {
    				dim = mc.level.dimension();
    			} else {
    				dim = null;
    			}
    
    			// This doesn't work in both ways. What's the correct / working way to do that?
    			RenderSystem.lineWidth(30.0f);
    
    			// Translate coordinates from players system to world system
    			Vector3d vec = mc.gameRenderer.getMainCamera().getPosition();
    			double renderPosX = vec.x();
    			double renderPosY = vec.y();
    			double renderPosZ = vec.z();
    			ms.pushPose();
    			ms.translate(-renderPosX, -renderPosY, -renderPosZ);
    
    			// Get vertex builder
    			IRenderTypeBuffer irendertypebuffer1 = mc.renderBuffers().bufferSource();
    			IVertexBuilder vb = irendertypebuffer1.getBuffer(RenderType.lines());
    
    			// Color of the bound (White)
    			Color c = new Color(Utils.properties.bound_color);
    			// Split up in red, green and blue and transform it to 0.0 - 1.0
    			float red = c.getRed() / 255.0f;
    			float green = c.getGreen() / 255.0f;
    			float blue = c.getBlue() / 255.0f;
    
    			// Iterate over all bounds to draw
    			for (CustomStructureData data : Utils.DATAS_FROM_SERVER) {
    				for (ResourceData rd : data.PIECES_ON_FLY) {
    					if (rd.getDimension() == dim) {
    						MutableBoundingBox mbb = rd.getBounds();
    						// Drawing a line box as in StructureTileEntityRenderer#render
    						WorldRenderer.renderLineBox(ms, vb, mbb.x0, mbb.y0, mbb.z0, mbb.x1, mbb.y1, mbb.z1, red, green,
    								blue, 1.0f, red, green, blue);
    					}
    				}
    			}
    			ms.popPose();
    		}

    The lines were drawn, but are in the wrong color (Dark Green/Black instead of White) until the inventory is opened. After opening they turn white. The lines are also moving while flying, sprinting and bobbing. Looks like i've missed something, but what?
    I've tested to call my method from DrawHighlightEvent.HighlightBlock and suprisingly everything worked fine! I've searched in vanilla code and saw, DrawHighlightEvent.HighlightBlock is called in WorldRenderer#renderLevel and RenderWorldLastEvent from GameRenderer#render. GameRenderer calls first WorldRenderer#renderLevel and then DrawHighlightEvent.HighlightBlock is fired, so something seems to change inside #renderLevel. I think it's MatrixStack, because it's the only parameter i use from RenderWorldLastEvent and DrawHighlightEvent.HighlightBlock. It could also be any variable from Minecraft Instance, but i'm not sure how to check that.


    In the image, you see two boxes, one from DrawHighlightEvent.HighlightBlock(the inner white) and one from RenderWorldLastEvent(The outer)

     

    Does anyone have an idea how to fix or what to check?

    Thanks for all the help in advance

    2021-05-18_12.31.35.png

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.