To illustrate my question, I'll first describe what I'm trying to do.
The goal of my mod is to add new Doors to minecraft that are 1x3 rather than the Vanilla doors' 1x2.
These 3-block tall doors should accommodate all the behavior of the vanilla 1x2 doors, including mob interaction (villager opening/closing, pathfinding, zombie breaking).
The vanilla DoorBlock class seems to be very close to what these Tall Doors would need... except for one property and the functions that use it:
public static final EnumProperty<DoubleBlockHalf> HALF = BlockStateProperties.DOUBLE_BLOCK_HALF;
Since the modded doors should have 3 parts, if I were to use this cleanly, I would want something like EnumProperty<TripleBlockPart> PART = MyBlockStateProperties.TRIPLE_BLOCK_PART;
I can do this... if my class does not extend DoorBlock. In fact, I already have the doors functioning without extending DoorBlock. But doing it this way means Villagers, Zombies, and anything else that has behavior specific to DoorBlock won't use my TallDoorBlock properly, and could cause compatibility issues with other mods (e.g. a mod that couples door interaction in double doors, such as Quark)
So the point of this thread is to ask how to properly implement this:
public class TallDoorBlock extends DoorBlock {
//...
}
... while conforming to Forge-friendly design practices.
But this could pose a challenge, since according to this thread - "Overriding vanilla block without extending its class",
and
That seems reasonable enough for most purposes, but since DoorBlock has this property "DoubleBlockHalf" which controls which texture to load for that block, and various interaction state things, I am not sure how to implement a 3-block tall door that extends this without adding a new property e.g. (IsThirdBlock) to manage textrues and interaction for the 3rd block of the door.
Is there a common practice for implementing a new Block, modeling from a Vanilla Block class, but needing additional BlockStateProperties that the Vanilla class does not accommodate?