Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

I'm currently trying to make a new cauldron-type block, and I'm having difficulty implementing blockstates. Here's the relevant part of the alchemical cauldron's code:

 

public class AlchemicalCauldronBlock extends Block {
    public static final IntegerProperty LEVEL = IntegerProperty.create("level", 1, 3);
    private static final VoxelShape INSIDE = box(2.0D, 4.0D, 2.0D, 14.0D, 16.0D, 14.0D);
    protected static final VoxelShape SHAPE = VoxelShapes.join(VoxelShapes.block(), VoxelShapes.or(box(0.0D, 0.0D, 4.0D, 16.0D, 3.0D, 12.0D), box(4.0D, 0.0D, 0.0D, 12.0D, 3.0D, 16.0D), box(2.0D, 0.0D, 2.0D, 14.0D, 3.0D, 14.0D), INSIDE), IBooleanFunction.ONLY_FIRST);

    public AlchemicalCauldronBlock() {
        super(Properties.of(Material.METAL).sound(SoundType.METAL).harvestLevel(3).strength(2F,2F));
//        this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, 0));
//        this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, Integer.valueOf(0)));
    }
...

When I try to run this with either of the two attempts at registerDefaultState uncommented, I get this error: https://pastebin.com/vPf3UryC. For convenience, I believe this part is most relevant:

Quote

Details:
    Mod File: main
    Failure message: Alchemy Plus (alchemyplus) encountered an error during the load_registries event phase
        java.lang.IllegalArgumentException: Cannot set property IntegerProperty{name=level, clazz=class java.lang.Integer, values=[1, 2, 3]} as it does not exist in Block{null}
    Mod Version: NONE
    Mod Issue URL: NOT PROVIDED
    Exception message: java.lang.IllegalArgumentException: Cannot set property IntegerProperty{name=level, clazz=class java.lang.Integer, values=[1, 2, 3]} as it does not exist in Block{null}

How can I avoid this? My registry classes look like this, if it helps:

public class registry {

    public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, AlchemyPlus.MODID);
    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, AlchemyPlus.MODID);

    public static void register() {
        IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
        BLOCKS.register(modEventBus);
        ITEMS.register(modEventBus);

        registerItems.register();
        registerBlocks.register();
    }

}
public class registerBlocks {

    public static final RegistryObject<Block> ALCHEMICAL_CAULDRON = register("alchemical_cauldron", AlchemicalCauldronBlock::new);

    static void register() {}

    private static <T extends Block> RegistryObject<T> registerNoItem(String name, Supplier<T> block) {
        return registry.BLOCKS.register(name, block);
    }

    private static <T extends Block> RegistryObject<T> register(String name, Supplier<T> block) {
        RegistryObject<T> ret = registerNoItem(name, block);
        registry.ITEMS.register(name, () -> new BlockItem(ret.get(), new Item.Properties().tab(ItemGroup.TAB_BREWING)));
        return ret;
    }

}

Full GitHub repository available here.

 

(Other minor problem(?):  I copied the methods getShape and getInteractionShape from net.minecraft.block.CauldronBlock and I'm getting these weird warnings. What's up with that? Do I need to worry about it?)

image.thumb.png.d7de8f6211459760f9425a09fe31b5c4.png
 

Mojang marks methods as deprecated meaning "do not call this directly, call the BlockState version." It is not a "do not override indicator."

 

There are literally hundreds of posts about it on this forum.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

  • Author

Apologies for the repeat, then. Do you have any advice relating to my main problem?

You lack this method:
https://github.com/Draco18s/ReasonableRealism/blob/1.14.4/src/main/java/com/draco18s/harderores/block/ore/HardOreBlock.java#L51-L54

I'm not sure what the Mojang mapping name is for it, but you still lack it.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

  • Author

Every implementation of blockstates I've been able to find (including the one you just linked) does something along the lines of:

this.setDefaultState(this.stateDefinition.any().setValue(LEVEL, Integer.valueOf(0)));

but setDefaultState shows up red and IntelliJ claims it can't resolve the symbol. I assume the method's been renamed. Where can I find it? If it's registerDefaultState then I'm already using that, so that's not the solution (oh well).

 

As for your suggestion of what is needed, adding that method did not change the outcome- in fact, it threw an error because it didn't actually override anything.

My bad, you said you didn't know the Mojang mapping. Never mind.

If anyone else has suggestions, my original problem is still present.

Edited by Syric

Add

   protected void createBlockStateDefinition(StateContainer.Builder<Block, BlockState> builder) {
      builder.add(LEVEL);
   }

snippet taken from the CauldronBlock with slight edit

setDefaultState is called in mojang mappings registerDefaultState
you can use the bot an the forge discord server
https://discord.com/invite/UvedJ9m

EDIT: commands:

  • mcpe -> mojang : !moj -c mcp methode/field/(1.17) class
  • mojang -> mcpe : !mcp -c moj methode/field/(1.17) class
7 minutes ago, lupicus said:

Add




   protected void createBlockStateDefinition(StateContainer.Builder<Block, BlockState> builder) {
      builder.add(LEVEL);
   }

snippet taken from the CauldronBlock with slight edit

this create StateDefinition but set not the default values

Edited by Luis_ST

  • Author

createBlockStateDefinition seems to have done the trick, at least for now- the game does not crash on startup! I'll have to investigate more to make sure things are actually working (and, y'know, actually do something with the blockstates) but I'm leaving that to tomorrow.

Thank you all for the help!

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.