Jeśli chodzi o WorldGuarda, to w skripcie ciężko, dużo się nakombinujesz. Jak zdecydujesz się na plugin, to masz API i w nim np. takie coś
BlockVector3 min = BlockVector3.at(-10, 5, -4);
BlockVector3 max = BlockVector3.at(5, -8, 10);
ProtectedRegion region = new ProtectedCuboidRegion("spawn", min, max);
https://worldguard.enginehub.org/en/latest/developer/regions/protected-region/
i tu już dużo prościej sobie te regiony na żywo modyfikujesz. Nie zmienia to faktu, że do realizacji Twojego pomysłu potrzeba trochę matematyki :).
Co do Twojego, ogólnego pytania, to odpowiedź jest prosta. Ustalasz początkowe kordy stefy i potem je zmiejszasz wg algorytmu.
Podsyłam stary wątek z tego forum, on dotyczy sharpsk,wildskript. Ale może znajdziesz jakiś współczesny odpowiednik.