Big Outlines API (#6187)

* Big Outlines API

* some more javadoc

* Has -> Have
This commit is contained in:
IThundxr 2024-03-16 14:07:14 -04:00 committed by GitHub
parent 298d1c1814
commit d9d4967100
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 26 additions and 7 deletions

View file

@ -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<SlidingDoorBlockEntity> {
public class SlidingDoorBlock extends DoorBlock implements IWrenchable, IBE<SlidingDoorBlockEntity>, IHaveBigOutline {
public static final BooleanProperty VISIBLE = BooleanProperty.create("visible");
private boolean folds;

View file

@ -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<TrackBlockEntity>, IWrenchable, ITrackBlock, ISpecialBlockItemRequirement, ProperWaterloggedBlock {
implements IBE<TrackBlockEntity>, IWrenchable, ITrackBlock, ISpecialBlockItemRequirement, ProperWaterloggedBlock, IHaveBigOutline {
public static final EnumProperty<TrackShape> SHAPE = EnumProperty.create("shape", TrackShape.class);
public static final BooleanProperty HAS_BE = BooleanProperty.create("turn");

View file

@ -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)

View file

@ -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)}
* <p>
* For examples look at {@link TrackBlock} and {@link SlidingDoorBlock}
*/
public interface IHaveBigOutline { }