51 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.phys.shapes;
 | |
| 
 | |
| import net.minecraft.core.Direction;
 | |
| import net.minecraft.util.Mth;
 | |
| 
 | |
| public final class SubShape extends DiscreteVoxelShape {
 | |
| 	private final DiscreteVoxelShape parent;
 | |
| 	private final int startX;
 | |
| 	private final int startY;
 | |
| 	private final int startZ;
 | |
| 	private final int endX;
 | |
| 	private final int endY;
 | |
| 	private final int endZ;
 | |
| 
 | |
| 	protected SubShape(DiscreteVoxelShape parent, int startX, int startY, int startZ, int endX, int endY, int endZ) {
 | |
| 		super(endX - startX, endY - startY, endZ - startZ);
 | |
| 		this.parent = parent;
 | |
| 		this.startX = startX;
 | |
| 		this.startY = startY;
 | |
| 		this.startZ = startZ;
 | |
| 		this.endX = endX;
 | |
| 		this.endY = endY;
 | |
| 		this.endZ = endZ;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public boolean isFull(int x, int y, int z) {
 | |
| 		return this.parent.isFull(this.startX + x, this.startY + y, this.startZ + z);
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public void fill(int x, int y, int z) {
 | |
| 		this.parent.fill(this.startX + x, this.startY + y, this.startZ + z);
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public int firstFull(Direction.Axis axis) {
 | |
| 		return this.clampToShape(axis, this.parent.firstFull(axis));
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public int lastFull(Direction.Axis axis) {
 | |
| 		return this.clampToShape(axis, this.parent.lastFull(axis));
 | |
| 	}
 | |
| 
 | |
| 	private int clampToShape(Direction.Axis axis, int value) {
 | |
| 		int i = axis.choose(this.startX, this.startY, this.startZ);
 | |
| 		int j = axis.choose(this.endX, this.endY, this.endZ);
 | |
| 		return Mth.clamp(value, i, j) - i;
 | |
| 	}
 | |
| }
 |