Posted June 15, 20214 yr 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?)
June 15, 20214 yr 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.
June 15, 20214 yr Author Apologies for the repeat, then. Do you have any advice relating to my main problem?
June 15, 20214 yr 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.
June 15, 20214 yr 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 June 15, 20214 yr by Syric
June 15, 20214 yr Add protected void createBlockStateDefinition(StateContainer.Builder<Block, BlockState> builder) { builder.add(LEVEL); } snippet taken from the CauldronBlock with slight edit
June 15, 20214 yr 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 June 15, 20214 yr by Luis_ST
June 15, 20214 yr 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.