BlockShape.rotateFromNorth and rotateFromSouth
This commit is contained in:
parent
25630a7924
commit
643ca83851
@ -5,6 +5,7 @@ import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.phys.shapes.BooleanOp;
|
||||
import net.minecraft.world.phys.shapes.Shapes;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import ru.dbotthepony.mc.otm.core.math.BlockRotation;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
@ -47,7 +48,7 @@ public record BlockShape(SimpleCuboid ...shapes) {
|
||||
return new BlockShape(list);
|
||||
}
|
||||
|
||||
public BlockShape rotate(Direction dir) {
|
||||
public BlockShape rotateFromSouth(Direction dir) {
|
||||
if (dir == Direction.SOUTH)
|
||||
return this;
|
||||
|
||||
@ -69,7 +70,7 @@ public record BlockShape(SimpleCuboid ...shapes) {
|
||||
return this;
|
||||
}
|
||||
|
||||
public BlockShape rotateInv(Direction dir) {
|
||||
public BlockShape rotateFromNorth(Direction dir) {
|
||||
if (dir == Direction.SOUTH)
|
||||
return rotateAroundY(Math.PI);
|
||||
|
||||
@ -91,6 +92,24 @@ public record BlockShape(SimpleCuboid ...shapes) {
|
||||
return this;
|
||||
}
|
||||
|
||||
public BlockShape rotateFromNorth(BlockRotation dir) {
|
||||
var result = rotateFromNorth(dir.getFront());
|
||||
|
||||
if (dir.getTop() != Direction.DOWN && dir.getTop() != Direction.UP)
|
||||
result = result.rotateFromNorth(dir.getTop());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public BlockShape rotateFromSouth(BlockRotation dir) {
|
||||
var result = rotateFromSouth(dir.getFront());
|
||||
|
||||
if (dir.getTop() != Direction.DOWN && dir.getTop() != Direction.UP)
|
||||
result = result.rotateFromSouth(dir.getTop());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public VoxelShape computeShape() {
|
||||
VoxelShape final_shape = shapes[0].getShape();
|
||||
|
||||
|
@ -18,7 +18,7 @@ class EngineBlock : RotatableMatteryBlock(Properties.of(Material.METAL, DyeColor
|
||||
}
|
||||
|
||||
private val shapes = getShapeForEachState {
|
||||
BlockShapes.ENGINE.rotateInv(it[rotationProperty].front).computeShape()
|
||||
BlockShapes.ENGINE.rotateFromNorth(it[rotationProperty].front).computeShape()
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
|
@ -23,7 +23,7 @@ class HoloSignBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
}
|
||||
|
||||
private val shapes = getShapeForEachState {
|
||||
BlockShapes.HOLO_SIGN.rotateInv(it[rotationProperty].front).computeShape()
|
||||
BlockShapes.HOLO_SIGN.rotateFromNorth(it[rotationProperty]).computeShape()
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
|
@ -76,9 +76,9 @@ class MatterBottlerBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.MATTER_BOTTLER.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_BOTTLER.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_BOTTLER.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.MATTER_BOTTLER.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_BOTTLER.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_BOTTLER.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -55,9 +55,9 @@ class MatterCapacitorBankBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.MATTER_CAPACITOR_BANK.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_CAPACITOR_BANK.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_CAPACITOR_BANK.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.MATTER_CAPACITOR_BANK.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_CAPACITOR_BANK.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_CAPACITOR_BANK.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -61,9 +61,9 @@ class MatterDecomposerBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.MATTER_DECOMPOSER.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_DECOMPOSER.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_DECOMPOSER.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.MATTER_DECOMPOSER.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_DECOMPOSER.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_DECOMPOSER.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -60,9 +60,9 @@ class MatterRecyclerBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.MATTER_RECYCLER.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_RECYCLER.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_RECYCLER.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.MATTER_RECYCLER.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_RECYCLER.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_RECYCLER.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -60,9 +60,9 @@ class MatterReplicatorBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.MATTER_REPLICATOR.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_REPLICATOR.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_REPLICATOR.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.MATTER_REPLICATOR.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_REPLICATOR.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_REPLICATOR.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -60,9 +60,9 @@ class MatterScannerBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.MATTER_SCANNER.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_SCANNER.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_SCANNER.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.MATTER_SCANNER.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.MATTER_SCANNER.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.MATTER_SCANNER.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -87,9 +87,9 @@ class PatternStorageBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.PATTERN_STORAGE.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.PATTERN_STORAGE.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.PATTERN_STORAGE.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.PATTERN_STORAGE.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.PATTERN_STORAGE.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.PATTERN_STORAGE.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -65,9 +65,9 @@ class DriveRackBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.DRIVE_RACK.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.DRIVE_RACK.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.DRIVE_RACK.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.DRIVE_RACK.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.DRIVE_RACK.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.DRIVE_RACK.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -84,9 +84,9 @@ class DriveViewerBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.DRIVE_VIEWER.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.DRIVE_VIEWER.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.DRIVE_VIEWER.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.DRIVE_VIEWER.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.DRIVE_VIEWER.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.DRIVE_VIEWER.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -65,9 +65,9 @@ class ItemMonitorBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.ITEM_MONITOR.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.ITEM_MONITOR.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.ITEM_MONITOR.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.ITEM_MONITOR.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.ITEM_MONITOR.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.ITEM_MONITOR.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ class StorageBusBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, shapes[i], BooleanOp.OR)
|
||||
}
|
||||
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_BUS.rotateInv(it.facingTwo).computeShape(), BooleanOp.OR)
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_BUS.rotateFromNorth(it.facingTwo).computeShape(), BooleanOp.OR)
|
||||
|
||||
return@getShapeForEachState finalShape
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ class StorageImporterBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, shapes[i], BooleanOp.OR)
|
||||
}
|
||||
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_IMPORTER.rotateInv(it.facingTwo).computeShape(), BooleanOp.OR)
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_IMPORTER.rotateFromNorth(it.facingTwo).computeShape(), BooleanOp.OR)
|
||||
|
||||
return@getShapeForEachState finalShape
|
||||
}
|
||||
@ -203,7 +203,7 @@ class StorageExporterBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, shapes[i], BooleanOp.OR)
|
||||
}
|
||||
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_EXPORTER.rotateInv(it.facingTwo).computeShape(), BooleanOp.OR)
|
||||
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_EXPORTER.rotateFromNorth(it.facingTwo).computeShape(), BooleanOp.OR)
|
||||
|
||||
return@getShapeForEachState finalShape
|
||||
}
|
||||
|
@ -68,9 +68,9 @@ class StoragePowerSupplierBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.STORAGE_POWER_SUPPLIER.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.STORAGE_POWER_SUPPLIER.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.STORAGE_POWER_SUPPLIER.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.STORAGE_POWER_SUPPLIER.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.STORAGE_POWER_SUPPLIER.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.STORAGE_POWER_SUPPLIER.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -107,9 +107,9 @@ class BatteryBankBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.BATTERY_BANK.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.BATTERY_BANK.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.BATTERY_BANK.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.BATTERY_BANK.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.BATTERY_BANK.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.BATTERY_BANK.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -111,9 +111,9 @@ class ChemicalGeneratorBlock : RotatableMatteryBlock(), EntityBlock {
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.CHEMICAL_GENERATOR.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.CHEMICAL_GENERATOR.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.CHEMICAL_GENERATOR.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.CHEMICAL_GENERATOR.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.CHEMICAL_GENERATOR.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.CHEMICAL_GENERATOR.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ class EnergyCounterBlock : MatteryBlock(), EntityBlock {
|
||||
}
|
||||
|
||||
if (input === Direction.UP || input === Direction.DOWN) {
|
||||
shape = shape.rotateInv(iface)
|
||||
shape = shape.rotateFromNorth(iface)
|
||||
} else if (input === Direction.EAST || input === Direction.WEST) {
|
||||
when (iface) {
|
||||
Direction.DOWN -> shape = shape.rotateAroundX(Math.PI / 2)
|
||||
|
@ -52,12 +52,12 @@ class EnergyServoBlock : RotatableMatteryBlock(Properties.of(Material.METAL, Mat
|
||||
val def = BlockShapes.ENERGY_SERVO.computeShape()
|
||||
|
||||
SHAPES = arrayOf(
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.ENERGY_SERVO.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.ENERGY_SERVO.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.ENERGY_SERVO.rotate(Direction.EAST).computeShape()
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.ENERGY_SERVO.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.ENERGY_SERVO.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.ENERGY_SERVO.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -149,9 +149,9 @@ class BlockGravitationStabilizer : RotatableMatteryBlock(props), EntityBlock {
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotateAroundX(PI / 2).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotateAroundX(-PI / 2).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER.computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
|
||||
fun getBoundingBlock(level: Level, blockState: BlockState, blockPos: BlockPos): BlockState {
|
||||
@ -220,9 +220,9 @@ class BlockGravitationStabilizerLens : RotatableMatteryBlock(props) {
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateAroundX(PI / 2).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateAroundX(-PI / 2).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ class PhantomAttractorBlock : RotatableMatteryBlock(Properties.of(Material.METAL
|
||||
DoubleBlockHalf.LOWER -> BlockShapes.PHANTOM_ATTRACTOR_BOTTOM
|
||||
}
|
||||
|
||||
shape.rotate(it.facingOne).computeShape()
|
||||
shape.rotateFromSouth(it.facingOne).computeShape()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,9 +74,9 @@ class PlatePressBlock(properties: Properties = DEFAULT_PROPERTIES) : RotatableMa
|
||||
def,
|
||||
def,
|
||||
def,
|
||||
BlockShapes.PLATE_PRESS_IDLE.rotate(Direction.NORTH).computeShape(),
|
||||
BlockShapes.PLATE_PRESS_IDLE.rotate(Direction.WEST).computeShape(),
|
||||
BlockShapes.PLATE_PRESS_IDLE.rotate(Direction.EAST).computeShape()
|
||||
BlockShapes.PLATE_PRESS_IDLE.rotateFromSouth(Direction.NORTH).computeShape(),
|
||||
BlockShapes.PLATE_PRESS_IDLE.rotateFromSouth(Direction.WEST).computeShape(),
|
||||
BlockShapes.PLATE_PRESS_IDLE.rotateFromSouth(Direction.EAST).computeShape()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user