Как можно сократить такой код?

Дело в том, что в каждой строке отличается уравнение. Возможно я чего-то не понимаю, но как такое можно сократить?

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)

ну и заменой переменной можно вернуть назад.

→ Ссылка