Code/net/minecraft/world/item/ScaffoldingBlockItem.java

73 lines
2.8 KiB
Java
Raw Permalink Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.item;
import javax.annotation.Nullable;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.ScaffoldingBlock;
import net.minecraft.world.level.block.state.BlockState;
public class ScaffoldingBlockItem extends BlockItem {
public ScaffoldingBlockItem(Block p_43060_, Item.Properties p_43061_) {
super(p_43060_, p_43061_);
}
@Nullable
@Override
public BlockPlaceContext updatePlacementContext(BlockPlaceContext p_43063_) {
BlockPos blockpos = p_43063_.getClickedPos();
Level level = p_43063_.getLevel();
BlockState blockstate = level.getBlockState(blockpos);
Block block = this.getBlock();
if (!blockstate.is(block)) {
return ScaffoldingBlock.getDistance(level, blockpos) == 7 ? null : p_43063_;
} else {
Direction direction;
if (p_43063_.isSecondaryUseActive()) {
direction = p_43063_.isInside() ? p_43063_.getClickedFace().getOpposite() : p_43063_.getClickedFace();
} else {
direction = p_43063_.getClickedFace() == Direction.UP ? p_43063_.getHorizontalDirection() : Direction.UP;
}
int i = 0;
BlockPos.MutableBlockPos blockpos$mutableblockpos = blockpos.mutable().move(direction);
while (i < 7) {
if (!level.isClientSide && !level.isInWorldBounds(blockpos$mutableblockpos)) {
Player player = p_43063_.getPlayer();
int j = level.getMaxY();
if (player instanceof ServerPlayer && blockpos$mutableblockpos.getY() > j) {
((ServerPlayer)player).sendSystemMessage(Component.translatable("build.tooHigh", j).withStyle(ChatFormatting.RED), true);
}
break;
}
blockstate = level.getBlockState(blockpos$mutableblockpos);
if (!blockstate.is(this.getBlock())) {
if (blockstate.canBeReplaced(p_43063_)) {
return BlockPlaceContext.at(p_43063_, blockpos$mutableblockpos, direction);
}
break;
}
blockpos$mutableblockpos.move(direction);
if (direction.getAxis().isHorizontal()) {
i++;
}
}
return null;
}
}
@Override
protected boolean mustSurvive() {
return false;
}
}