mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-29 08:27:03 +01:00
Spoutput blockage
- Fixed basin auto-output not working on stopped belts - Basin auto-output can now share a space with funnels - Linear chassis no longer allow sticky sides facing a directly attached linear chassis of the same type
This commit is contained in:
parent
af9ed3e44b
commit
678ddfa764
4 changed files with 56 additions and 13 deletions
|
@ -59,7 +59,7 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements
|
||||||
if (isSlimeBall && state.get(affectedSide)) {
|
if (isSlimeBall && state.get(affectedSide)) {
|
||||||
for (Direction face : Iterate.directions) {
|
for (Direction face : Iterate.directions) {
|
||||||
BooleanProperty glueableSide = getGlueableSide(state, face);
|
BooleanProperty glueableSide = getGlueableSide(state, face);
|
||||||
if (glueableSide != null && !state.get(glueableSide)) {
|
if (glueableSide != null && !state.get(glueableSide) && glueAllowedOnSide(worldIn, pos, state, face)) {
|
||||||
if (worldIn.isRemote) {
|
if (worldIn.isRemote) {
|
||||||
Vec3d vec = hit.getHitVec();
|
Vec3d vec = hit.getHitVec();
|
||||||
worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0);
|
worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0);
|
||||||
|
@ -78,6 +78,8 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements
|
||||||
return ActionResultType.PASS;
|
return ActionResultType.PASS;
|
||||||
if (state.get(affectedSide) == isSlimeBall)
|
if (state.get(affectedSide) == isSlimeBall)
|
||||||
return ActionResultType.PASS;
|
return ActionResultType.PASS;
|
||||||
|
if (!glueAllowedOnSide(worldIn, pos, state, hit.getFace()))
|
||||||
|
return ActionResultType.PASS;
|
||||||
if (worldIn.isRemote) {
|
if (worldIn.isRemote) {
|
||||||
Vec3d vec = hit.getHitVec();
|
Vec3d vec = hit.getHitVec();
|
||||||
worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0);
|
worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0);
|
||||||
|
@ -94,6 +96,7 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements
|
||||||
if (rotation == Rotation.NONE)
|
if (rotation == Rotation.NONE)
|
||||||
return state;
|
return state;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
BlockState rotated = super.rotate(state, rotation);
|
BlockState rotated = super.rotate(state, rotation);
|
||||||
for (Direction face : Iterate.directions) {
|
for (Direction face : Iterate.directions) {
|
||||||
BooleanProperty glueableSide = getGlueableSide(rotated, face);
|
BooleanProperty glueableSide = getGlueableSide(rotated, face);
|
||||||
|
@ -141,4 +144,8 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements
|
||||||
|
|
||||||
public abstract BooleanProperty getGlueableSide(BlockState state, Direction face);
|
public abstract BooleanProperty getGlueableSide(BlockState state, Direction face);
|
||||||
|
|
||||||
|
protected boolean glueAllowedOnSide(IBlockReader world, BlockPos pos, BlockState state, Direction side) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,9 @@ import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
import net.minecraft.util.Direction.Axis;
|
||||||
import net.minecraft.util.Direction.AxisDirection;
|
import net.minecraft.util.Direction.AxisDirection;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.ILightReader;
|
import net.minecraft.world.ILightReader;
|
||||||
|
import net.minecraft.world.IWorld;
|
||||||
|
|
||||||
public class LinearChassisBlock extends AbstractChassisBlock {
|
public class LinearChassisBlock extends AbstractChassisBlock {
|
||||||
|
|
||||||
|
@ -51,6 +53,15 @@ public class LinearChassisBlock extends AbstractChassisBlock {
|
||||||
return super.getStateForPlacement(context);
|
return super.getStateForPlacement(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState updatePostPlacement(BlockState state, Direction side, BlockState other, IWorld p_196271_4_,
|
||||||
|
BlockPos p_196271_5_, BlockPos p_196271_6_) {
|
||||||
|
BooleanProperty property = getGlueableSide(state, side);
|
||||||
|
if (property == null || !sameKind(state, other) || state.get(AXIS) != other.get(AXIS))
|
||||||
|
return state;
|
||||||
|
return state.with(property, false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BooleanProperty getGlueableSide(BlockState state, Direction face) {
|
public BooleanProperty getGlueableSide(BlockState state, Direction face) {
|
||||||
if (face.getAxis() != state.get(AXIS))
|
if (face.getAxis() != state.get(AXIS))
|
||||||
|
@ -58,6 +69,12 @@ public class LinearChassisBlock extends AbstractChassisBlock {
|
||||||
return face.getAxisDirection() == AxisDirection.POSITIVE ? STICKY_TOP : STICKY_BOTTOM;
|
return face.getAxisDirection() == AxisDirection.POSITIVE ? STICKY_TOP : STICKY_BOTTOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean glueAllowedOnSide(IBlockReader world, BlockPos pos, BlockState state, Direction side) {
|
||||||
|
BlockState other = world.getBlockState(pos.offset(side));
|
||||||
|
return !sameKind(other, state) || state.get(AXIS) != other.get(AXIS);
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isChassis(BlockState state) {
|
public static boolean isChassis(BlockState state) {
|
||||||
return AllBlocks.LINEAR_CHASSIS.has(state) || AllBlocks.SECONDARY_LINEAR_CHASSIS.has(state);
|
return AllBlocks.LINEAR_CHASSIS.has(state) || AllBlocks.SECONDARY_LINEAR_CHASSIS.has(state);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.BlockFace;
|
import com.simibubi.create.foundation.utility.BlockFace;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.DirectionalBlock;
|
import net.minecraft.block.DirectionalBlock;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||||
|
@ -187,6 +188,14 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat
|
||||||
if (AllBlocks.STICKER.has(state))
|
if (AllBlocks.STICKER.has(state))
|
||||||
return state.get(DirectionalBlock.FACING) == direction;
|
return state.get(DirectionalBlock.FACING) == direction;
|
||||||
|
|
||||||
|
if (state.getBlock() == Blocks.SLIME_BLOCK)
|
||||||
|
return true;
|
||||||
|
if (state.getBlock() == Blocks.field_226907_mc_) // honey block
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (AllBlocks.CART_ASSEMBLER.has(state))
|
||||||
|
return Direction.UP == direction;
|
||||||
|
|
||||||
if (AllBlocks.GANTRY_CARRIAGE.has(state))
|
if (AllBlocks.GANTRY_CARRIAGE.has(state))
|
||||||
return state.get(DirectionalKineticBlock.FACING) == direction;
|
return state.get(DirectionalKineticBlock.FACING) == direction;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,9 @@ import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling;
|
import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
|
||||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
import com.simibubi.create.foundation.fluid.FluidHelper;
|
import com.simibubi.create.foundation.fluid.FluidHelper;
|
||||||
|
@ -170,11 +172,9 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
||||||
try {
|
return getTileEntityOptional(worldIn, pos).map(BasinTileEntity::getInputInventory)
|
||||||
return ItemHelper.calcRedstoneFromInventory(getTileEntity(worldIn, pos).inputInventory);
|
.map(ItemHelper::calcRedstoneFromInventory)
|
||||||
} catch (TileEntityException e) {
|
.orElse(0);
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -184,15 +184,25 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
|
||||||
|
|
||||||
public static boolean canOutputTo(IBlockReader world, BlockPos basinPos, Direction direction) {
|
public static boolean canOutputTo(IBlockReader world, BlockPos basinPos, Direction direction) {
|
||||||
BlockPos neighbour = basinPos.offset(direction);
|
BlockPos neighbour = basinPos.offset(direction);
|
||||||
if (!world.getBlockState(neighbour)
|
BlockPos output = neighbour.down();
|
||||||
.getCollisionShape(world, neighbour)
|
BlockState blockState = world.getBlockState(neighbour);
|
||||||
.isEmpty())
|
|
||||||
return false;
|
if (FunnelBlock.isFunnel(blockState)) {
|
||||||
|
if (FunnelBlock.getFunnelFacing(blockState) == direction)
|
||||||
|
return false;
|
||||||
|
} else if (!blockState.getCollisionShape(world, neighbour)
|
||||||
|
.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
TileEntity tileEntity = world.getTileEntity(output);
|
||||||
|
if (tileEntity instanceof BeltTileEntity) {
|
||||||
|
BeltTileEntity belt = (BeltTileEntity) tileEntity;
|
||||||
|
return belt.getSpeed() == 0 || belt.getMovementFacing() != direction.getOpposite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BlockPos offset = basinPos.down()
|
|
||||||
.offset(direction);
|
|
||||||
DirectBeltInputBehaviour directBeltInputBehaviour =
|
DirectBeltInputBehaviour directBeltInputBehaviour =
|
||||||
TileEntityBehaviour.get(world, offset, DirectBeltInputBehaviour.TYPE);
|
TileEntityBehaviour.get(world, output, DirectBeltInputBehaviour.TYPE);
|
||||||
if (directBeltInputBehaviour != null)
|
if (directBeltInputBehaviour != null)
|
||||||
return directBeltInputBehaviour.canInsertFromSide(direction);
|
return directBeltInputBehaviour.canInsertFromSide(direction);
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue