diff --git a/Changelog.txt b/Changelog.txt index 40d152a7d..1d3a5d572 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -3,6 +3,7 @@ Version 2.1.126 mcMMO now has a compatibility mode, any features that require specific versions of Minecraft for full functionality will be disabled if your server is not running a compatible version, mcMMO will still function in compatibility mode, but either the feature will be modified or disabled depending on the version of the server software New command /mmocompat - Shows information about whether or not mcMMO is fully functional or if some features are disabled due to the server software not being fully supported. Can be used by players or console. Fixed an exploit involving fishing rods + mcMMO is now less verbose about unsupported materials found in configs Notes: There are no features that rely on NMS in this version, it took a lot of work to write the NMS framework and I'm going to delay implementation for future versions. diff --git a/src/main/java/com/gmail/nossr50/config/skills/repair/RepairConfig.java b/src/main/java/com/gmail/nossr50/config/skills/repair/RepairConfig.java index ef381ebd6..ef55f073a 100644 --- a/src/main/java/com/gmail/nossr50/config/skills/repair/RepairConfig.java +++ b/src/main/java/com/gmail/nossr50/config/skills/repair/RepairConfig.java @@ -11,15 +11,15 @@ import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import java.util.*; public class RepairConfig extends ConfigLoader { private List repairables; + private HashSet notSupported; public RepairConfig(String fileName) { super(fileName); + notSupported = new HashSet<>(); loadKeys(); } @@ -48,7 +48,8 @@ public class RepairConfig extends ConfigLoader { Material itemMaterial = Material.matchMaterial(key); if (itemMaterial == null) { - mcMMO.p.getLogger().info("No support for repair item "+key+ " in this version of Minecraft, skipping."); + //mcMMO.p.getLogger().info("No support for repair item "+key+ " in this version of Minecraft, skipping."); + notSupported.add(key); //Collect names of unsupported items continue; } @@ -95,7 +96,7 @@ public class RepairConfig extends ConfigLoader { Material repairMaterial = (repairMaterialName == null ? repairMaterialType.getDefaultMaterial() : Material.matchMaterial(repairMaterialName)); if (repairMaterial == null) { - mcMMO.p.getLogger().info("Could not find a valid repair material for item named "+key+", skipping."); + notSupported.add(key); //Collect names of unsupported items continue; } @@ -152,6 +153,25 @@ public class RepairConfig extends ConfigLoader { repairables.add(repairable); } } + //Report unsupported + StringBuilder stringBuilder = new StringBuilder(); + + if(notSupported.size() > 0) { + stringBuilder.append("mcMMO found the following materials in the Repair config that are not supported by the version of Minecraft running on this server: "); + + for (Iterator iterator = notSupported.iterator(); iterator.hasNext(); ) { + String unsupportedMaterial = iterator.next(); + + if(!iterator.hasNext()) { + stringBuilder.append(unsupportedMaterial); + } else { + stringBuilder.append(unsupportedMaterial).append(", "); + } + } + + mcMMO.p.getLogger().info(stringBuilder.toString()); + mcMMO.p.getLogger().info("Items using materials that are not supported will simply be skipped."); + } } protected List getLoadedRepairables() { diff --git a/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java b/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java index 3200d8139..a5a6fbfd1 100644 --- a/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java +++ b/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java @@ -12,16 +12,15 @@ import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Set; +import java.util.*; public class SalvageConfig extends ConfigLoader { private List salvageables; + private HashSet notSupported; public SalvageConfig(String fileName) { super(fileName); + notSupported = new HashSet<>(); loadKeys(); } @@ -45,7 +44,7 @@ public class SalvageConfig extends ConfigLoader { Material itemMaterial = Material.matchMaterial(key); if (itemMaterial == null) { - mcMMO.p.getLogger().info("No support for salvage item "+key+ " in this version of Minecraft, skipping."); + notSupported.add(key); continue; } @@ -94,7 +93,7 @@ public class SalvageConfig extends ConfigLoader { Material salvageMaterial = (salvageMaterialName == null ? salvageMaterialType.getDefaultMaterial() : Material.matchMaterial(salvageMaterialName)); if (salvageMaterial == null) { - mcMMO.p.getLogger().info("Could not find a salvage material for item named " + key + ", skipping."); + notSupported.add(key); continue; } @@ -153,6 +152,25 @@ public class SalvageConfig extends ConfigLoader { salvageables.add(salvageable); } } + //Report unsupported + StringBuilder stringBuilder = new StringBuilder(); + + if(notSupported.size() > 0) { + stringBuilder.append("mcMMO found the following materials in the Salvage config that are not supported by the version of Minecraft running on this server: "); + + for (Iterator iterator = notSupported.iterator(); iterator.hasNext(); ) { + String unsupportedMaterial = iterator.next(); + + if(!iterator.hasNext()) { + stringBuilder.append(unsupportedMaterial); + } else { + stringBuilder.append(unsupportedMaterial).append(", "); + } + } + + mcMMO.p.getLogger().info(stringBuilder.toString()); + mcMMO.p.getLogger().info("Items using materials that are not supported will simply be skipped."); + } } protected List getLoadedSalvageables() { diff --git a/src/main/java/com/gmail/nossr50/util/compat/CompatibilityManager.java b/src/main/java/com/gmail/nossr50/util/compat/CompatibilityManager.java index 4437ef577..416ba2d78 100644 --- a/src/main/java/com/gmail/nossr50/util/compat/CompatibilityManager.java +++ b/src/main/java/com/gmail/nossr50/util/compat/CompatibilityManager.java @@ -71,6 +71,7 @@ public class CompatibilityManager { } + //TODO: move to text manager public void reportCompatibilityStatus(CommandSender commandSender) { if(isFullyCompatibleServerSoftware) { commandSender.sendMessage(LocaleLoader.getString("mcMMO.Template.Prefix", diff --git a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java index cb14dd20f..8f0feb6f0 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -274,7 +274,7 @@ public final class CombatUtils { } if (archeryManager.canDaze(target)) { - finalDamage+=archeryManager.daze((Player) target); + finalDamage+=archeryManager.daze((Player) target); //the cast is checked by the if condition } if (!arrow.hasMetadata(mcMMO.infiniteArrowKey) && archeryManager.canRetrieveArrows()) {