Jump to content
Search In
  • More options...
Find results that contain...
Find results in...


  • Posts

  • Joined

  • Last visited

FireTamer81's Achievements

Tree Puncher

Tree Puncher (2/8)



  1. I now feel like a total idiot, and I am so sorry for the trouble (also the forge suggestion, I was under the impression that because you couldn't figure out the issue that it wasn't on my end.... when it totally was). Turns out minecraft does have a layering system thingy.... That highlighted float was "100.0f" in the repo you looked through.... I thought I would just change values around as a last ditch effort and changing that one worked.... So yea, sorry mate.
  2. I have no idea how this might work, I am honestly not to that level of coding yet (nor my understanding of forge), but I have recently attempted making a GUI with movable components and found that rendered string (and possibly other things I hadn't found yet) rendered behind the movable GUI components. I had asked on modder support, but even diesieben07 wasn't able to figure out what was going on after a short local test of my mod (please ignore my lack of experience with Github): So, perhaps for the newer versions of Forge, some edit to the vanilla GUI stuff to allow layer-based rendering, or just something to fix the issue in the linked post.
  3. That's perfectly fine mate.... I guess I'll just keep looking for the answer then. Thank you for your time at least
  4. https://github.com/FireTamer81/DragonBlockBeyond/blob/7e69f0bfd01cf7bc4d9cdff6c22e6b37a5d8a362/src/main/java/io/github/firetamer/dbb/modules/gui_testing/player_screen/children/PlayerStatGui.java#L145
  5. Oh, let me update it then It should be updated
  6. Right, sorry. Just imagine it wasn't, because the image I posted was from when it was.
  7. Boosting. I don't quite know if I did something wrong or it's just no one has an answer.
  8. Oh, uh, sorry mate. I didn't know that was a thing. Uh here then: Where I draw the string the normal way, but it resulted in the image above. https://github.com/FireTamer81/DragonBlockBeyond/blob/cc0f5559e37071d39e6a542cb463fc8029acef8c/src/main/java/io/github/firetamer/dbb/modules/gui_testing/player_screen/children/PlayerStatGui.java#L134 One of my attempts (that I actually saved) on drawing GUI elements based on a z value: https://github.com/FireTamer81/DragonBlockBeyond/blob/cc0f5559e37071d39e6a542cb463fc8029acef8c/src/main/java/io/github/firetamer/dbb/modules/gui_testing/test_screen/base_classes/BaseScreen.java#L72 https://github.com/FireTamer81/DragonBlockBeyond/blob/cc0f5559e37071d39e6a542cb463fc8029acef8c/src/main/java/io/github/firetamer/dbb/modules/gui_testing/test_screen/base_classes/BaseScreen.java#L50
  9. @Override public void render(MatrixStack stack, int p_230430_2_, int p_230430_3_, float p_230430_4_) { this.renderBG(stack); this.strengthButton.render(stack, p_230430_2_, p_230430_3_, p_230430_4_); ITextComponent strengthButtonText = new StringTextComponent("Hello, this is the Strength Button"); int strengthButtonTopLeftPosX = (int)(topLeftX + 10); int strengthButtonTopLeftPosY = (int)(topLeftY + 20); FontRenderer fontRenderer = this.mc.font; drawCenteredString(stack, fontRenderer, strengthButtonText, strengthButtonTopLeftPosX, strengthButtonTopLeftPosY, 0xFFFFFF); //drawString(stack, fontRenderer, strengthButtonText, strengthButtonTopLeftPosX, strengthButtonTopLeftPosY, 0xFFFFFF); //this.mc.font.draw(stack, "Hello All", strengthButtonTopLeftPosX, strengthButtonTopLeftPosY, 0xFFFFFF); super.render(stack, p_230430_2_, p_230430_3_, p_230430_4_); } private void renderBG(MatrixStack stack) { RenderSystem.pushMatrix(); RenderSystem.translatef(0.0f, 0.0f, 100.0f); this.mc.getTextureManager().bind(BACKGROUND_TEXTURE); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); this.blit(stack, (int)(topLeftX), (int)(topLeftY), 0, 0, 236, 187); //Main Background RenderSystem.popMatrix(); } This is the first way I did it. I don't still have the other ways I tried it other than what's in the BaseScreen class here: protected void drawText(MatrixStack matrix, ITextComponent text, int x, int y, Color textColor, boolean shadow) { GL11.glPushMatrix(); GL11.glTranslatef(0, 0, zLevel + .5f); if (shadow) { mc.font.drawShadow(matrix, text, x, y, textColor.hashCode()); } else { mc.font.draw(matrix, text, x, y, textColor.hashCode()); } //Don't understand this bit or it's purpose //TextColor.WHITE.apply(); GL11.glPopMatrix(); } protected void drawCenteredText(MatrixStack matrix, ITextComponent text, int x, int y, int maxX, int maxY, Color textColor, boolean shadow) { int centerX = x + ((maxX - x) / 2) - (mc.font.width(text) / 2); int centerY = y + ((maxY - y) / 2) - (mc.font.lineHeight / 2); drawText(matrix, text, centerX, centerY, textColor, shadow); } @Override public void blit(MatrixStack pMatrixStack, int topLeftX, int topLeftY, int textureWidth, int textureHeight, int pUWidth, int pVHeight) { float f = 0.00390625F; float f1 = 0.00390625F; BufferBuilder bufferbuilder = Tessellator.getInstance().getBuilder(); bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); bufferbuilder .vertex(x, y + height, this.zLevel) .uv(((float)textureWidth * f), ((float)(textureHeight + height) * f1)) .endVertex(); bufferbuilder .vertex(x + width, (y + height), this.zLevel) .uv(((float)(textureWidth + width) * f), ((float)(textureHeight + height) * f1)) .endVertex(); bufferbuilder .vertex(x + width, y, this.zLevel) .uv(((float)(textureWidth + width) * f), ((float)textureHeight * f1)) .endVertex(); bufferbuilder .vertex(x, y, this.zLevel) .uv(((float)textureWidth * f), ((float)textureHeight * f1)) .endVertex(); bufferbuilder.end(); RenderSystem.enableAlphaTest(); WorldVertexBufferUploader.end(bufferbuilder); }
  10. Strings have been the only thing I have come across that does it so far (I haven't gone much further since I hit this issue). I tried rendering them many ways. Directly in the GUI class render method, with the button constructor, etc. Strings always end up behind the GUI So, I went about trying to find a way to either move the string forward or move the GUI back.
  11. It also isn't a container or anything like that at the moment since I thought that would overcomplicate things while I am trying to get this one aspect to work right, it's just opened by a keybind.
  12. https://github.com/FireTamer81/DragonBlockBeyond/tree/main/src/main/java/io/github/firetamer/dbb/modules/gui_testing This is the link to my repo. The two packages within the one the link leads to were two separate tests I did, the "player_screen" package having the screen with movable components and the "test_screen" package being a general test (for the second I had made a GUI with it, but that class isn't in the repo since I had earlier deleted it). I had tried something with GL11 in the "BaseScreen" class in the second package, but that didn't work in any tests I did with it. A couple days ago I had also tried just recreating the whole Screen-FocusableScreen-AbstractGUI vanilla class stuff, taking out wasn't needed and editing what I thought would work, but a pal of mine said you can only make a GUI by extending the Screen class since there was a forge bit in there that was required or something. Don't have that anywhere since I hadn't updated the repo much during that test.
  13. At the moment I have a static GUI with some buttons and one that moves around when clicked and dragged. The one that moves is meant to display a certain set of information, but everyway that I have tried to draw strings among other things has resulted in them rendering behind the moving element. For the past week I have been trying to find a way to properly control what objects render in front of/behind other objects to no avail. I have also been trying to look at sources like FTB Lib for how they did, quote "layer-based GUI components" (I think that's the exact words) and Mekanism with their movable GUI elements, but again they are both more complex than I am used to (I have only just started doing GUIs 9 days ago). If someone could either shed some light on how one of those two mods do their layer based GUIs, perhaps give a different source that is a bit more clear, or even just explain how you would do it (every ounce of code mumbo jumbo you feel like using, which I will then use the power of google to figure out)
  14. Update... I still can't figure it out. So, since the blockmodels are super custom while the blockstates and item models are your average ones, I have come up with the idea of only doing datagen for those two and just referencing the pre-made blockmodels which I will put into a subfolder of the models/block directory. It will still be a little bit of pain, but at least my resources folder will stay organized which was my original goal.
  15. This is what I have for two ModelFiles, the first only applying one overlay and the second apply the first overlay + another. public ModelFile scuffedWarenaiBlockModel(Block block) { return models().getBuilder("scuffed_" + name(block)) .parent(existingMcModel("block")) .texture("particle", warenaiBlockTexture(block)) .texture("underlay", warenaiBlockTexture(block)) .texture("overlay", scuffedTexture()) .element().from(0, 0, 0).to(16, 16, 16).allFaces((direction, faceBuilder) -> faceBuilder.uvs(0, 0, 16, 16).texture("#underlay").cullface(direction)).end() .element().from(0, 0, 0).to(16, 16, 16).allFaces((direction, faceBuilder) -> faceBuilder.uvs(0, 0, 16, 16).texture("#overlay").cullface(direction)).end(); } public ModelFile crackedWarenaiBlockModel(Block block, int crackedLevel) { return models().getBuilder("cracked" + crackedLevel + "_" + name(block)) .parent(existingMcModel("block")) .texture("particle", warenaiBlockTexture(block)) .texture("underlay", warenaiBlockTexture(block)) .texture("overlay1", scuffedTexture()) .texture("overlay2", crackedTexture(crackedLevel)) .element().from(0, 0, 0).to(16, 16, 16).allFaces((direction, faceBuilder) -> faceBuilder.uvs(0, 0, 16, 16).texture("#underlay").cullface(direction)).end() .element().from(0, 0, 0).to(16, 16, 16).allFaces((direction, faceBuilder) -> faceBuilder.uvs(0, 0, 16, 16).texture("#overlay1").cullface(direction)).end() .element().from(0, 0, 0).to(16, 16, 16).allFaces((direction, faceBuilder) -> faceBuilder.uvs(0, 0, 16, 16).texture("#overlay2").cullface(direction)).end(); } This works, but it doesn't seem so simple for a stair block. I copied the stair stuff from the forge BlockStateProvider class to get started with a normal stair model that works: public void warenaiStairBlock(StairsBlock block, ResourceLocation texture) { warenaiStairBlockInternal1(block, texture, texture, texture); } public void warenaiStairBlockInternal1(StairsBlock block, ResourceLocation side, ResourceLocation bottom, ResourceLocation top) { warenaiStairBlockInternal2(block, block.getRegistryName().toString(), side, bottom, top); } public void warenaiStairBlockInternal2(StairsBlock block, String baseName, ResourceLocation side, ResourceLocation bottom, ResourceLocation top) { ModelFile normal_stairs = models().stairs(baseName, side, bottom, top); ModelFile normal_stairsInner = models().stairsInner(baseName + "_inner", side, bottom, top); ModelFile normal_stairsOuter = models().stairsOuter(baseName + "_outer", side, bottom, top); warenaiStairsBlock(block, normal_stairs, normal_stairsInner, normal_stairsOuter); } public void warenaiStairsBlock(StairsBlock block, ModelFile stairs, ModelFile stairsInner, ModelFile stairsOuter) { getVariantBuilder(block) .forAllStatesExcept(state -> { Direction facing = state.getValue(StairsBlock.FACING); Half half = state.getValue(StairsBlock.HALF); StairsShape shape = state.getValue(StairsBlock.SHAPE); int yRot = (int) facing.getClockWise().toYRot(); // Stairs model is rotated 90 degrees clockwise for some reason yRot %= 360; boolean uvlock = yRot != 0 || half == Half.TOP; // Don't set uvlock for states that have no rotation ModelFile shapeDependentModel = shape == StairsShape.STRAIGHT ? stairs : shape == StairsShape.INNER_LEFT || shape == StairsShape.INNER_RIGHT ? stairsInner : stairsOuter; if (shape == StairsShape.INNER_LEFT || shape == StairsShape.OUTER_LEFT) { yRot += 270; // Left facing stairs are rotated 90 degrees clockwise } if (shape != StairsShape.STRAIGHT && half == Half.TOP) { yRot += 90; // Top stairs are rotated 90 degrees clockwise } return ConfiguredModel.builder() .modelFile(shapeDependentModel) .rotationX(half == Half.BOTTOM ? 0 : 180) .rotationY(yRot) .uvLock(uvlock) .build(); }, StairsBlock.WATERLOGGED); } Now I have no idea where to go. I could take the time and figure it out all on my own, but since I really should be working on a college essay I thought I would see if anyone else knew what to do first. If not, then I will just do it myself when I get the time.
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.