Commit cf4e662ff064db44d1acd9f50cf1d1b3b63f63cb
1 parent
62a9bc25
LiteLoader 1.6.4_02 - experimental - make enable/disable mods public, minor refactoring
Showing
3 changed files
with
188 additions
and
94 deletions
java/com/mumfrey/liteloader/core/LiteLoader.java
@@ -133,7 +133,7 @@ public final class LiteLoader | @@ -133,7 +133,7 @@ public final class LiteLoader | ||
133 | private String loadedModsList = "none"; | 133 | private String loadedModsList = "none"; |
134 | 134 | ||
135 | /** | 135 | /** |
136 | - * Global list of mods which we can loaded | 136 | + * Global list of mods which we can load |
137 | */ | 137 | */ |
138 | private final LinkedList<LiteMod> mods = new LinkedList<LiteMod>(); | 138 | private final LinkedList<LiteMod> mods = new LinkedList<LiteMod>(); |
139 | 139 | ||
@@ -354,7 +354,7 @@ public final class LiteLoader | @@ -354,7 +354,7 @@ public final class LiteLoader | ||
354 | this.events.initHooks(); | 354 | this.events.initHooks(); |
355 | this.startupComplete = true; | 355 | this.startupComplete = true; |
356 | 356 | ||
357 | - this.enabledModsList.save(); | 357 | + this.enabledModsList.saveTo(this.enabledModsFile); |
358 | this.bootstrap.writeProperties(); | 358 | this.bootstrap.writeProperties(); |
359 | } | 359 | } |
360 | 360 | ||
@@ -572,23 +572,6 @@ public final class LiteLoader | @@ -572,23 +572,6 @@ public final class LiteLoader | ||
572 | } | 572 | } |
573 | 573 | ||
574 | /** | 574 | /** |
575 | - * Used by the version upgrade code, gets a version of the mod name suitable | ||
576 | - * for inclusion in the properties file | ||
577 | - * | ||
578 | - * @param modName | ||
579 | - * @return | ||
580 | - */ | ||
581 | - private String getModNameForConfig(Class<? extends LiteMod> modClass, String modName) | ||
582 | - { | ||
583 | - if (modName == null || modName.isEmpty()) | ||
584 | - { | ||
585 | - modName = modClass.getSimpleName().toLowerCase(); | ||
586 | - } | ||
587 | - | ||
588 | - return String.format("version.%s", modName.toLowerCase().replaceAll("[^a-z0-9_\\-\\.]", "")); | ||
589 | - } | ||
590 | - | ||
591 | - /** | ||
592 | * Get a reference to a loaded mod, if the mod exists | 575 | * Get a reference to a loaded mod, if the mod exists |
593 | * | 576 | * |
594 | * @param modName Mod's name, meta name or class name | 577 | * @param modName Mod's name, meta name or class name |
@@ -713,8 +696,83 @@ public final class LiteLoader | @@ -713,8 +696,83 @@ public final class LiteLoader | ||
713 | { | 696 | { |
714 | return this.enumerator.getModMetaName(modClass); | 697 | return this.enumerator.getModMetaName(modClass); |
715 | } | 698 | } |
699 | + | ||
700 | + /** | ||
701 | + * Get the mod "name" metadata key, this is used for versioning, exclusivity, and enablement checks | ||
702 | + * | ||
703 | + * @param modClass | ||
704 | + * @return | ||
705 | + */ | ||
706 | + public Class<? extends LiteMod> getModFromMetaName(String modName) | ||
707 | + { | ||
708 | + if (modName == null) return null; | ||
709 | + | ||
710 | + for (LiteMod mod : this.mods) | ||
711 | + { | ||
712 | + if (modName.equalsIgnoreCase(this.enumerator.getModMetaName(mod.getClass()))) | ||
713 | + { | ||
714 | + return mod.getClass(); | ||
715 | + } | ||
716 | + } | ||
717 | + | ||
718 | + return null; | ||
719 | + } | ||
720 | + | ||
721 | + /** | ||
722 | + * @param modMetaName Mod meta name to enable | ||
723 | + */ | ||
724 | + public void enableMod(String modMetaName) | ||
725 | + { | ||
726 | + this.setModEnabled(modMetaName, true); | ||
727 | + } | ||
728 | + | ||
729 | + /** | ||
730 | + * @param modMetaName Mod meta name to disable | ||
731 | + */ | ||
732 | + public void disableMod(String modMetaName) | ||
733 | + { | ||
734 | + this.setModEnabled(modMetaName, false); | ||
735 | + } | ||
736 | + | ||
737 | + /** | ||
738 | + * @param modMetaName Mod meta name to enable/disable | ||
739 | + * @param enabled | ||
740 | + */ | ||
741 | + public void setModEnabled(String modMetaName, boolean enabled) | ||
742 | + { | ||
743 | + this.enabledModsList.setEnabled(this.bootstrap.getProfile(), modMetaName, enabled); | ||
744 | + this.enabledModsList.saveTo(this.enabledModsFile); | ||
745 | + } | ||
716 | 746 | ||
717 | /** | 747 | /** |
748 | + * @param modName | ||
749 | + * @return | ||
750 | + */ | ||
751 | + public boolean isModEnabled(String modName) | ||
752 | + { | ||
753 | + return this.enabledModsList.isEnabled(LiteLoader.getProfile(), modName); | ||
754 | + } | ||
755 | + | ||
756 | + /** | ||
757 | + * @param modName | ||
758 | + * @return | ||
759 | + */ | ||
760 | + public boolean isModActive(String modName) | ||
761 | + { | ||
762 | + if (modName == null) return false; | ||
763 | + | ||
764 | + for (LiteMod mod : this.loadedMods) | ||
765 | + { | ||
766 | + if (modName.equalsIgnoreCase(this.enumerator.getModMetaName(mod.getClass()))) | ||
767 | + { | ||
768 | + return true; | ||
769 | + } | ||
770 | + } | ||
771 | + | ||
772 | + return false; | ||
773 | + } | ||
774 | + | ||
775 | + /** | ||
718 | * Create mod instances from the enumerated classes | 776 | * Create mod instances from the enumerated classes |
719 | * | 777 | * |
720 | * @param modsToLoad List of mods to load | 778 | * @param modsToLoad List of mods to load |
@@ -740,32 +798,7 @@ public final class LiteLoader | @@ -740,32 +798,7 @@ public final class LiteLoader | ||
740 | String metaName = this.getModMetaName(mod); | 798 | String metaName = this.getModMetaName(mod); |
741 | if (metaName == null || this.enabledModsList.isEnabled(this.bootstrap.getProfile(), metaName)) | 799 | if (metaName == null || this.enabledModsList.isEnabled(this.bootstrap.getProfile(), metaName)) |
742 | { | 800 | { |
743 | - LiteLoader.logInfo("Loading mod from %s", mod.getName()); | ||
744 | - | ||
745 | - LiteMod newMod = mod.newInstance(); | ||
746 | - | ||
747 | - this.mods.add(newMod); | ||
748 | - String modName = newMod.getName(); | ||
749 | - if (modName == null && metaName != null) modName = metaName; | ||
750 | - LiteLoader.logInfo("Successfully added mod %s version %s", modName, newMod.getVersion()); | ||
751 | - | ||
752 | - // Get the mod file and register it as a resource pack if it exists | ||
753 | - ModFile modFile = this.enumerator.getModFile(mod); | ||
754 | - if (modFile != null) | ||
755 | - { | ||
756 | - this.disabledMods.remove(modFile); | ||
757 | - | ||
758 | - LiteLoader.logInfo("Adding \"%s\" to active resource pack set", modFile.getAbsolutePath()); | ||
759 | - if (modName != null) | ||
760 | - { | ||
761 | - modFile.initResourcePack(modName); | ||
762 | - | ||
763 | - if (modFile.hasResourcePack() && this.registerModResourcePack((ResourcePack)modFile.getResourcePack())) | ||
764 | - { | ||
765 | - LiteLoader.logInfo("Successfully added \"%s\" to active resource pack set", modFile.getAbsolutePath()); | ||
766 | - } | ||
767 | - } | ||
768 | - } | 801 | + this.loadMod(metaName, mod); |
769 | } | 802 | } |
770 | else | 803 | else |
771 | { | 804 | { |
@@ -782,6 +815,42 @@ public final class LiteLoader | @@ -782,6 +815,42 @@ public final class LiteLoader | ||
782 | } | 815 | } |
783 | 816 | ||
784 | /** | 817 | /** |
818 | + * @param metaName | ||
819 | + * @param mod | ||
820 | + * @throws InstantiationException | ||
821 | + * @throws IllegalAccessException | ||
822 | + */ | ||
823 | + protected void loadMod(String metaName, Class<? extends LiteMod> mod) throws InstantiationException, IllegalAccessException | ||
824 | + { | ||
825 | + LiteLoader.logInfo("Loading mod from %s", mod.getName()); | ||
826 | + | ||
827 | + LiteMod newMod = mod.newInstance(); | ||
828 | + | ||
829 | + this.mods.add(newMod); | ||
830 | + String modName = newMod.getName(); | ||
831 | + if (modName == null && metaName != null) modName = metaName; | ||
832 | + LiteLoader.logInfo("Successfully added mod %s version %s", modName, newMod.getVersion()); | ||
833 | + | ||
834 | + // Get the mod file and register it as a resource pack if it exists | ||
835 | + ModFile modFile = this.enumerator.getModFile(mod); | ||
836 | + if (modFile != null) | ||
837 | + { | ||
838 | + this.disabledMods.remove(modFile); | ||
839 | + | ||
840 | + LiteLoader.logInfo("Adding \"%s\" to active resource pack set", modFile.getAbsolutePath()); | ||
841 | + if (modName != null) | ||
842 | + { | ||
843 | + modFile.initResourcePack(modName); | ||
844 | + | ||
845 | + if (modFile.hasResourcePack() && this.registerModResourcePack((ResourcePack)modFile.getResourcePack())) | ||
846 | + { | ||
847 | + LiteLoader.logInfo("Successfully added \"%s\" to active resource pack set", modFile.getAbsolutePath()); | ||
848 | + } | ||
849 | + } | ||
850 | + } | ||
851 | + } | ||
852 | + | ||
853 | + /** | ||
785 | * Initialise the mods which were loaded | 854 | * Initialise the mods which were loaded |
786 | */ | 855 | */ |
787 | private void initMods() | 856 | private void initMods() |
@@ -792,54 +861,87 @@ public final class LiteLoader | @@ -792,54 +861,87 @@ public final class LiteLoader | ||
792 | for (Iterator<LiteMod> iter = this.mods.iterator(); iter.hasNext();) | 861 | for (Iterator<LiteMod> iter = this.mods.iterator(); iter.hasNext();) |
793 | { | 862 | { |
794 | LiteMod mod = iter.next(); | 863 | LiteMod mod = iter.next(); |
795 | - String modName = mod.getName(); | ||
796 | 864 | ||
797 | try | 865 | try |
798 | { | 866 | { |
799 | - LiteLoader.logInfo("Initialising mod %s version %s", modName, mod.getVersion()); | ||
800 | - | ||
801 | - try | ||
802 | - { | ||
803 | - String modKey = this.getModNameForConfig(mod.getClass(), modName); | ||
804 | - LiteLoaderVersion lastModVersion = LiteLoaderVersion.getVersionFromRevision(this.bootstrap.getLastKnownModRevision(modKey)); | ||
805 | - | ||
806 | - if (LiteLoaderBootstrap.VERSION.getLoaderRevision() > lastModVersion.getLoaderRevision()) | ||
807 | - { | ||
808 | - LiteLoader.logInfo("Performing config upgrade for mod %s. Upgrading %s to %s...", modName, lastModVersion, LiteLoaderBootstrap.VERSION); | ||
809 | - mod.upgradeSettings(LiteLoaderBootstrap.VERSION.getMinecraftVersion(), this.versionConfigFolder, this.inflectVersionedConfigPath(lastModVersion)); | ||
810 | - | ||
811 | - this.bootstrap.storeLastKnownModRevision(modKey); | ||
812 | - LiteLoader.logInfo("Config upgrade succeeded for mod %s", modName); | ||
813 | - } | ||
814 | - } | ||
815 | - catch (Throwable th) | ||
816 | - { | ||
817 | - LiteLoader.logWarning("Error performing settings upgrade for %s. Settings may not be properly migrated", modName); | ||
818 | - } | ||
819 | - | ||
820 | - // pre-1.6.4_01 this was being called with the wrong path, I hope this doesn't break anything | ||
821 | - mod.init(this.commonConfigFolder); | ||
822 | - | ||
823 | - this.events.addListener(mod); | ||
824 | - | ||
825 | - if (mod instanceof Permissible) | ||
826 | - { | ||
827 | - this.permissionsManager.registerPermissible((Permissible)mod); | ||
828 | - } | ||
829 | - | ||
830 | - this.loadedMods.add(mod); | ||
831 | - this.loadedModsList += String.format("\n - %s version %s", modName, mod.getVersion()); | 867 | + this.initMod(mod); |
832 | loadedModsCount++; | 868 | loadedModsCount++; |
833 | } | 869 | } |
834 | catch (Throwable th) | 870 | catch (Throwable th) |
835 | { | 871 | { |
836 | - LiteLoader.getLogger().log(Level.WARNING, "Error initialising mod '" + modName, th); | 872 | + LiteLoader.getLogger().log(Level.WARNING, "Error initialising mod '" + mod.getName() + "'", th); |
837 | iter.remove(); | 873 | iter.remove(); |
838 | } | 874 | } |
839 | } | 875 | } |
840 | 876 | ||
841 | this.loadedModsList = String.format("%s loaded mod(s)%s", loadedModsCount, this.loadedModsList); | 877 | this.loadedModsList = String.format("%s loaded mod(s)%s", loadedModsCount, this.loadedModsList); |
842 | } | 878 | } |
879 | + | ||
880 | + /** | ||
881 | + * @param mod | ||
882 | + */ | ||
883 | + protected void initMod(LiteMod mod) | ||
884 | + { | ||
885 | + LiteLoader.logInfo("Initialising mod %s version %s", mod.getName(), mod.getVersion()); | ||
886 | + | ||
887 | + try | ||
888 | + { | ||
889 | + this.handleModVersionUpgrade(mod); | ||
890 | + } | ||
891 | + catch (Throwable th) | ||
892 | + { | ||
893 | + LiteLoader.logWarning("Error performing settings upgrade for %s. Settings may not be properly migrated", mod.getName()); | ||
894 | + } | ||
895 | + | ||
896 | + // initialise the mod | ||
897 | + mod.init(this.commonConfigFolder); | ||
898 | + | ||
899 | + // add the mod to all relevant listener queues | ||
900 | + this.events.addListener(mod); | ||
901 | + | ||
902 | + if (mod instanceof Permissible) | ||
903 | + { | ||
904 | + this.permissionsManager.registerPermissible((Permissible)mod); | ||
905 | + } | ||
906 | + | ||
907 | + this.loadedMods.add(mod); | ||
908 | + this.loadedModsList += String.format("\n - %s version %s", mod.getName(), mod.getVersion()); | ||
909 | + } | ||
910 | + | ||
911 | + /** | ||
912 | + * @param mod | ||
913 | + */ | ||
914 | + protected void handleModVersionUpgrade(LiteMod mod) | ||
915 | + { | ||
916 | + String modKey = this.getModNameForConfig(mod.getClass(), mod.getName()); | ||
917 | + LiteLoaderVersion lastModVersion = LiteLoaderVersion.getVersionFromRevision(this.bootstrap.getLastKnownModRevision(modKey)); | ||
918 | + | ||
919 | + if (LiteLoaderBootstrap.VERSION.getLoaderRevision() > lastModVersion.getLoaderRevision()) | ||
920 | + { | ||
921 | + LiteLoader.logInfo("Performing config upgrade for mod %s. Upgrading %s to %s...", mod.getName(), lastModVersion, LiteLoaderBootstrap.VERSION); | ||
922 | + mod.upgradeSettings(LiteLoaderBootstrap.VERSION.getMinecraftVersion(), this.versionConfigFolder, this.inflectVersionedConfigPath(lastModVersion)); | ||
923 | + | ||
924 | + this.bootstrap.storeLastKnownModRevision(modKey); | ||
925 | + LiteLoader.logInfo("Config upgrade succeeded for mod %s", mod.getName()); | ||
926 | + } | ||
927 | + } | ||
928 | + | ||
929 | + /** | ||
930 | + * Used by the version upgrade code, gets a version of the mod name suitable | ||
931 | + * for inclusion in the properties file | ||
932 | + * | ||
933 | + * @param modName | ||
934 | + * @return | ||
935 | + */ | ||
936 | + private String getModNameForConfig(Class<? extends LiteMod> modClass, String modName) | ||
937 | + { | ||
938 | + if (modName == null || modName.isEmpty()) | ||
939 | + { | ||
940 | + modName = modClass.getSimpleName().toLowerCase(); | ||
941 | + } | ||
942 | + | ||
943 | + return String.format("version.%s", modName.toLowerCase().replaceAll("[^a-z0-9_\\-\\.]", "")); | ||
944 | + } | ||
843 | 945 | ||
844 | /** | 946 | /** |
845 | * Called before mod late initialisation, refresh the resources that have been added so that mods can use them | 947 | * Called before mod late initialisation, refresh the resources that have been added so that mods can use them |
java/com/mumfrey/liteloader/core/LiteLoaderEnumerator.java
@@ -186,7 +186,7 @@ class LiteLoaderEnumerator implements FilenameFilter | @@ -186,7 +186,7 @@ class LiteLoaderEnumerator implements FilenameFilter | ||
186 | if (!this.modFiles.containsKey(modClassName)) return null; | 186 | if (!this.modFiles.containsKey(modClassName)) return null; |
187 | return this.modFiles.get(modClassName).getModName().toLowerCase(); | 187 | return this.modFiles.get(modClassName).getModName().toLowerCase(); |
188 | } | 188 | } |
189 | - | 189 | + |
190 | /** | 190 | /** |
191 | * Get the discovery settings from the properties file | 191 | * Get the discovery settings from the properties file |
192 | */ | 192 | */ |
@@ -238,15 +238,15 @@ class LiteLoaderEnumerator implements FilenameFilter | @@ -238,15 +238,15 @@ class LiteLoaderEnumerator implements FilenameFilter | ||
238 | { | 238 | { |
239 | LiteLoaderEnumerator.logInfo("Mods folder found, searching %s", modsFolder.getPath()); | 239 | LiteLoaderEnumerator.logInfo("Mods folder found, searching %s", modsFolder.getPath()); |
240 | this.findModFiles(modsFolder, false); | 240 | this.findModFiles(modsFolder, false); |
241 | - LiteLoaderEnumerator.logInfo("Found %d mod file(s)", this.allModFiles.size()); | ||
242 | 241 | ||
243 | File versionedModsFolder = new File(modsFolder, LiteLoaderBootstrap.VERSION.getMinecraftVersion()); | 242 | File versionedModsFolder = new File(modsFolder, LiteLoaderBootstrap.VERSION.getMinecraftVersion()); |
244 | if (versionedModsFolder.exists() && versionedModsFolder.isDirectory()) | 243 | if (versionedModsFolder.exists() && versionedModsFolder.isDirectory()) |
245 | { | 244 | { |
246 | LiteLoaderEnumerator.logInfo("Versioned mods folder found, searching %s", versionedModsFolder.getPath()); | 245 | LiteLoaderEnumerator.logInfo("Versioned mods folder found, searching %s", versionedModsFolder.getPath()); |
247 | this.findModFiles(versionedModsFolder, true); | 246 | this.findModFiles(versionedModsFolder, true); |
248 | - LiteLoaderEnumerator.logInfo("Found %d mod file(s)", this.allModFiles.size()); | ||
249 | } | 247 | } |
248 | + | ||
249 | + LiteLoaderEnumerator.logInfo("Found %d mod file(s)", this.allModFiles.size()); | ||
250 | } | 250 | } |
251 | } | 251 | } |
252 | } | 252 | } |
java/com/mumfrey/liteloader/gui/GuiModListEntry.java
@@ -21,11 +21,6 @@ public class GuiModListEntry extends Gui | @@ -21,11 +21,6 @@ public class GuiModListEntry extends Gui | ||
21 | private static final int PANEL_SPACING = 4; | 21 | private static final int PANEL_SPACING = 4; |
22 | 22 | ||
23 | /** | 23 | /** |
24 | - * Enabled mods list, keep a reference so that we can toggle mod enablement when required | ||
25 | - */ | ||
26 | - private EnabledModsList enabledModsList; | ||
27 | - | ||
28 | - /** | ||
29 | * For text display | 24 | * For text display |
30 | */ | 25 | */ |
31 | private FontRenderer fontRenderer; | 26 | private FontRenderer fontRenderer; |
@@ -91,7 +86,6 @@ public class GuiModListEntry extends Gui | @@ -91,7 +86,6 @@ public class GuiModListEntry extends Gui | ||
91 | */ | 86 | */ |
92 | GuiModListEntry(LiteLoader loader, EnabledModsList enabledMods, FontRenderer fontRenderer, LiteMod mod) | 87 | GuiModListEntry(LiteLoader loader, EnabledModsList enabledMods, FontRenderer fontRenderer, LiteMod mod) |
93 | { | 88 | { |
94 | - this.enabledModsList = enabledMods; | ||
95 | this.fontRenderer = fontRenderer; | 89 | this.fontRenderer = fontRenderer; |
96 | this.metaName = loader.getModMetaName(mod.getClass()); | 90 | this.metaName = loader.getModMetaName(mod.getClass()); |
97 | this.name = mod.getName(); | 91 | this.name = mod.getName(); |
@@ -100,7 +94,7 @@ public class GuiModListEntry extends Gui | @@ -100,7 +94,7 @@ public class GuiModListEntry extends Gui | ||
100 | this.url = loader.getModMetaData(mod.getClass(), "url", null); | 94 | this.url = loader.getModMetaData(mod.getClass(), "url", null); |
101 | this.description = loader.getModMetaData(mod.getClass(), "description", ""); | 95 | this.description = loader.getModMetaData(mod.getClass(), "description", ""); |
102 | this.enabled = true; | 96 | this.enabled = true; |
103 | - this.canBeToggled = this.metaName != null && this.enabledModsList.saveAllowed(); | 97 | + this.canBeToggled = this.metaName != null && enabledMods.saveAllowed(); |
104 | this.willBeEnabled = true; | 98 | this.willBeEnabled = true; |
105 | } | 99 | } |
106 | 100 | ||
@@ -114,7 +108,6 @@ public class GuiModListEntry extends Gui | @@ -114,7 +108,6 @@ public class GuiModListEntry extends Gui | ||
114 | */ | 108 | */ |
115 | GuiModListEntry(LiteLoader loader, EnabledModsList enabledMods, FontRenderer fontRenderer, ModFile file) | 109 | GuiModListEntry(LiteLoader loader, EnabledModsList enabledMods, FontRenderer fontRenderer, ModFile file) |
116 | { | 110 | { |
117 | - this.enabledModsList = enabledMods; | ||
118 | this.fontRenderer = fontRenderer; | 111 | this.fontRenderer = fontRenderer; |
119 | this.metaName = file.getModName().toLowerCase(); | 112 | this.metaName = file.getModName().toLowerCase(); |
120 | this.name = file instanceof ClassPathMod ? file.getModName() : file.getName(); | 113 | this.name = file instanceof ClassPathMod ? file.getModName() : file.getName(); |
@@ -123,7 +116,7 @@ public class GuiModListEntry extends Gui | @@ -123,7 +116,7 @@ public class GuiModListEntry extends Gui | ||
123 | this.url = file.getMetaValue("url", null); | 116 | this.url = file.getMetaValue("url", null); |
124 | this.description = file.getMetaValue("description", ""); | 117 | this.description = file.getMetaValue("description", ""); |
125 | this.enabled = false; | 118 | this.enabled = false; |
126 | - this.canBeToggled = this.enabledModsList.saveAllowed(); | 119 | + this.canBeToggled = enabledMods.saveAllowed(); |
127 | this.willBeEnabled = enabledMods.isEnabled(loader.getProfile(), this.metaName); | 120 | this.willBeEnabled = enabledMods.isEnabled(loader.getProfile(), this.metaName); |
128 | } | 121 | } |
129 | 122 | ||
@@ -202,8 +195,7 @@ public class GuiModListEntry extends Gui | @@ -202,8 +195,7 @@ public class GuiModListEntry extends Gui | ||
202 | if (this.canBeToggled) | 195 | if (this.canBeToggled) |
203 | { | 196 | { |
204 | this.willBeEnabled = !this.willBeEnabled; | 197 | this.willBeEnabled = !this.willBeEnabled; |
205 | - this.enabledModsList.setEnabled(LiteLoader.getProfile(), this.metaName, this.willBeEnabled); | ||
206 | - this.enabledModsList.save(); | 198 | + LiteLoader.getInstance().setModEnabled(this.metaName, this.willBeEnabled); |
207 | } | 199 | } |
208 | } | 200 | } |
209 | 201 |