From d9d4967100187759cafaf737a114a373b6e38863 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sat, 16 Mar 2024 14:07:14 -0400 Subject: [PATCH] Big Outlines API (#6187) * Big Outlines API * some more javadoc * Has -> Have --- .../decoration/slidingDoor/SlidingDoorBlock.java | 4 +++- .../create/content/trains/track/TrackBlock.java | 4 +++- .../create/foundation/block/BigOutlines.java | 10 +++++----- .../create/foundation/block/IHaveBigOutline.java | 15 +++++++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/block/IHaveBigOutline.java diff --git a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorBlock.java b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorBlock.java index ca1720fe1..3419ab987 100644 --- a/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorBlock.java +++ b/src/main/java/com/simibubi/create/content/decoration/slidingDoor/SlidingDoorBlock.java @@ -7,6 +7,8 @@ import com.simibubi.create.content.contraptions.ContraptionWorld; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.foundation.block.IBE; +import com.simibubi.create.foundation.block.IHaveBigOutline; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; @@ -36,7 +38,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.Event.Result; -public class SlidingDoorBlock extends DoorBlock implements IWrenchable, IBE { +public class SlidingDoorBlock extends DoorBlock implements IWrenchable, IBE, IHaveBigOutline { public static final BooleanProperty VISIBLE = BooleanProperty.create("visible"); private boolean folds; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java index 027b981e5..3f5a0d3c2 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java @@ -19,6 +19,8 @@ import java.util.Random; import java.util.Set; import java.util.function.Consumer; +import com.simibubi.create.foundation.block.IHaveBigOutline; + import org.jetbrains.annotations.Nullable; import com.google.common.base.Predicates; @@ -108,7 +110,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.IBlockRenderProperties; public class TrackBlock extends Block - implements IBE, IWrenchable, ITrackBlock, ISpecialBlockItemRequirement, ProperWaterloggedBlock { + implements IBE, IWrenchable, ITrackBlock, ISpecialBlockItemRequirement, ProperWaterloggedBlock, IHaveBigOutline { public static final EnumProperty SHAPE = EnumProperty.create("shape", TrackShape.class); public static final BooleanProperty HAS_BE = BooleanProperty.create("turn"); diff --git a/src/main/java/com/simibubi/create/foundation/block/BigOutlines.java b/src/main/java/com/simibubi/create/foundation/block/BigOutlines.java index 25f9319f5..ee73205b8 100644 --- a/src/main/java/com/simibubi/create/foundation/block/BigOutlines.java +++ b/src/main/java/com/simibubi/create/foundation/block/BigOutlines.java @@ -1,7 +1,5 @@ package com.simibubi.create.foundation.block; -import com.simibubi.create.content.decoration.slidingDoor.SlidingDoorBlock; -import com.simibubi.create.content.trains.track.TrackBlock; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.RaycastHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -17,6 +15,10 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.ForgeMod; + +/** + * For mods wanting to use this take a look at {@link IHaveBigOutline} + */ public class BigOutlines { static BlockHitResult result = null; @@ -47,9 +49,7 @@ public class BigOutlines { p.set(pos.getX() + x, pos.getY(), pos.getZ() + z); BlockState blockState = mc.level.getBlockState(p); - // Could be a dedicated interface for big blocks - if (!(blockState.getBlock() instanceof TrackBlock) - && !(blockState.getBlock() instanceof SlidingDoorBlock)) + if (!(blockState.getBlock() instanceof IHaveBigOutline)) continue; BlockHitResult hit = blockState.getInteractionShape(mc.level, p) diff --git a/src/main/java/com/simibubi/create/foundation/block/IHaveBigOutline.java b/src/main/java/com/simibubi/create/foundation/block/IHaveBigOutline.java new file mode 100644 index 000000000..60de01e5e --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/IHaveBigOutline.java @@ -0,0 +1,15 @@ +package com.simibubi.create.foundation.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour; +import com.simibubi.create.content.trains.track.TrackBlock; +import com.simibubi.create.content.decoration.slidingDoor.SlidingDoorBlock; + +/** + * Implementing this interface will allow you to have bigger outlines when overriding {@link BlockBehaviour#getInteractionShape(BlockState, BlockGetter, BlockPos)} + *

+ * For examples look at {@link TrackBlock} and {@link SlidingDoorBlock} + */ +public interface IHaveBigOutline { }