Jump to content

[1.16.5] Block being placed with rotation


samjviana

Recommended Posts

8 hours ago, NinjaSenpai3773 said:

I don't understand what's actually wrong here. are you creating a mod and this is happening, or are you playing with a mod installed and it happens? Either way this should be found in blockstates.json or blockstates.txt represented by a number between 0-15

Sorry, i'm creating a mod.

3 hours ago, diesieben07 said:

You probably specified multiple models in your blockstate json, then Minecraft will pick a random one based on block position.

The block has multiple models, with 1, 2 and 3 mushrooms, like so: 3DZolt5.png

but i still does'n get why is it that it appears in diferent directions when placed, i'll post the blockstate.json below. Actually was started to think that is some default mechanic of minecraft even the grass block has some "randomness" when placed, you can see this pushing it with an piston, right when it change it position, the block "rotates":

KzZ6wHQ.gif

{
    "variants": {
		"mushrooms=1": [
			{
				"model": "bunchofthings:block/yellow_mushroom"
			},
			{
				"model": "bunchofthings:block/yellow_mushroom",
				"y": 90
			},
			{
				"model": "bunchofthings:block/yellow_mushroom",
				"y": 180
			},
			{
				"model": "bunchofthings:block/yellow_mushroom",
				"y": 270
			}		
		],
		"mushrooms=2": [
			{
				"model": "bunchofthings:block/two_yellow_mushroom"
			},
			{
				"model": "bunchofthings:block/two_yellow_mushroom",
				"y": 90
			},
			{
				"model": "bunchofthings:block/two_yellow_mushroom",
				"y": 180
			},
			{
				"model": "bunchofthings:block/two_yellow_mushroom",
				"y": 270
			}		
		],
		"mushrooms=3": [
			{
				"model": "bunchofthings:block/three_yellow_mushroom"
			},
			{
				"model": "bunchofthings:block/three_yellow_mushroom",
				"y": 90
			},
			{
				"model": "bunchofthings:block/three_yellow_mushroom",
				"y": 180
			},
			{
				"model": "bunchofthings:block/three_yellow_mushroom",
				"y": 270
			}		
		]		
    }
}

 

Link to comment
Share on other sites

20 minutes ago, diesieben07 said:

For each of the three mushroom variants you are specifying four models, with rotations 0, 90, 180 and 270 around the y axis. Minecraft will pick a random one of these based on the location of the block.

can i override this? or at least get what is the current rotation.

Edited by samjviana
Link to comment
Share on other sites

44 minutes ago, diesieben07 said:

Don't give it 4 models? :D

Create a new Random (or reuse one). Call Random#setSeed(long). The value is AbstractBlockState#getSeed(BlockPos). Then look at what WeightedBakedModel does with this Random instance to pick the actual model being rendered.

Oohhh, now i understand what you're mean with "multiple models" lol, the answer was on my face.
I'll edit to 1 model only, thanks

Link to comment
Share on other sites

On 11/10/2021 at 10:15 AM, diesieben07 said:

Don't give it 4 models? :D

Create a new Random (or reuse one). Call Random#setSeed(long). The value is AbstractBlockState#getSeed(BlockPos). Then look at what WeightedBakedModel does with this Random instance to pick the actual model being rendered.

Sorry for bringing back this topic but can you explain better how i can get the current rotation of the block? I looked at WeightedBakedModel but i couldn't find/understand how can i get the current rotated baked model.

Link to comment
Share on other sites

Don't know if i am missing something but i spent the last hours trying to understand how to use getWeightedItem(List<T> p_146315_, int p_146316_) (as in 1.17.1), by looking in 1.16 i can assume that are the models and p_146316_ are the weight.
The thing is that i could figure out how to get those values, but anyway, i'll give this up, and intead i'll rewrite the blockstate to use FACING, i think ... and HOPE, i will be better to work out.
thanks anyway

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

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • 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;     }  
  • Topics

×
×
  • Create New...

Important Information

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