Jump to content

Block state json with submodels shows incorrect in inventory/hand?


pkmnfrk

Recommended Posts

I have a block that has 5 variants, each of which is a meant to be layered on top of the final block, depending on a BlockState property. In the actual world, this block works A-OK. However, there is a slight issue with the block when in your inventory.

 

2018-12-18_01_43_30.png.a13db39bd0f8359ec9df3b966ae57bfb.png

 

As you can see, the block is being rendered directly from the side, which is undesirable. Also, you can't see it in this screen shot, but the in-hand model is being rendered behind me.

 

I added display options to each composite model to rotate them, and if I put a single model in an item directly, it rotates correctly.

 

2018-12-18_01_46_18.png.59bfa0cf5312bcda1fea2e976b831a6b.png

 

Am I doing something wrong, or is this a bug?

 

One of the models: https://github.com/pkmnfrk/factorycraft/blob/1.12.2/src/main/resources/assets/factorycraft/models/block/boulder/0.json

The main blockstate json: https://github.com/pkmnfrk/factorycraft/blob/1.12.2/src/main/resources/assets/factorycraft/blockstates/iron_boulder.json

The test item in the second screen shot: https://github.com/pkmnfrk/factorycraft/blob/1.12.2/src/main/resources/assets/factorycraft/blockstates/test.json

 

In that last file, if you change the "inventory" variant to be the same as the "normal" variant, it breaks the same way (doesn't rotate)

 

Edit: Thinking about it, this would not be too difficult to avoid using sub models for (I could just make 5 models that roll up the different pieces), but I can foresee issues in the future for more complicated blocks that would make this a pain, so I would really like to understand this issue

Edited by pkmnfrk
Link to comment
Share on other sites

Since you are already using forge blockstates you can just specify the transformation matrix directly in there. You are only specifying the rotation which... I am not even sure if you can specify it like that, don't you have to provide a quaternion? Or at least the angle and the Axes? Or if these are rotations for the axes then why are you rotating 90 degrees around the X one? And as you've discovered the rotation alone isn't enough.

In any case forge allows you to specify built-in transformation data, already pre-made for you. In your case the forge:default-block transform would do the trick. You can see an example here.

Edited by V0idWa1k3r
Link to comment
Share on other sites

The rotation specified in the blockstate json was copied out of the model in a half-baked attempt to apply rotation to the entire model. I forgot to remove it before comitting.

 

Or, if you're referring to the model rotations, I'm going strictly by the Model format (https://minecraft.gamepedia.com/Model) and what the editor I'm using shows (https://blockbench.net/) which has so far been correct when I'm not using submodels.

 

I'll be honest, I don't know what a quaternion is, but I will look at your example and see if I can make sense of it.

Link to comment
Share on other sites

Ok, the only thing you have that I don't is:

 

    "transform": "forge:default-block",
    "gui3d": true

 

Which doesn't seem to change anything when I put it into my block state.

 

To be clear, what I'm expecting is for the rotation in each model to be applied when the model is composited. I'm pretty sure the fact that it doesn't work (but it does if I reference a model directly) is a bug.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
  • Topics

×
×
  • Create New...

Important Information

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