diff --git a/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java b/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java index 32a6971e7..ebb56c1a5 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java @@ -3011,9 +3011,9 @@ public void setGeneratorAmount(Key key, int amount, World.Environment environmen Preconditions.checkNotNull(environment, "environment parameter cannot be null."); KeyMap> cobbleGeneratorValues = getCobbleGeneratorValues(environment, true); - int finalAmount = Math.max(1, amount); - PluginDebugger.debug("Action: Set Generator, Island: " + owner.getName() + ", Block: " + key + ", Amount: " + finalAmount + ", World: " + environment); - cobbleGeneratorValues.put(key, Value.fixed(finalAmount)); + amount = Math.max(0, amount); + PluginDebugger.debug("Action: Set Generator, Island: " + owner.getName() + ", Block: " + key + ", Amount: " + amount + ", World: " + environment); + cobbleGeneratorValues.put(key, Value.fixed(amount)); IslandsDatabaseBridge.saveGeneratorRate(this, environment, key, amount); } @@ -3797,43 +3797,47 @@ private void syncUpgrade(SUpgradeLevel upgradeLevel, boolean overrideCustom) { return bankLimit; }); - for (Map.Entry> entry : upgradeLevel.getBlockLimitsUpgradeValue().entrySet()) { Value currentValue = blockLimits.getRaw(entry.getKey(), null); - if (currentValue == null || entry.getValue().get() > currentValue.get()) + if (currentValue == null || ((overrideCustom || currentValue instanceof SyncedValue) && currentValue.get() < entry.getValue().get())) blockLimits.put(entry.getKey(), entry.getValue()); } for (Map.Entry> entry : upgradeLevel.getEntityLimitsUpgradeValue().entrySet()) { Value currentValue = entityLimits.getRaw(entry.getKey(), null); - if (currentValue == null || entry.getValue().get() > currentValue.get()) + if (currentValue == null || ((overrideCustom || currentValue instanceof SyncedValue) && currentValue.get() < entry.getValue().get())) entityLimits.put(entry.getKey(), entry.getValue()); } - Map>[] generatorRates = upgradeLevel.getGeneratorUpgradeValue(); - for (int i = 0; i < cobbleGeneratorValues.length && i < generatorRates.length; i++) { - Map> levelGenerator = generatorRates[i]; - if (levelGenerator != null) { - KeyMap> cobbleGeneratorValues = getCobbleGeneratorValues(i, true); + Map>[] upgradeGeneratorRates = upgradeLevel.getGeneratorUpgradeValue(); + for (int i = 0; i < cobbleGeneratorValues.length && i < upgradeGeneratorRates.length; i++) { + Map> upgradeLevelGeneratorRates = upgradeGeneratorRates[i]; + if (upgradeLevelGeneratorRates != null) { + KeyMap> cobbleGeneratorValues = getCobbleGeneratorValues(i, false); - if (!levelGenerator.isEmpty()) { - new HashSet<>(cobbleGeneratorValues.entrySet()).stream().filter(entry -> entry.getValue() instanceof SyncedValue) - .forEach(entry -> cobbleGeneratorValues.remove(entry.getKey())); - } + if (cobbleGeneratorValues != null && !upgradeLevelGeneratorRates.isEmpty()) + cobbleGeneratorValues.entrySet().removeIf(entry -> entry.getValue() instanceof SyncedValue); - cobbleGeneratorValues.putAll(levelGenerator); + for (Map.Entry> entry : upgradeLevelGeneratorRates.entrySet()) { + Value currentValue = cobbleGeneratorValues == null ? null : cobbleGeneratorValues.get(entry.getKey()); + if (currentValue == null || ((overrideCustom || currentValue instanceof SyncedValue) && currentValue.get() < entry.getValue().get())) { + if (cobbleGeneratorValues == null) + cobbleGeneratorValues = getCobbleGeneratorValues(i, true); + cobbleGeneratorValues.put(entry.getKey(), entry.getValue()); + } + } } } for (Map.Entry> entry : upgradeLevel.getPotionEffectsUpgradeValue().entrySet()) { Value currentValue = islandEffects.get(entry.getKey()); - if (currentValue == null || entry.getValue().get() > currentValue.get()) + if (currentValue == null || ((overrideCustom || currentValue instanceof SyncedValue) && currentValue.get() < entry.getValue().get())) islandEffects.put(entry.getKey(), entry.getValue()); } for (Map.Entry> entry : upgradeLevel.getRoleLimitsUpgradeValue().entrySet()) { Value currentValue = roleLimits.get(entry.getKey()); - if (currentValue == null || entry.getValue().get() > currentValue.get()) + if (currentValue == null || ((overrideCustom || currentValue instanceof SyncedValue) && currentValue.get() < entry.getValue().get())) roleLimits.put(entry.getKey(), entry.getValue()); } }