Commit 1012613a5bac1f67f4619624abe30cdb8e6dff8f
1 parent
1c6b9c78
fix some dependency check issues, possibly fixes #78
Showing
2 changed files
with
65 additions
and
23 deletions
java/client/com/mumfrey/liteloader/client/PacketEventsClient.java
| @@ -204,10 +204,10 @@ public class PacketEventsClient extends PacketEvents | @@ -204,10 +204,10 @@ public class PacketEventsClient extends PacketEvents | ||
| 204 | @Override | 204 | @Override |
| 205 | protected void handlePacket(PacketEventInfo<Packet> e, INetHandler netHandler, S02PacketChat packet) | 205 | protected void handlePacket(PacketEventInfo<Packet> e, INetHandler netHandler, S02PacketChat packet) |
| 206 | { | 206 | { |
| 207 | - if (packet.func_148915_c() == null) | 207 | + if (packet.getChatComponent() == null) |
| 208 | return; | 208 | return; |
| 209 | 209 | ||
| 210 | - IChatComponent originalChat = packet.func_148915_c(); | 210 | + IChatComponent originalChat = packet.getChatComponent(); |
| 211 | IChatComponent chat = originalChat; | 211 | IChatComponent chat = originalChat; |
| 212 | String message = chat.getFormattedText(); | 212 | String message = chat.getFormattedText(); |
| 213 | 213 |
java/common/com/mumfrey/liteloader/core/LiteLoaderEnumerator.java
| @@ -6,9 +6,11 @@ import java.net.URL; | @@ -6,9 +6,11 @@ import java.net.URL; | ||
| 6 | import java.util.ArrayList; | 6 | import java.util.ArrayList; |
| 7 | import java.util.Collection; | 7 | import java.util.Collection; |
| 8 | import java.util.Collections; | 8 | import java.util.Collections; |
| 9 | +import java.util.Deque; | ||
| 9 | import java.util.HashMap; | 10 | import java.util.HashMap; |
| 10 | import java.util.HashSet; | 11 | import java.util.HashSet; |
| 11 | import java.util.LinkedHashSet; | 12 | import java.util.LinkedHashSet; |
| 13 | +import java.util.LinkedList; | ||
| 12 | import java.util.List; | 14 | import java.util.List; |
| 13 | import java.util.Map; | 15 | import java.util.Map; |
| 14 | import java.util.Set; | 16 | import java.util.Set; |
| @@ -29,6 +31,7 @@ import com.mumfrey.liteloader.core.api.DefaultClassValidator; | @@ -29,6 +31,7 @@ import com.mumfrey.liteloader.core.api.DefaultClassValidator; | ||
| 29 | import com.mumfrey.liteloader.core.api.DefaultEnumeratorPlugin; | 31 | import com.mumfrey.liteloader.core.api.DefaultEnumeratorPlugin; |
| 30 | import com.mumfrey.liteloader.core.event.HandlerList; | 32 | import com.mumfrey.liteloader.core.event.HandlerList; |
| 31 | import com.mumfrey.liteloader.interfaces.FastIterableDeque; | 33 | import com.mumfrey.liteloader.interfaces.FastIterableDeque; |
| 34 | +import com.mumfrey.liteloader.interfaces.Injectable; | ||
| 32 | import com.mumfrey.liteloader.interfaces.Loadable; | 35 | import com.mumfrey.liteloader.interfaces.Loadable; |
| 33 | import com.mumfrey.liteloader.interfaces.LoadableMod; | 36 | import com.mumfrey.liteloader.interfaces.LoadableMod; |
| 34 | import com.mumfrey.liteloader.interfaces.LoaderEnumerator; | 37 | import com.mumfrey.liteloader.interfaces.LoaderEnumerator; |
| @@ -386,6 +389,8 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -386,6 +389,8 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
| 386 | LiteLoaderLogger.warning(th, "Enumerator Module %s encountered an error whilst enumerating", module.getClass().getName()); | 389 | LiteLoaderLogger.warning(th, "Enumerator Module %s encountered an error whilst enumerating", module.getClass().getName()); |
| 387 | } | 390 | } |
| 388 | } | 391 | } |
| 392 | + | ||
| 393 | + this.checkDependencies(); | ||
| 389 | } | 394 | } |
| 390 | 395 | ||
| 391 | private void injectDiscoveredTweaks() | 396 | private void injectDiscoveredTweaks() |
| @@ -469,29 +474,24 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -469,29 +474,24 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
| 469 | { | 474 | { |
| 470 | this.checkState(EnumeratorState.DISCOVER, "registerModContainer"); | 475 | this.checkState(EnumeratorState.DISCOVER, "registerModContainer"); |
| 471 | 476 | ||
| 472 | - if (container != null) | 477 | + if (container == null) |
| 473 | { | 478 | { |
| 474 | - if (!this.checkEnabled(container)) | ||
| 475 | - { | ||
| 476 | - this.registerDisabledContainer(container, DisabledReason.USER_DISABLED); | ||
| 477 | - return false; | ||
| 478 | - } | ||
| 479 | - | ||
| 480 | - if (!this.checkDependencies(container)) | ||
| 481 | - { | ||
| 482 | - this.registerDisabledContainer(container, DisabledReason.MISSING_DEPENDENCY); | ||
| 483 | - return false; | ||
| 484 | - } | ||
| 485 | - | ||
| 486 | - if (!this.checkAPIRequirements(container)) | ||
| 487 | - { | ||
| 488 | - this.registerDisabledContainer(container, DisabledReason.MISSING_API); | ||
| 489 | - return false; | ||
| 490 | - } | ||
| 491 | - | ||
| 492 | - this.registerEnabledContainer(container); | 479 | + return true; |
| 493 | } | 480 | } |
| 494 | 481 | ||
| 482 | + if (!this.checkEnabled(container)) | ||
| 483 | + { | ||
| 484 | + this.registerDisabledContainer(container, DisabledReason.USER_DISABLED); | ||
| 485 | + return false; | ||
| 486 | + } | ||
| 487 | + | ||
| 488 | + if (!this.checkAPIRequirements(container)) | ||
| 489 | + { | ||
| 490 | + this.registerDisabledContainer(container, DisabledReason.MISSING_API); | ||
| 491 | + return false; | ||
| 492 | + } | ||
| 493 | + | ||
| 494 | + this.registerEnabledContainer(container); | ||
| 495 | return true; | 495 | return true; |
| 496 | } | 496 | } |
| 497 | 497 | ||
| @@ -616,7 +616,7 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -616,7 +616,7 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
| 616 | if (transformerManager != null && transformerManager.injectTransformer(classTransformerClass)) | 616 | if (transformerManager != null && transformerManager.injectTransformer(classTransformerClass)) |
| 617 | { | 617 | { |
| 618 | LiteLoaderLogger.info(Verbosity.REDUCED, "classTransformer '%s' was successfully added", classTransformerClass); | 618 | LiteLoaderLogger.info(Verbosity.REDUCED, "classTransformer '%s' was successfully added", classTransformerClass); |
| 619 | - container.injectIntoClassPath(this.classLoader, true); | 619 | + this.injectContainerRecursive(container); |
| 620 | } | 620 | } |
| 621 | } | 621 | } |
| 622 | } | 622 | } |
| @@ -625,6 +625,25 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -625,6 +625,25 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
| 625 | } | 625 | } |
| 626 | } | 626 | } |
| 627 | 627 | ||
| 628 | + /** | ||
| 629 | + * @param container | ||
| 630 | + */ | ||
| 631 | + private void injectContainerRecursive(Injectable container) throws MalformedURLException | ||
| 632 | + { | ||
| 633 | + if (container.injectIntoClassPath(this.classLoader, true) && container instanceof LoadableMod) | ||
| 634 | + { | ||
| 635 | + LoadableMod<?> file = (LoadableMod<?>)container; | ||
| 636 | + for (String dependency : file.getDependencies()) | ||
| 637 | + { | ||
| 638 | + LoadableMod<?> dependencyContainer = this.containers.getEnabledContainer(dependency); | ||
| 639 | + if (dependencyContainer != null) | ||
| 640 | + { | ||
| 641 | + this.injectContainerRecursive(dependencyContainer); | ||
| 642 | + } | ||
| 643 | + } | ||
| 644 | + } | ||
| 645 | + } | ||
| 646 | + | ||
| 628 | /* (non-Javadoc) | 647 | /* (non-Javadoc) |
| 629 | * @see com.mumfrey.liteloader.core.PluggableEnumerator#registerMods(com.mumfrey.liteloader.core.LoadableMod, boolean) | 648 | * @see com.mumfrey.liteloader.core.PluggableEnumerator#registerMods(com.mumfrey.liteloader.core.LoadableMod, boolean) |
| 630 | */ | 649 | */ |
| @@ -707,6 +726,29 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -707,6 +726,29 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
| 707 | return true; | 726 | return true; |
| 708 | } | 727 | } |
| 709 | 728 | ||
| 729 | + /** | ||
| 730 | + * Check dependencies of enabled containers | ||
| 731 | + */ | ||
| 732 | + private void checkDependencies() | ||
| 733 | + { | ||
| 734 | + Collection<? extends LoadableMod<?>> enabledContainers = this.containers.getEnabledContainers(); | ||
| 735 | + Deque<LoadableMod<?>> containers = new LinkedList<LoadableMod<?>>(enabledContainers); | ||
| 736 | + | ||
| 737 | + while (containers.size() > 0) | ||
| 738 | + { | ||
| 739 | + LoadableMod<?> container = containers.pop(); | ||
| 740 | + if (!this.checkDependencies(container)) | ||
| 741 | + { | ||
| 742 | + this.registerDisabledContainer(container, DisabledReason.MISSING_DEPENDENCY); | ||
| 743 | + | ||
| 744 | + // Iterate so that a container disabled by a failed dependency check will also | ||
| 745 | + // disable any containers which depend upon it | ||
| 746 | + containers.clear(); | ||
| 747 | + containers.addAll(enabledContainers); | ||
| 748 | + } | ||
| 749 | + } | ||
| 750 | + } | ||
| 751 | + | ||
| 710 | @Override | 752 | @Override |
| 711 | public boolean checkDependencies(LoadableMod<?> container) | 753 | public boolean checkDependencies(LoadableMod<?> container) |
| 712 | { | 754 | { |