Posted July 24, 20205 yr Hello! I've had this figured out in the 1.14 versions but I can't manage to get it work on 1.15 + I want a block that gets LIT - on when it stops raining and LIT - off when it starts raining. The only part that works is when it starts raining it gets LIT - off, I can't get the part working when it stops raining to change the blockstate. public SpecialFire() { super(Properties.create(Material.IRON) .sound(SoundType.METAL) .hardnessAndResistance(1.25f, 3.5f) .harvestTool(ToolType.PICKAXE) .harvestLevel(1) .tickRandomly() ); } @Override public VoxelShape getShape(BlockState state, IBlockReader blockReader, BlockPos pos, ISelectionContext selectionContext) { switch (state.get(FACING)) { case WEST: return WEST; case EAST: return EAST; case SOUTH: return SOUTH; default: case NORTH: return NORTH; } } public VoxelShape getBoundingBox(BlockState state, BlockPos pos) { switch((state.get(FACING))) { default: case SOUTH: return SOUTH; case NORTH: return NORTH; case EAST: return EAST; case WEST: return WEST; } } public SpecialFire(Block.Properties properties) { super(properties); this.setDefaultState(this.stateContainer.getBaseState().with(LIT, Boolean.valueOf(false)).with(WATERLOGGED, Boolean.valueOf(false)).with(FACING, Direction.NORTH)); } public BlockState getStateForPlacement(BlockItemUseContext context) { return this.getDefaultState().with(LIT, Boolean.valueOf(false)).with(WATERLOGGED, Boolean.valueOf(false)).with(FACING, context.getPlacementHorizontalFacing().rotateY()); } protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) { builder.add(LIT, FACING, WATERLOGGED); } public boolean ticksRandomly(BlockState state) { return true; } // this is the part that is not working, but it works in 1.14 public void NonRain(BlockState state, World worldIn, BlockPos pos, Random random) { if (state.get(LIT) == false && (worldIn.rand.nextInt(2) == 1) && (!worldIn.isRainingAt(pos.up()))) { worldIn.setBlockState(pos, state.with(LIT, Boolean.valueOf(true))); } } //this part works fine public void Raining(World worldIn, BlockPos pos) { float f = worldIn.func_226691_t_(pos).func_225486_c(pos); if (!(f < 0.15F)) { BlockState blockstate = worldIn.getBlockState(pos); if (blockstate.get(LIT) == true) { worldIn.setBlockState(pos, blockstate.with(LIT, Boolean.valueOf(false))); } } } Edited July 24, 20205 yr by Kikoz
July 24, 20205 yr Author 25 minutes ago, diesieben07 said: Where do you call the "Raining" and "NonRain" methods? They certainly aren't overrides from the block class. I'm just calling it in this class by .tickrandomly() , the Raining method works, the NonRain doesn't.
July 24, 20205 yr Author 2 minutes ago, diesieben07 said: You said you did call it. Now suddenly you don't? I thought .tickrandomly() is calling it
July 24, 20205 yr Author 2 minutes ago, diesieben07 said: That is not how method calls work. Do you know basic Java? Well I tried, but it still didn't work public static void main(BlockState state, World worldIn, BlockPos pos, Random random) { NonRain(state, worldIn, pos, random); }
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.