diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-05-21 20:29:08 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-05-21 20:29:08 +0800 |
| commit | a4884f1e31083a05b48ea238ce8792842e691444 (patch) | |
| tree | 5284d9cc68d5d21f74a6dc84f8004d42061c8831 /fabric/src | |
| parent | e48b5b7a9eec72fcaf202d1ffe53765da6aad503 (diff) | |
| parent | 8589dfa9b7e382c2eff22bb1c5bea5d7759007d5 (diff) | |
| download | RoughlyEnoughItems-a4884f1e31083a05b48ea238ce8792842e691444.tar.gz RoughlyEnoughItems-a4884f1e31083a05b48ea238ce8792842e691444.tar.bz2 RoughlyEnoughItems-a4884f1e31083a05b48ea238ce8792842e691444.zip | |
Merge remote-tracking branch 'origin/8.x-1.18.2' into 9.x-1.19
# Conflicts:
# gradle.properties
# runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/performance/PerformanceScreen.java
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java
Diffstat (limited to 'fabric/src')
3 files changed, 43 insertions, 16 deletions
diff --git a/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java b/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java index 71918bc0c..b42404dbf 100644 --- a/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java +++ b/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java @@ -24,7 +24,8 @@ package me.shedaniel.rei.fabric; import com.google.common.base.Suppliers; -import com.google.common.collect.Iterables; +import dev.architectury.platform.Platform; +import dev.architectury.utils.Env; import me.shedaniel.rei.RoughlyEnoughItemsInitializer; import me.shedaniel.rei.RoughlyEnoughItemsState; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; @@ -37,27 +38,49 @@ import net.fabricmc.loader.api.entrypoint.EntrypointContainer; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.world.inventory.tooltip.TooltipComponent; +import org.apache.commons.lang3.tuple.Pair; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Collection; -import java.util.List; +import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class PluginDetectorImpl { private static <P extends REIPlugin<?>> void loadPlugin(Class<? extends P> pluginClass, Consumer<? super REIPluginProvider<P>> consumer) { + Map<String, Env> entrypoints = new LinkedHashMap<>(); + entrypoints.put("rei_server", Env.SERVER); + entrypoints.put("rei_common", null); + entrypoints.put("rei", null); + entrypoints.put("rei_client", Env.CLIENT); + Set<String> deprecatedEntrypoints = new LinkedHashSet<>(Arrays.asList( + "rei_containers", + "rei_plugins", + "rei_plugins_v0", + "rei" + )); + List<Pair<EntrypointContainer<REIPluginProvider>, String>> containers = Stream.concat(entrypoints.entrySet().stream() + .filter(entry -> entry.getValue() == null || Platform.getEnvironment() == entry.getValue()) + .map(Map.Entry::getKey) + , deprecatedEntrypoints.stream()) + .distinct() + .flatMap(name -> FabricLoader.getInstance().getEntrypointContainers(name, REIPluginProvider.class) + .stream() + .map(container -> Pair.of(container, name))) + .collect(Collectors.toList()); + out: - for (EntrypointContainer<REIPluginProvider> container : Iterables.concat( - FabricLoader.getInstance().getEntrypointContainers("rei_containers", REIPluginProvider.class), - FabricLoader.getInstance().getEntrypointContainers("rei_server", REIPluginProvider.class), - FabricLoader.getInstance().getEntrypointContainers("rei", REIPluginProvider.class), - FabricLoader.getInstance().getEntrypointContainers("rei_common", REIPluginProvider.class), - FabricLoader.getInstance().getEntrypointContainers("rei_plugins", REIPluginProvider.class), - FabricLoader.getInstance().getEntrypointContainers("rei_plugins_v0", REIPluginProvider.class) - )) { + for (Pair<EntrypointContainer<REIPluginProvider>, String> pair : containers) { + EntrypointContainer<REIPluginProvider> container = pair.getLeft(); + String name = pair.getRight(); try { + if (deprecatedEntrypoints.contains(name)) { + RoughlyEnoughItemsState.LOGGER.warn("The entrypoint used by %s, \"%s\" is deprecated and will be removed in a future version of Roughly Enough Items. Please use \"rei_server\", \"rei_client\" or \"rei_common\" instead.".formatted(container.getProvider().getMetadata().getName(), name)); + } + REIPluginProvider<P> plugin = container.getEntrypoint(); if (pluginClass.isAssignableFrom(plugin.getPluginProviderClass())) { consumer.accept(new REIPluginProvider<>() { @@ -80,8 +103,10 @@ public class PluginDetectorImpl { } catch (Throwable t) { Throwable throwable = t; while (throwable != null) { - if (throwable.getMessage() != null && throwable.getMessage().contains("environment type SERVER") && !RoughlyEnoughItemsInitializer.isClient()) + if (throwable.getMessage() != null && throwable.getMessage().contains("environment type SERVER") && !RoughlyEnoughItemsInitializer.isClient()) { + RoughlyEnoughItemsState.LOGGER.warn("Rerached side issue when loading REI plugin by %s. Please use \"rei_server\", \"rei_client\" or \"rei_common\" instead.".formatted(container.getProvider().getMetadata().getName())); continue out; + } throwable = throwable.getCause(); } String error = "Could not create REI Plugin [" + getSimpleName(pluginClass) + "] due to errors, provided by '" + container.getProvider().getMetadata().getId() + "'!"; diff --git a/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsInitializerImpl.java b/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsInitializerImpl.java index af5ec69a7..b3bf9196b 100644 --- a/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsInitializerImpl.java +++ b/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsInitializerImpl.java @@ -59,13 +59,13 @@ public class RoughlyEnoughItemsInitializerImpl { } } if (!FabricLoader.getInstance().isModLoaded("architectury")) { - RoughlyEnoughItemsState.error("Architectury API is not installed!", "https://www.curseforge.com/minecraft/mc-mods/architectury-fabric/files/all"); + RoughlyEnoughItemsState.error("Architectury API is not installed!", "https://www.curseforge.com/minecraft/mc-mods/architectury-forge/files/all"); } else { Version version = FabricLoader.getInstance().getModContainer("architectury").get().getMetadata().getVersion(); try { if (version instanceof SemanticVersion && SemanticVersion.parse("2.6.0").compareTo((SemanticVersion) version) > 0) { - RoughlyEnoughItemsState.error("Architectury API is too old, please update!", "https://www.curseforge.com/minecraft/mc-mods/architectury-fabric/files/all"); + RoughlyEnoughItemsState.error("Architectury API is too old, please update!", "https://www.curseforge.com/minecraft/mc-mods/architectury-forge/files/all"); } } catch (VersionParsingException e) { e.printStackTrace(); diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c87c50dc3..5e7935df2 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -22,9 +22,11 @@ "me.shedaniel.rei.fabric.RoughlyEnoughItemsFabric", "me.shedaniel.rei.RoughlyEnoughItemsInitializer::onInitializeClient" ], - "rei": [ + "rei_common": [ "me.shedaniel.rei.plugin.common.DefaultPlugin", - "me.shedaniel.rei.plugin.common.runtime.DefaultRuntimePlugin", + "me.shedaniel.rei.plugin.common.runtime.DefaultRuntimePlugin" + ], + "rei_client": [ "me.shedaniel.rei.plugin.client.DefaultClientPlugin", "me.shedaniel.rei.plugin.client.runtime.DefaultClientRuntimePlugin" ] |
