minecraft-src/net/minecraft/world/phys/shapes/SubShape.java
2025-07-04 01:41:11 +03:00

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;
}
}