From eb78642e47ba1e66c820cc39688bc44d01028bfb Mon Sep 17 00:00:00 2001 From: MehVahdJukaar Date: Sat, 2 May 2026 00:50:00 +0200 Subject: [PATCH] less hard checks and more instance checks and instance methods, allowing for easier polymorphism --- .../common/block/HangingTomatoBlock.java | 3 ++- .../common/block/TomatoBlock.java | 20 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/vectorwing/farmersdelight/common/block/HangingTomatoBlock.java b/src/main/java/vectorwing/farmersdelight/common/block/HangingTomatoBlock.java index deb4aeadc..c76095dc4 100644 --- a/src/main/java/vectorwing/farmersdelight/common/block/HangingTomatoBlock.java +++ b/src/main/java/vectorwing/farmersdelight/common/block/HangingTomatoBlock.java @@ -36,6 +36,7 @@ public boolean onDestroyedByPlayer(BlockState state, Level level, BlockPos pos, return placeRope(level, pos); } + @Override public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { super.onRemove(state, level, pos, newState, movedByPiston); if (Configuration.ENABLE_TOMATO_ROPE_PERMANENCE.get() && !movedByPiston && !state.is(newState.getBlock())) { @@ -43,7 +44,7 @@ public void onRemove(BlockState state, Level level, BlockPos pos, BlockState new } } - public static boolean placeRope(Level level, BlockPos pos) { + public boolean placeRope(Level level, BlockPos pos) { Block configuredRopeBlock = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(Configuration.DEFAULT_TOMATO_VINE_ROPE.get())); if (configuredRopeBlock == null) { configuredRopeBlock = ModBlocks.ROPE.get(); diff --git a/src/main/java/vectorwing/farmersdelight/common/block/TomatoBlock.java b/src/main/java/vectorwing/farmersdelight/common/block/TomatoBlock.java index fb9c78ca3..208f458f4 100644 --- a/src/main/java/vectorwing/farmersdelight/common/block/TomatoBlock.java +++ b/src/main/java/vectorwing/farmersdelight/common/block/TomatoBlock.java @@ -148,15 +148,24 @@ public boolean canClimbBlock(BlockState stateAbove) { return Configuration.ENABLE_TOMATO_VINE_CLIMBING_TAGGED_ROPES.get() ? stateAbove.is(ModTags.Blocks.ROPES) : stateAbove.is(ModBlocks.ROPE.get()); } + @Nullable + public BlockState getClimbingState(BlockState stateAbove) { + if (this.canClimbBlock(stateAbove)){ + return ModBlocks.TOMATO_CROP_ON_ROPE.get().defaultBlockState(); + } + return null; + } + public void climbRopeAbove(ServerLevel level, BlockPos pos) { BlockPos posAbove = pos.above(); BlockState stateAbove = level.getBlockState(posAbove); - if (canClimbBlock(stateAbove)) { + BlockState climbingState = getClimbingState(stateAbove); + if (climbingState != null) { int vineHeight; for (vineHeight = 1; level.getBlockState(pos.below(vineHeight)).is(this); ++vineHeight) { } if (vineHeight < 3) { - level.setBlockAndUpdate(posAbove, ModBlocks.TOMATO_CROP_ON_ROPE.get().defaultBlockState()); + level.setBlockAndUpdate(posAbove, climbingState); } } } @@ -179,7 +188,7 @@ public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState if (canClimbBlock(nextState)) { return true; } - if (nextState.is(ModBlocks.TOMATO_CROP_ON_ROPE.get())) { + if (nextState.getBlock() instanceof HangingTomatoBlock) { if (!isMaxAge(nextState)) { return true; } @@ -218,7 +227,7 @@ public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { BlockPos belowPos = pos.below(); BlockState belowState = level.getBlockState(belowPos); - if (belowState.is(ModBlocks.TOMATO_CROP.get()) || belowState.is(ModBlocks.TOMATO_CROP_ON_ROPE.get())) { + if (belowState.getBlock() instanceof TomatoBlock) { return hasGoodCropConditions(level, pos); } @@ -238,6 +247,7 @@ public BlockState updateShape(BlockState state, Direction facing, BlockState fac return state; } + @Deprecated(forRemoval = true) @Override public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) { boolean isRopelogged = state.getValue(TomatoBlock.ROPELOGGED); @@ -251,7 +261,7 @@ public void playerDestroy(Level level, Player player, BlockPos pos, BlockState s /** * Deprecated - This block will no longer use its ropelogged state. Refer to HangingTomatoBlock instead. */ - @Deprecated + @Deprecated(forRemoval = true) public static void destroyAndPlaceRope(Level level, BlockPos pos) { Block configuredRopeBlock = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(Configuration.DEFAULT_TOMATO_VINE_ROPE.get())); Block finalRopeBlock = configuredRopeBlock != null ? configuredRopeBlock : ModBlocks.ROPE.get();