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.

TheA13X

Members
  • Joined

  • Last visited

Everything posted by TheA13X

  1. Oh. That... makes sence Well, I guess I can mark it as solved then. Have a virtual cookie!
  2. Thanks for the answer! After reading the tutorial to slabs I understood what you mean. There's only a problem with the stairs now. That's absolutely true, but it doesn't make a lot of sence. The Minecraft buit-in stairs have way more than 16 states as well. I mean they have 3 properties which result in 40 blockstates. Minecraft doesn't use different blocks for the same stairs, does it? But okay. I guess I can fix that. For the slabs, at least.
  3. Hello once again, world! I have a little big Problem with custom slab/stairs blocks. When placing them, they don't adjust and just stay in their "base state". I debugged it a little bit and saw, that the right Blockstate has been computed, but when actually placing the block in World.setBlockState(...) it sets it to the wrong state (Slabs are ALWAYS on the bottom, stairs ALWAYS facing east, in outer-right shape and on the bottom as well). Guess I forgot to include something, but I can't find it any where. That's what I HAVE done... 1...in my Custom SlabBlock Class: - setDefaultState to a Variant of my Tree Types - override getStateFromMeta, getMetaFromState and damageDropped, since I have several SubTypes of that Block. - override createBlockState adding my custom Variant Property and BlockSlab's HALF property - override getVariantProperty and getVariant, so the slab-to-double-slab thing works Code: public static final PropertyEnum VARIANT = PropertyEnum.create("variant", ModWoodBlock.EnumType.class); public ModSlabBlock(Iterable<? extends DefinesSlab> subBlocks) { super(ImmutableList.copyOf(subBlocks)); setCreativeTab(TheMod.INSTANCE.creativeTab()); setHardness(2.0F); setResistance(5.0F); setStepSound(soundTypeWood); setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, ModWoodBlock.EnumType.ACEMUS)); } @Override protected String resourcePrefix() { return TheMod.getResourcePrefix(); } @Override public IBlockState getStateFromMeta(int meta) { return getDefaultState().withProperty(VARIANT, ModWoodBlock.EnumType.fromId(meta)); } @Override public int getMetaFromState(IBlockState state) { ModWoodBlock.EnumType type = (ModWoodBlock.EnumType) state.getValue(VARIANT); return type.ordinal(); } @Override public int damageDropped(IBlockState state) { return getMetaFromState(state); } @Override protected BlockState createBlockState(){ return new BlockState(this, new IProperty[] { VARIANT , HALF}); } @Override public IProperty getVariantProperty() { return VARIANT; } @Override public Object getVariant(ItemStack stack) { if(stack.getItem() instanceof ItemBlock && ((ItemBlock)stack.getItem()).getBlock() instanceof ModSlabBlock){ return getStateFromMeta(stack.getItem().getDamage(stack)).getValue(VARIANT); } return null; } 2... in my Custom Stairs Class: The same things, only without the custom variant property part, since it's one type per Block. Code: private ModWoodBlock.EnumType variant; public ModStairsBlock(DefinesStairs definition) { super(definition); variant=(ModWoodBlock.EnumType)definition.stairsModelSubBlockVariant(); setCreativeTab(TheMod.INSTANCE.creativeTab()); } @Override protected String resourcePrefix() { return TheMod.getResourcePrefix(); } @Override protected BlockState createBlockState(){ return new BlockState(this, new IProperty[] {FACING,HALF,SHAPE}); } @Override public IBlockState getStateFromMeta(int meta) { return getDefaultState(); } @Override public int getMetaFromState(IBlockState state) { return 0; } @Override public int damageDropped(IBlockState state) { return 0; } 3. There is also a Custom Slab Item Class, if I want to customize some code there. But at the moment, it only has a constructor. Code: public ModSlabItem(Block block, ModSlabBlock singleSlab, ModSlabBlock doubleSlab) { super(block, singleSlab, doubleSlab); } 4. Registering the block item models The stairs block public void registerBlockModel(int i) { String iconName = getUnlocalizedName().substring(getUnlocalizedName().indexOf('.')+1); iconName = iconName.substring(0,iconName.indexOf('.'))+i; Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(this),0,new ModelResourceLocation(iconName,"inventory"));//iconName is "modid:stairs<integer> } and the slab block public final void registerBlockModels() { for (int i = 0; i < subBlocks.size(); i++) { final String iconName = String.format("slab_%s", subBlocks.get(i).slabModelSubBlockVariant().name().toLowerCase().replace('.', '_')); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(this),i,new ModelResourceLocation(resourcePrefix()+iconName,"inventory"));//iconName is "modid:slab_<variant> } } 5. Registering the Blocks private static void registerStairsBlock(Block block, String name)//name is "stairs<integer>" { GameRegistry.registerBlock(block, name); Blocks.fire.setFireInfo(block, DEFAULT_STAIRS_FIRE_ENCOURAGEMENT, DEFAULT_STAIRS_FLAMMABILITY); } private static void registerSlabBlock(Block block, String name, SlabBlock singleSlab, SlabBlock doubleSlab)//name is "sslab<integer>" and "dslab<integer>" { GameRegistry.registerBlock(block, ModSlabItem.class, name, singleSlab, doubleSlab); //tying Block to custom Item class. The last two argumets are arguments for the custom item constructor. } 6. Register the Subblocks of my slabs in the ModelBakery for (SlabBlock block : singleSlabBlocks) { ModelBakery.addVariantName(Item.getItemFromBlock(block), block.getUnlocalizedName().substring(block.getUnlocalizedName().indexOf('.')+1) + "_" + type.getName()); //registered as "modid:slab_<type>" } for (SlabBlock block : doubleSlabBlocks) { ModelBakery.addVariantName(Item.getItemFromBlock(block), block.getUnlocalizedName().substring(block.getUnlocalizedName().indexOf('.')+1) + "_" + type.getName()); //registered as "modid:slab_<type>" } 7. Added BlockState, BlockModel and ItemModel. As I said, no errors from forge in this regard. But I'll post the code anyway Blockstates: sslab0.json: { "variants": { "half=bottom,variant=acemus": { "model": "dendrology:slab_bottom_acemus" }, "half=bottom,variant=cedrum": { "model": "dendrology:slab_bottom_cedrum" }, "half=bottom,variant=cerasu": { "model": "dendrology:slab_bottom_cerasu" }, "half=bottom,variant=delnas": { "model": "dendrology:slab_bottom_delnas" }, "half=bottom,variant=ewcaly": { "model": "dendrology:slab_bottom_ewcaly" }, "half=bottom,variant=hekur": { "model": "dendrology:slab_bottom_hekur" }, "half=bottom,variant=kiparis": { "model": "dendrology:slab_bottom_kiparis" }, "half=bottom,variant=kulist": { "model": "dendrology:slab_bottom_kulist" }, "half=bottom,variant=lata": { "model": "dendrology:slab_bottom_lata" }, "half=bottom,variant=nucis": { "model": "dendrology:slab_bottom_nucis" }, "half=bottom,variant=porffor": { "model": "dendrology:slab_bottom_porffor" }, "half=bottom,variant=salyx": { "model": "dendrology:slab_bottom_salyx" }, "half=bottom,variant=tuopa": { "model": "dendrology:slab_bottom_tuopa" }, "half=top,variant=acemus": { "model": "dendrology:slab_top_acemus" }, "half=top,variant=cedrum": { "model": "dendrology:slab_top_cedrum" }, "half=top,variant=cerasu": { "model": "dendrology:slab_top_cerasu" }, "half=top,variant=delnas": { "model": "dendrology:slab_top_delnas" }, "half=top,variant=ewcaly": { "model": "dendrology:slab_top_ewcaly" }, "half=top,variant=hekur": { "model": "dendrology:slab_top_hekur" }, "half=top,variant=kiparis": { "model": "dendrology:slab_top_kiparis" }, "half=top,variant=kulist": { "model": "dendrology:slab_top_kulist" }, "half=top,variant=lata": { "model": "dendrology:slab_top_lata" }, "half=top,variant=nucis": { "model": "dendrology:slab_top_nucis" }, "half=top,variant=porffor": { "model": "dendrology:slab_top_porffor" }, "half=top,variant=salyx": { "model": "dendrology:slab_top_salyx" }, "half=top,variant=tuopa": { "model": "dendrology:slab_top_tuopa" } } } dslab0.json: { "variants": { "half=bottom,variant=acemus": { "model": "dendrology:planks_acemus" }, "half=bottom,variant=cedrum": { "model": "dendrology:planks_cedrum" }, "half=bottom,variant=cerasu": { "model": "dendrology:planks_cerasu" }, "half=bottom,variant=delnas": { "model": "dendrology:planks_delnas" }, "half=bottom,variant=ewcaly": { "model": "dendrology:planks_ewcaly" }, "half=bottom,variant=hekur": { "model": "dendrology:planks_hekur" }, "half=bottom,variant=kiparis": { "model": "dendrology:planks_kiparis" }, "half=bottom,variant=kulist": { "model": "dendrology:planks_kulist" }, "half=bottom,variant=lata": { "model": "dendrology:planks_lata" }, "half=bottom,variant=nucis": { "model": "dendrology:planks_nucis" }, "half=bottom,variant=porffor": { "model": "dendrology:planks_porffor" }, "half=bottom,variant=salyx": { "model": "dendrology:planks_salyx" }, "half=bottom,variant=tuopa": { "model": "dendrology:planks_tuopa" }, "half=top,variant=acemus": { "model": "dendrology:planks_acemus" }, "half=top,variant=cedrum": { "model": "dendrology:planks_cedrum" }, "half=top,variant=cerasu": { "model": "dendrology:planks_cerasu" }, "half=top,variant=delnas": { "model": "dendrology:planks_delnas" }, "half=top,variant=ewcaly": { "model": "dendrology:planks_ewcaly" }, "half=top,variant=hekur": { "model": "dendrology:planks_hekur" }, "half=top,variant=kiparis": { "model": "dendrology:planks_kiparis" }, "half=top,variant=kulist": { "model": "dendrology:planks_kulist" }, "half=top,variant=lata": { "model": "dendrology:planks_lata" }, "half=top,variant=nucis": { "model": "dendrology:planks_nucis" }, "half=top,variant=porffor": { "model": "dendrology:planks_porffor" }, "half=top,variant=salyx": { "model": "dendrology:planks_salyx" }, "half=top,variant=tuopa": { "model": "dendrology:planks_tuopa" } } } stairs0.json: { "variants":{ "facing=north,half=bottom,shape=straight":{"model":"dendrology:acemus_straight_stairs","y":270,"uvlock":true}, "facing=south,half=bottom,shape=straight":{"model":"dendrology:acemus_straight_stairs","y":90,"uvlock":true}, "facing=east,half=bottom,shape=straight":{"model":"dendrology:acemus_straight_stairs","y":0,"uvlock":false}, "facing=west,half=bottom,shape=straight":{"model":"dendrology:acemus_straight_stairs","y":180,"uvlock":true}, "facing=north,half=bottom,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","y":270,"uvlock":true}, "facing=south,half=bottom,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","y":90,"uvlock":true}, "facing=east,half=bottom,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","y":0,"uvlock":false}, "facing=west,half=bottom,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","y":180,"uvlock":true}, "facing=north,half=bottom,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","y":270,"uvlock":true}, "facing=south,half=bottom,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","y":90,"uvlock":true}, "facing=east,half=bottom,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","y":0,"uvlock":false}, "facing=west,half=bottom,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","y":180,"uvlock":true}, "facing=north,half=bottom,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","y":270,"uvlock":true}, "facing=south,half=bottom,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","y":90,"uvlock":true}, "facing=east,half=bottom,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","y":0,"uvlock":false}, "facing=west,half=bottom,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","y":180,"uvlock":true}, "facing=north,half=bottom,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","y":270,"uvlock":true}, "facing=south,half=bottom,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","y":90,"uvlock":true}, "facing=east,half=bottom,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","y":0,"uvlock":false}, "facing=west,half=bottom,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","y":180,"uvlock":true}, "facing=north,half=top,shape=straight":{"model":"dendrology:acemus_straight_stairs","x":180,"y":270,"uvlock":true}, "facing=south,half=top,shape=straight":{"model":"dendrology:acemus_straight_stairs","x":180,"y":90,"uvlock":true}, "facing=east,half=top,shape=straight":{"model":"dendrology:acemus_straight_stairs","x":180,"y":0,"uvlock":true}, "facing=west,half=top,shape=straight":{"model":"dendrology:acemus_straight_stairs","x":180,"y":180,"uvlock":true}, "facing=north,half=top,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","x":180,"y":270,"uvlock":true}, "facing=south,half=top,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","x":180,"y":90,"uvlock":true}, "facing=east,half=top,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","x":180,"y":0,"uvlock":true}, "facing=west,half=top,shape=inner_left":{"model":"dendrology:acemus_inner_stairs","x":180,"y":180,"uvlock":true}, "facing=north,half=top,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","x":180,"y":270,"uvlock":true}, "facing=south,half=top,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","x":180,"y":90,"uvlock":true}, "facing=east,half=top,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","x":180,"y":0,"uvlock":true}, "facing=west,half=top,shape=inner_right":{"model":"dendrology:acemus_inner_stairs","x":180,"y":180,"uvlock":true}, "facing=north,half=top,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","x":180,"y":270,"uvlock":true}, "facing=south,half=top,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","x":180,"y":90,"uvlock":true}, "facing=east,half=top,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","x":180,"y":0,"uvlock":true}, "facing=west,half=top,shape=outer_left":{"model":"dendrology:acemus_outer_stairs","x":180,"y":180,"uvlock":true}, "facing=north,half=top,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","x":180,"y":270,"uvlock":true}, "facing=south,half=top,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","x":180,"y":90,"uvlock":true}, "facing=east,half=top,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","x":180,"y":0,"uvlock":true}, "facing=west,half=top,shape=outer_right":{"model":"dendrology:acemus_outer_stairs","x":180,"y":180,"uvlock":true} } } stairs1-stairs12: like stairs0, but with a different Variant in the block model name instead Block Models: slab_top_<variant>.json: { "parent": "block/upper_slab", "textures": { "bottom": "dendrology:blocks/planks_<variant>", "top": "dendrology:blocks/planks_<variant>", "side": "dendrology:blocks/planks_<variant>" } } slab_bottom_<variant>.json: { "parent": "block/half_slab", "textures": { "bottom": "dendrology:blocks/planks_<variant>", "top": "dendrology:blocks/planks_<variant>", "side": "dendrology:blocks/planks_<variant>" } } <variant>_straight_stairs.json: { "parent": "block/stairs", "textures": { "bottom": "dendrology:blocks/planks_<variant>", "top": "dendrology:blocks/planks_<variant>", "side": "dendrology:blocks/planks_<variant>" } } <variant>_inner_stairs.json: { "parent": "block/inner_stairs", "textures": { "bottom": "dendrology:blocks/planks_<variant>", "top": "dendrology:blocks/planks_<variant>", "side": "dendrology:blocks/planks_<variant>" } } <variant>_outer_stairs.json: { "parent": "block/outer_stairs", "textures": { "bottom": "dendrology:blocks/planks_<variant>", "top": "dendrology:blocks/planks_<variant>", "side": "dendrology:blocks/planks_<variant>" } } Item Models: slab_<variant>.json: { "parent": "dendrology:block/slab_bottom_<variant>", "display": { "thirdperson": { "rotation": [ 10, -45, 170 ], "translation": [ 0, 1.5, -2.75 ], "scale": [ 0.5, 0.5, 0.5 ] } } } stairs0.json: { "parent": "dendrology:block/acemus_straight_stairs", "display": { "thirdperson": { "rotation": [ 10, -45, 170 ], "translation": [ 0, 1.5, -2.75 ], "scale": [ 0.5, 0.5, 0.5 ] }, "gui": { "rotation": [ 0, 180, 0 ] } } } stairs1-stairs12: like stairs0, but with a different Variant in the block model name instead A Big Thanks already to anybody reading this whole thing You'll get another one if you can help me fixing the problem!

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.