Как можно сократить такой код?
Дело в том, что в каждой строке отличается уравнение. Возможно я чего-то не понимаю, но как такое можно сократить?
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMin - 0.5, zMin), new Location(getWorld(), xMax, yMin - 0.5, zMin)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMax + 0.5, zMin), new Location(getWorld(), xMax, yMax + 0.5, zMin)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMin - 0.5, zMax + 1), new Location(getWorld(), xMax, yMin - 0.5, zMax + 1)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMax + 0.5, zMax + 1), new Location(getWorld(), xMax, yMax + 0.5, zMax + 1)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMin - 0.5, zMin), new Location(getWorld(), xMin, yMax - 0.5, zMin)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMax + 1, yMin - 0.5, zMin), new Location(getWorld(), xMax + 1, yMax - 0.5, zMin)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMin - 0.5, zMax + 1), new Location(getWorld(), xMin, yMax - 0.5, zMax + 1)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMax + 1, yMin - 0.5, zMax + 1), new Location(getWorld(), xMax + 1, yMax - 0.5, zMax + 1)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMin - 0.5, zMin), new Location(getWorld(), xMin, yMin - 0.5, zMax)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMax + 1, yMin - 0.5, zMin), new Location(getWorld(), xMax + 1, yMin - 0.5, zMax)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMin, yMax + 0.5, zMin), new Location(getWorld(), xMin, yMax + 0.5, zMax)).build();
new CrystalBeam(getPlugin(), player, new Location(getWorld(), xMax + 1, yMax + 0.5, zMin), new Location(getWorld(), xMax + 1, yMax + 0.5, zMax)).build();
Ответы (2 шт):
Автор решения: insolor
→ Ссылка
Создаете массив с параметрами для Location, идете по нему циклом, по этим параметрам создаете Location и CrystalBeam:
double[][] params = {
{xMin, yMin - 0.5, zMin, xMax, yMin - 0.5, zMin},
{xMin, yMax + 0.5, zMin, xMax, yMax + 0.5, zMin},
{xMin, yMin - 0.5, zMax + 1, xMax, yMin - 0.5, zMax + 1},
{xMin, yMax + 0.5, zMax + 1, xMax, yMax + 0.5, zMax + 1},
// и т.д.
};
for (double[] row : params) {
new CrystalBeam(
getPlugin(), player,
new Location(getWorld(), row[0], row[1], row[2]),
new Location(getWorld(), row[3], row[4], row[5])
).build();
}
Автор решения: Aziz Umarov
→ Ссылка
Тут у Вас перебор вершин граней куба 1х1х1 по координатам вершин.
по оси у можно сделать замену переменной как
yMin = yMin - 0.5, yMax = yMax - 0.5;
тогда у вас куб с вершинами
(0,0,0), (0,0,1)
(0,1,0), (0,1,1)
(1,0,0), (1,0,1)
(1,1,0), (1,1,1)
складывается с кубом там где 0 - это минимум (xMin или yMin или zMin) a 1 - максимум соответственно (xMax или yMax или zMax)
будет что-то по типу
(0 + xMin, 0 + yMin, 0+zMin), (0+xMin,0+yMin,1+zMax)
ну и заменой переменной можно вернуть назад.