From a3729734cb43cd0b21beeb5334f3c976031c4954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Mon, 7 Apr 2025 14:46:14 +0200 Subject: [PATCH] fixed error when opening settings and not all setting categories were used --- .../appliances/metaGameplay/settings/Settings.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java index 002744a..bb31285 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java @@ -107,6 +107,9 @@ public class Settings extends Appliance { .filter(setting -> ((CategorizedSetting) setting).category().equals(category)) .toList(); + //skip empty category rows + if(categorizedSettings.isEmpty()) return; + for(int i = 0; i < categorizedSettings.size(); i++) { int slot = row.get() * 9 + i % 9; inventory.setItem(slot, categorizedSettings.get(i).buildItem()); @@ -139,17 +142,23 @@ public class Settings extends Appliance { int countOfUncategorized = (int) settings.stream() .filter(setting -> !(setting instanceof CategorizedSetting)) .count(); + int rowsOfUncategorized = (int) Math.ceil((double) countOfUncategorized / 9); - return Arrays.stream(SettingCategory.values()) + int rowsOfCategorized = Arrays.stream(SettingCategory.values()) .map(settingCategory -> settings.stream() .filter(setting -> setting instanceof CategorizedSetting) .map(setting -> (CategorizedSetting) setting) .filter(categorizedSetting -> categorizedSetting.category().equals(settingCategory)) .count()) - .map(itemCount -> itemCount + countOfUncategorized) .map(itemCount -> (int) Math.ceil((double) itemCount / 9)) .reduce(Integer::sum) .orElse(1) * 9; + + int rows = rowsOfUncategorized + rowsOfCategorized; + if(rows % 9 != 0) throw new IllegalStateException( + String.format("Failed to calculate settings inventory size. %d is not an multiple of 9", rows) + ); + return rows; } public void onSettingsClose(Player player) {