I have spent some time immersed in the minecraft code and I have managed to learn slightly how the redstone system works.
PART ONE
The fisrt part is to add and manage properties of your custom block.
To add a property we have to declarate de property itself, initialize and overload fillStateContainer.
//Step 1: declaration
public static final IntegerProperty POWER = BlockStateProperties.POWER_0_15;
//,
public static final IntegerProperty POWERED = BlockStateProperties.POWERED;
//...
//In your Custom Block Class Constructor (Initialize)
this.setDefaultState(this.getDefaultState().with(POWER, 0).with(POWERED, true));//How many properties as you want
//Last Step
@Override
public void fillStateContainer(StateContainer.Builder<Block,BlockState> builder) {
super.fillStateContainer(builder);
builder.add(POWERED,POWER);//How many properties as you want
}
We can change the property value overloading event method like "OnBlockAdded", "OnRemplaced", "neighborChanged"
To change the value of a property we need the World, BlockState and BlockPos
state = state.with(POWER, Integer.valueOf(15)) //State:BlockState
world.setBlockState(pos, state, 2);//world:World && pos:BlockPos
PART TWO
The second part allow other blocks to recognize that has power or if it is a power source.
To archive this we have to overload two or three methods of "net.minecraft.block.Block"
@Override
public boolean canProvidePower(BlockState state) ...
@Override
public int getStrongPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) ...
@Override
public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) ...
Example
Visit: https://github.com/Brbcode/BrbMod