Jump to content

Recommended Posts

Posted

I've been working on a mod that introduces new gems and variants of the Amethyst geodes. An issue I've been running into is when trying to get My new buds to grow from the budding blocks is "The method defaultBlockState() is undefined for the type RegistryObject<AmberClusterBlock>"

   public void randomTick(BlockState p_152728_, ServerLevel p_152729_, BlockPos p_152730_, Random p_152731_) {
          if (p_152731_.nextInt(5) == 0) {
             Direction direction = DIRECTIONS[p_152731_.nextInt(DIRECTIONS.length)];
             BlockPos blockpos = p_152730_.relative(direction);
             BlockState blockstate = p_152729_.getBlockState(blockpos);
             RegistryObject<AmberClusterBlock> block = null;
             if (canClusterGrowAtState(blockstate)) {
                block = Blockinit.Small_Amber_Bud;
             } else if (blockstate.is(Blockinit.Small_Amber_Bud) && blockstate.getValue(AmberClusterBlock.FACING) == direction) {
                block = Blockinit.Medium_Amber_Bud;
             } else if (blockstate.is(Blockinit.Medium_Amber_Bud) && blockstate.getValue(AmberClusterBlock.FACING) == direction) {
                block = Blockinit.Large_Amber_Bud;
             } else if (blockstate.is(Blockinit.Large_Amber_Bud) && blockstate.getValue(AmberClusterBlock.FACING) == direction) {
                block = Blockinit.Amber_Cluster_Block;
             }

             if (block != null) {
                BlockState blockstate1 = block.defaultBlockState().setValue(AmberClusterBlock.FACING, direction).setValue(AmberClusterBlock.WATERLOGGED, Boolean.valueOf(blockstate.getFluidState().getType() == Fluids.WATER));
                p_152729_.setBlockAndUpdate(blockpos, blockstate1);
             }

 

Anyone know what's causing this?

Posted
5 minutes ago, diesieben07 said:

 

Is this caused because RegistryObject's themselves are not able to have BlockStates Defined or is it because I've somehow messed up how I registered the BlockState?

Posted

do you know basic java?

19 hours ago, Tachsauce said:

RegistryObject<AmberClusterBlock> block = null;

use the Block directly at this point and not a RegistryObject

 

19 hours ago, Tachsauce said:

block = Blockinit.Small_Amber_Bud;

19 hours ago, Tachsauce said:

block = Blockinit.Medium_Amber_Bud;

19 hours ago, Tachsauce said:

block = Blockinit.Large_Amber_Bud;

19 hours ago, Tachsauce said:

block = Blockinit.Amber_Cluster_Block;

then use at these points RegistryObject#get to get the Block

  • Like 1
Posted

 public void randomTick(BlockState p_152728_, ServerLevel p_152729_, BlockPos p_152730_, Random p_152731_) {
          if (p_152731_.nextInt(5) == 0) {
             Direction direction = DIRECTIONS[p_152731_.nextInt(DIRECTIONS.length)];
             BlockPos blockpos = p_152730_.relative(direction);
             BlockState blockstate = p_152729_.getBlockState(blockpos);
             RegistryObject<Block> block = null;
               if (canClusterGrowAtState(blockstate)) {
                block = RegistryObject.of(new ResourceLocation("tachismod:small_amber_bud"), ForgeRegistries.BLOCKS);
             } else if (blockstate.is(Blocks.SMALL_AMETHYST_BUD) && blockstate.getValue(AmberClusterBlock.FACING) == direction) {
                block = RegistryObject.of(new ResourceLocation("tachismod:medium_amber_bud"), ForgeRegistries.BLOCKS);
             } else if (blockstate.is(Blocks.MEDIUM_AMETHYST_BUD) && blockstate.getValue(AmberClusterBlock.FACING) == direction) {
                block = RegistryObject.of(new ResourceLocation("tachismod:large_amber_bud"), ForgeRegistries.BLOCKS);
             } else if (blockstate.is(Blocks.LARGE_AMETHYST_BUD) && blockstate.getValue(AmberClusterBlock.FACING) == direction) {
                block = RegistryObject.of(new ResourceLocation("tachismod:amber_cluster_block"), ForgeRegistries.BLOCKS);
             }

             if (block != null) {
                BlockState blockstate1 = block.defaultBlockState().setValue(AmberClusterBlock.FACING, direction).setValue(AmberClusterBlock.WATERLOGGED, Boolean.valueOf(blockstate.getFluidState().getType() == Fluids.WATER));
                p_152729_.setBlockAndUpdate(blockpos, blockstate1);
             }

 

Not sure if this was the solution you were hoping for but its still throwing errors at me unfortunately.

Posted (edited)
12 minutes ago, Tachsauce said:

RegistryObject<Block> block = null;

why, use Block as local variable and not RegistryObject

21 hours ago, Tachsauce said:

block = Blockinit.Small_Amber_Bud

and then add there a simple .get()

 

20 hours ago, Luis_ST said:

Learn basic Java

Official documentation: https://docs.oracle.com/javase/tutorial/
Absolute basics with an interactive editor: https://www.codecademy.com/learn/learn-java
Ongoingonline course with assignments: https://java-programming.mooc.fi/

Edited by Luis_ST

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



×
×
  • Create New...

Important Information

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