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) {