Commit Graph
9 Commits
Author SHA1 Message Date
Abdiel Kavash 3b3bc4b9ad Add preset IAlignmentLimits constants. (#43)
Many multiblocks can only be placed or rotated in certain orientations.
This has been always done ad-hoc, with individual checks for each
controller. This is inconsistent and sometimes it results in bugs where
certain orientations are not allowed for no discernible reason; for
example
https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/14206.

This PR introduces a short list of named constants to
`IAlignmentLimits`, which describe common multiplboc orientations. These
are currently:

* `UNLIMITED`: Any orientation is allowed. Most multiblocks.
* `UPRIGHT`: The multiblock must be in an upright position, with the top
side facing up. Example: Distillation Tower, Ore Washing Plant.
* `NOT_UPSIDE_DOWN`: The multiblock can be in any orientation, except
for the top side facing directly downwards. This is currently only the
Large Heat Exchanger and Integrated Ore Factory.
* `FACING_UP`: The front of the controller must face up. Example:
Flotation Cell, XL Turbines.

Currently, these constants describe the allowed facings of *all* GT5U
multiblocks.

A multiblock can then simply return one of these constants from
`getInitialAlignmentLimits()` to describe its valid orientations,
instead of implementing the logic itself. This concentrates the code to
one place, improves readability, and fixes any bugs connected with these
checks being done wrong.

Of course, even though the list is currently complete, if any future
multiblock wants to implement its own strange restrictions on
orientation, it can still implement its own check instead of returning
one of the constants.

A follow-up PR to GT5U implements this for all multiblocks which
restrict valid orientations:
https://github.com/GTNewHorizons/GT5-Unofficial/pull/4595
2025-08-01 10:54:59 +07:00
Raven Szewczyk 464e44de85 [ci skip] spotlessApply with the new settings 2023-01-30 12:52:27 +00:00
Glease df4c54ea8d address inspections 2022-09-06 16:34:46 +08:00
Glease 609e50428e Implement autoplace (#6) 2022-08-08 17:40:12 +08:00
Glease 8de7026a00 reformat project according to .editorconfig
Signed-off-by: Glease <4586901+Glease@users.noreply.github.com>
2022-07-08 17:14:18 +08:00
Glease 307c068db9 Add convenient methods for fast IAlignmentLimits creation 2021-05-29 19:10:15 +08:00
Glease 671da2dc1a Allow deny/allow by ExtendedFacing directly 2021-05-29 17:56:28 +08:00
Glease 59d311edb2 minor refactor to alignment subsystem
1. Moved package private utility methods (?!) into public API
2. Actual builder pattern
2021-05-27 18:26:05 +08:00
Glease dc12c4a1df Add most of code. Still missing some hint related stuff.
Signed-off-by: Glease <4586901+Glease@users.noreply.github.com>
2021-05-17 03:02:24 +08:00