aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-02-28 02:07:47 +0800
committershedaniel <daniel@shedaniel.me>2021-02-28 02:07:47 +0800
commit69d386214f5d3471a3ef1e5533037cdc32648c57 (patch)
treea78d97ca416909ce68c3e5c11e1a1412e6fc174e /runtime/src/main/java
parent542eb5154ebce387312ca3691f743b89e4aef99e (diff)
downloadRoughlyEnoughItems-69d386214f5d3471a3ef1e5533037cdc32648c57.tar.gz
RoughlyEnoughItems-69d386214f5d3471a3ef1e5533037cdc32648c57.tar.bz2
RoughlyEnoughItems-69d386214f5d3471a3ef1e5533037cdc32648c57.zip
Port to Architectury Multiloader
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/PluginDetector.java18
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/REIModMenuEntryPoint.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java46
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java57
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsState.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java30
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ErrorDisplayer.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/IssuesDetector.java31
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ScreenHelper.java4
15 files changed, 107 insertions, 145 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/PluginDetector.java b/runtime/src/main/java/me/shedaniel/rei/PluginDetector.java
new file mode 100644
index 000000000..5e6de2399
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/PluginDetector.java
@@ -0,0 +1,18 @@
+package me.shedaniel.rei;
+
+import me.shedaniel.architectury.annotations.ExpectPlatform;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+
+public class PluginDetector {
+ @ExpectPlatform
+ public static void detectServerPlugins() {
+ throw new AssertionError();
+ }
+
+ @Environment(EnvType.CLIENT)
+ @ExpectPlatform
+ public static void detectClientPlugins() {
+ throw new AssertionError();
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/REIModMenuEntryPoint.java b/runtime/src/main/java/me/shedaniel/rei/REIModMenuEntryPoint.java
index df51d9d03..1375c2f14 100644
--- a/runtime/src/main/java/me/shedaniel/rei/REIModMenuEntryPoint.java
+++ b/runtime/src/main/java/me/shedaniel/rei/REIModMenuEntryPoint.java
@@ -25,10 +25,8 @@ package me.shedaniel.rei;
import me.shedaniel.architectury.platform.Platform;
import me.shedaniel.rei.api.ConfigManager;
-import net.fabricmc.api.ClientModInitializer;
-public class REIModMenuEntryPoint implements ClientModInitializer {
- @Override
+public class REIModMenuEntryPoint {
public void onInitializeClient() {
Platform.getMod("roughlyenoughitems").registerConfigurationScreen(ConfigManager.getInstance()::getConfigScreen);
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index 052cd903c..f0cfe81b5 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -23,7 +23,6 @@
package me.shedaniel.rei;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -61,11 +60,8 @@ import me.shedaniel.rei.impl.entry.EntryIngredientImpl;
import me.shedaniel.rei.impl.view.ViewsImpl;
import me.shedaniel.rei.impl.widgets.*;
import me.shedaniel.rei.tests.plugin.REITestPlugin;
-import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
-import net.fabricmc.loader.api.FabricLoader;
-import net.fabricmc.loader.api.ModContainer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.components.events.GuiEventListener;
@@ -110,7 +106,7 @@ import static me.shedaniel.rei.impl.Internals.attachInstance;
@ApiStatus.Internal
@Environment(EnvType.CLIENT)
-public class RoughlyEnoughItemsCore implements ClientModInitializer {
+public class RoughlyEnoughItemsCore {
@ApiStatus.Internal public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
private static final List<REIPlugin> PLUGINS = new ArrayList<>();
private static final ExecutorService SYNC_RECIPES = Executors.newSingleThreadScheduledExecutor(r -> new Thread(r, "REI-SyncRecipes"));
@@ -396,15 +392,11 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
}
@SuppressWarnings("deprecation")
- @Override
public void onInitializeClient() {
IssuesDetector.detect();
registerClothEvents();
- discoverPluginEntries();
- for (ModContainer modContainer : FabricLoader.getInstance().getAllMods()) {
- if (modContainer.getMetadata().containsCustomElement("roughlyenoughitems:plugins"))
- RoughlyEnoughItemsCore.LOGGER.error("REI plugin from " + modContainer.getMetadata().getId() + " is not loaded because it is too old!");
- }
+ PluginDetector.detectClientPlugins();
+ loadTestPlugins();
Minecraft client = Minecraft.getInstance();
NetworkManager.registerReceiver(NetworkManager.s2c(), RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, (buf, context) -> {
@@ -445,42 +437,10 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
});
}
- private void discoverPluginEntries() {
- for (REIPlugin plugin : Iterables.concat(
- FabricLoader.getInstance().getEntrypoints("rei_plugins", REIPlugin.class),
- FabricLoader.getInstance().getEntrypoints("rei", REIPlugin.class)
- )) {
- try {
- registerPlugin(plugin);
- } catch (Exception e) {
- e.printStackTrace();
- RoughlyEnoughItemsCore.LOGGER.error("Can't load REI plugins from %s: %s", plugin.getClass(), e.getLocalizedMessage());
- }
- }
- for (REIPlugin reiPlugin : FabricLoader.getInstance().getEntrypoints("rei_plugins_v0", REIPlugin.class)) {
- try {
- registerPlugin(reiPlugin);
- } catch (Exception e) {
- e.printStackTrace();
- RoughlyEnoughItemsCore.LOGGER.error("Can't load REI plugins from %s: %s", reiPlugin.getClass(), e.getLocalizedMessage());
- }
- }
-
- // Test Only
- loadTestPlugins();
- }
-
private void loadTestPlugins() {
if (isDebugModeEnabled()) {
registerPlugin(new REITestPlugin());
}
- if (FabricLoader.getInstance().isModLoaded("libblockattributes-fluids")) {
- try {
- registerPlugin((REIPlugin) Class.forName("me.shedaniel.rei.compat.LBASupportPlugin").getConstructor().newInstance());
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
}
private boolean shouldReturn(Screen screen) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java
index 4e933ac7a..7308fbb38 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java
@@ -24,20 +24,18 @@
package me.shedaniel.rei;
import com.google.common.collect.ImmutableSet;
-import net.fabricmc.api.ClientModInitializer;
+import me.shedaniel.architectury.platform.Platform;
import net.fabricmc.api.EnvType;
-import net.fabricmc.api.ModInitializer;
-import net.fabricmc.loader.api.FabricLoader;
-import net.fabricmc.loader.api.SemanticVersion;
-import net.fabricmc.loader.api.VersionParsingException;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
-public class RoughlyEnoughItemsInitializer implements ModInitializer, ClientModInitializer {
- @Override
- public void onInitialize() {
- checkRequiredFabricModules();
- if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
+public class RoughlyEnoughItemsInitializer {
+ public static void onInitialize() {
+ if (Platform.isFabric()) {
+ checkRequiredFabricModules();
+ }
+ if (Platform.getEnv() == EnvType.CLIENT) {
checkClothConfig();
}
@@ -46,8 +44,7 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer, ClientModI
}
}
- @Override
- public void onInitializeClient() {
+ public static void onInitializeClient() {
if (RoughlyEnoughItemsState.getErrors().isEmpty()) {
initializeEntryPoint("me.shedaniel.rei.RoughlyEnoughItemsCore");
initializeEntryPoint("me.shedaniel.rei.REIModMenuEntryPoint");
@@ -58,13 +55,25 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer, ClientModI
initializeEntryPoint("me.shedaniel.rei.impl.ErrorDisplayer");
}
- public void initializeEntryPoint(String className) {
+ public static void initializeEntryPoint(String className) {
try {
- Object instance = Class.forName(className).getConstructor().newInstance();
- if (instance instanceof ModInitializer) {
- ((ModInitializer) instance).onInitialize();
- } else if (instance instanceof ClientModInitializer) {
- ((ClientModInitializer) instance).onInitializeClient();
+ Class<?> name = Class.forName(className);
+ Object instance = name.getConstructor().newInstance();
+ Method method = null;
+ try {
+ method = name.getDeclaredMethod("onInitialize");
+ } catch (NoSuchMethodException ignored) {
+ }
+ if (method != null) {
+ method.invoke(instance);
+ } else if (Platform.getEnv() == EnvType.CLIENT) {
+ try {
+ method = name.getDeclaredMethod("onInitializeClient");
+ } catch (NoSuchMethodException ignored) {
+ }
+ if (method != null) {
+ method.invoke(instance);
+ }
}
} catch (InstantiationException | InvocationTargetException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException e) {
throw new RuntimeException(e);
@@ -72,7 +81,7 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer, ClientModI
}
public static void checkRequiredFabricModules() {
- ImmutableSet<String> requiredModules = FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT ?
+ ImmutableSet<String> requiredModules = Platform.getEnv() == EnvType.CLIENT ?
ImmutableSet.<String>builder()
.add("fabric-api-base")
.add("fabric-resource-loader-v0")
@@ -87,7 +96,7 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer, ClientModI
.add("fabric-lifecycle-events-v1")
.build();
for (String module : requiredModules) {
- boolean moduleLoaded = FabricLoader.getInstance().isModLoaded(module);
+ boolean moduleLoaded = Platform.isModLoaded(module);
if (!moduleLoaded) {
RoughlyEnoughItemsState.error("Fabric API is not installed!", "https://www.curseforge.com/minecraft/mc-mods/fabric-api/files/all");
break;
@@ -96,15 +105,15 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer, ClientModI
}
public static void checkClothConfig() {
- try {
- if (!FabricLoader.getInstance().isModLoaded("cloth-config2")) {
+ /*try {
+ if (!Platform.isModLoaded("cloth-config2")) {
RoughlyEnoughItemsState.error("Cloth Config is not installed!", "https://www.curseforge.com/minecraft/mc-mods/cloth-config/files/all");
- } else if (SemanticVersion.parse(FabricLoader.getInstance().getModContainer("cloth-config2").get().getMetadata().getVersion().getFriendlyString()).compareTo(SemanticVersion.parse("4.10.9")) < 0) {
+ } else if (SemanticVersion.parse(Platform.getMod("cloth-config2").getVersion()).compareTo(SemanticVersion.parse("4.10.9")) < 0) {
RoughlyEnoughItemsState.error("Your Cloth Config version is too old!", "https://www.curseforge.com/minecraft/mc-mods/cloth-config/files/all");
}
} catch (VersionParsingException e) {
RoughlyEnoughItemsState.error("Failed to parse Cloth Config version: " + e.getMessage());
e.printStackTrace();
- }
+ }*/
}
} \ No newline at end of file
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
index 24310961e..4013f6210 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
@@ -27,8 +27,6 @@ import com.google.common.collect.Lists;
import io.netty.buffer.Unpooled;
import me.shedaniel.architectury.networking.NetworkManager;
import me.shedaniel.rei.api.server.InputSlotCrafter;
-import net.fabricmc.api.ModInitializer;
-import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.core.NonNullList;
@@ -45,7 +43,7 @@ import net.minecraft.world.item.ItemStack;
import java.util.List;
-public class RoughlyEnoughItemsNetwork implements ModInitializer {
+public class RoughlyEnoughItemsNetwork {
public static final ResourceLocation DELETE_ITEMS_PACKET = new ResourceLocation("roughlyenoughitems", "delete_item");
public static final ResourceLocation CREATE_ITEMS_PACKET = new ResourceLocation("roughlyenoughitems", "create_item");
public static final ResourceLocation CREATE_ITEMS_GRAB_PACKET = new ResourceLocation("roughlyenoughitems", "create_item_grab");
@@ -53,9 +51,8 @@ public class RoughlyEnoughItemsNetwork implements ModInitializer {
public static final ResourceLocation MOVE_ITEMS_PACKET = new ResourceLocation("roughlyenoughitems", "move_items");
public static final ResourceLocation NOT_ENOUGH_ITEMS_PACKET = new ResourceLocation("roughlyenoughitems", "og_not_enough");
- @Override
public void onInitialize() {
- FabricLoader.getInstance().getEntrypoints("rei_containers", Runnable.class).forEach(Runnable::run);
+ PluginDetector.detectServerPlugins();
NetworkManager.registerReceiver(NetworkManager.c2s(), DELETE_ITEMS_PACKET, (buf, context) -> {
ServerPlayer player = (ServerPlayer) context.getPlayer();
if (player.getServer().getProfilePermissions(player.getGameProfile()) < player.getServer().getOperatorUserPermissionLevel()) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsState.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsState.java
index cd5b8c1e2..4f8c42bec 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsState.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsState.java
@@ -23,9 +23,9 @@
package me.shedaniel.rei;
-import com.google.common.collect.ImmutableSet;
+import me.shedaniel.architectury.platform.Platform;
+import me.shedaniel.architectury.utils.Env;
import net.fabricmc.api.EnvType;
-import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.util.Tuple;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -49,7 +49,7 @@ public class RoughlyEnoughItemsState {
private static List<Runnable> continueCallbacks = new ArrayList<>();
public static void error(String reason) {
- if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER || FabricLoader.getInstance().isDevelopmentEnvironment())
+ if (Platform.getEnvironment() == Env.SERVER || Platform.isDevelopmentEnvironment())
throw new RuntimeException(reason);
if (RoughlyEnoughItemsState.errorSet.add(reason + " " + null)) {
RoughlyEnoughItemsState.errors.add(new Tuple<>(reason, null));
@@ -58,7 +58,7 @@ public class RoughlyEnoughItemsState {
}
public static void error(String reason, String link) {
- if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER || FabricLoader.getInstance().isDevelopmentEnvironment())
+ if (Platform.getEnvironment() == Env.SERVER || Platform.isDevelopmentEnvironment())
throw new RuntimeException(reason + " " + link);
if (RoughlyEnoughItemsState.errorSet.add(reason + " " + link)) {
RoughlyEnoughItemsState.errors.add(new Tuple<>(reason, link));
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
index d90fb8140..1e676e405 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
@@ -32,7 +32,6 @@ import me.shedaniel.rei.gui.TransformingScreen;
import me.shedaniel.rei.gui.credits.CreditsEntryListWidget.TextCreditsItem;
import me.shedaniel.rei.gui.credits.CreditsEntryListWidget.TranslationCreditsItem;
import net.fabricmc.loader.api.FabricLoader;
-import net.fabricmc.loader.api.metadata.CustomValue;
import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.chat.NarratorChatListener;
@@ -47,7 +46,6 @@ import net.minecraft.util.Tuple;
import org.apache.commons.lang3.mutable.MutableLong;
import org.jetbrains.annotations.ApiStatus;
-import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
@@ -79,7 +77,7 @@ public class CreditsScreen extends Screen {
entryListWidget.creditsClearEntries();
List<Tuple<String, String>> translators = Lists.newArrayList();
Exception[] exception = {null};
- FabricLoader.getInstance().getModContainer("roughlyenoughitems-runtime").ifPresent(rei -> {
+ /*FabricLoader.getInstance().getModContainer("roughlyenoughitems").ifPresent(rei -> {
try {
if (rei.getMetadata().containsCustomValue("rei:translators")) {
CustomValue.CvObject jsonObject = rei.getMetadata().getCustomValue("rei:translators").getAsObject();
@@ -94,7 +92,7 @@ public class CreditsScreen extends Screen {
exception[0] = e;
e.printStackTrace();
}
- });
+ });*/
List<Tuple<String, String>> translatorsMapped = translators.stream().map(pair -> {
return new Tuple<>(
" " + (I18n.exists("language.roughlyenoughitems." + pair.getA().toLowerCase(Locale.ROOT).replace(' ', '_')) ? I18n.get("language.roughlyenoughitems." + pair.getA().toLowerCase(Locale.ROOT).replace(' ', '_')) : pair.getA()),
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java
index 390f40f69..2942991e4 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java
@@ -86,6 +86,7 @@ public class DefaultRuntimePlugin implements REIPlugin {
public void registerEntryTypes(EntryTypeRegistry registry) {
registry.register(VanillaEntryTypes.ITEM, new ItemEntryDefinition());
registry.register(VanillaEntryTypes.FLUID, new FluidEntryDefinition());
+
registry.registerBridge(VanillaEntryTypes.ITEM, VanillaEntryTypes.FLUID, input -> {
Optional<Stream<EntryStack<FluidStack>>> stream = FluidSupportProvider.getInstance().itemToFluids(input);
if (!stream.isPresent()) {
@@ -97,7 +98,7 @@ public class DefaultRuntimePlugin implements REIPlugin {
@Override
public void registerEntries(EntryRegistry registry) {
- if (ClientHelperImpl.getInstance().isAprilFools.get() || true) {
+ if (ClientHelperImpl.getInstance().isAprilFools.get()) {
registry.registerEntry(EntryStacks.of(new AbstractRenderer() {
private ResourceLocation id = new ResourceLocation("roughlyenoughitems", "textures/gui/kirb.png");
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
index 0b6cd08ce..4eba1f245 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
@@ -84,10 +84,12 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import java.util.concurrent.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
import java.util.function.Consumer;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
@ApiStatus.Internal
public class EntryListWidget extends WidgetWithBounds {
@@ -285,37 +287,37 @@ public class EntryListWidget extends WidgetWithBounds {
boolean fastEntryRendering = ConfigObject.getInstance().doesFastEntryRendering();
if (ConfigObject.getInstance().isEntryListWidgetScrolled()) {
ScissorsHandler.INSTANCE.scissor(bounds);
-
+
int skip = Math.max(0, Mth.floor(scrolling.scrollAmount / (float) entrySize()));
int nextIndex = skip * innerBounds.width / entrySize();
int i = nextIndex;
int cont = nextIndex;
blockedCount = 0;
-
+
Int2ObjectMap<List<EntryListEntry>> grouping = new Int2ObjectOpenHashMap<>();
List<EntryListEntry> toRender = new ArrayList<>();
Consumer<EntryListEntry> add;
-
+
if (fastEntryRendering) {
add = entry -> {
int hash = BatchEntryRenderer.getBatchIdFrom(entry.getCurrentEntry());
List<EntryListEntry> entries = grouping.get(hash);
-
+
if (entries == null) {
grouping.put(hash, entries = new ArrayList<>());
}
-
+
entries.add(entry);
};
} else {
add = toRender::add;
}
-
+
for (; cont < entries.size(); cont++) {
EntryListEntry entry = entries.get(cont);
-
+
Rectangle entryBounds = entry.getBounds();
-
+
entryBounds.y = (int) (entry.backupY - scrolling.scrollAmount);
if (entryBounds.y > this.bounds.getMaxY()) break;
if (allStacks.size() <= i) break;
@@ -330,7 +332,7 @@ public class EntryListWidget extends WidgetWithBounds {
blockedCount++;
}
}
-
+
if (fastEntryRendering) {
for (List<EntryListEntry> entries : grouping.values()) {
renderEntries(debugTime, size, time, fastEntryRendering, matrices, mouseX, mouseY, delta, entries);
@@ -338,10 +340,12 @@ public class EntryListWidget extends WidgetWithBounds {
} else {
renderEntries(debugTime, size, time, fastEntryRendering, matrices, mouseX, mouseY, delta, toRender);
}
-
+
updatePosition(delta);
ScissorsHandler.INSTANCE.removeLastScissor();
- scrolling.renderScrollBar(0, 1, REIHelper.getInstance().isDarkThemeEnabled() ? 0.8f : 1f);
+ if (scrolling.getMaxScroll() > 0) {
+ scrolling.renderScrollBar(0, 1, REIHelper.getInstance().isDarkThemeEnabled() ? 0.8f : 1f);
+ }
} else {
for (Widget widget : renders) {
widget.render(matrices, mouseX, mouseY, delta);
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java
index 957ea3096..3b6726d09 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/QueuedTooltip.java
@@ -25,11 +25,11 @@ package me.shedaniel.rei.gui.widget;
import com.google.common.collect.Lists;
+import me.shedaniel.architectury.platform.Platform;
+import me.shedaniel.architectury.utils.Env;
import me.shedaniel.math.Point;
-import me.shedaniel.math.api.Executor;
import me.shedaniel.math.impl.PointHelper;
import me.shedaniel.rei.api.gui.widgets.Tooltip;
-import net.fabricmc.api.EnvType;
import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@@ -50,13 +50,17 @@ public class QueuedTooltip implements Tooltip {
private QueuedTooltip(Point location, Collection<Component> text) {
this.location = location;
if (this.location == null) {
- Executor.runIfEnv(EnvType.CLIENT, () -> () -> {
- this.location = PointHelper.ofMouse();
- });
+ if (Platform.getEnvironment() == Env.CLIENT) {
+ setLocationToMouse();
+ }
}
this.text = Lists.newArrayList(text);
}
+ private void setLocationToMouse() {
+ this.location = PointHelper.ofMouse();
+ }
+
@NotNull
public static QueuedTooltip create(Point location, List<Component> text) {
return new QueuedTooltip(location, text);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
index c82203060..4ad00bb94 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
@@ -25,6 +25,7 @@ package me.shedaniel.rei.impl;
import io.netty.buffer.Unpooled;
import me.shedaniel.architectury.networking.NetworkManager;
+import me.shedaniel.architectury.platform.Platform;
import me.shedaniel.architectury.utils.Fraction;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.RoughlyEnoughItemsNetwork;
@@ -44,12 +45,8 @@ import me.shedaniel.rei.gui.PreRecipeViewingScreen;
import me.shedaniel.rei.gui.RecipeScreen;
import me.shedaniel.rei.gui.RecipeViewingScreen;
import me.shedaniel.rei.gui.VillagerRecipeViewingScreen;
-import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
-import net.fabricmc.loader.api.FabricLoader;
-import net.fabricmc.loader.api.ModContainer;
-import net.fabricmc.loader.api.metadata.ModMetadata;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
@@ -74,7 +71,7 @@ import static me.shedaniel.rei.impl.Internals.attachInstance;
@ApiStatus.Internal
@Environment(EnvType.CLIENT)
-public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
+public class ClientHelperImpl implements ClientHelper {
@ApiStatus.Internal public final LazyLoadedValue<Boolean> isYog = new LazyLoadedValue<>(() -> {
try {
if (Minecraft.getInstance().getUser().getGameProfile().getId().equals(UUID.fromString("f9546389-9415-4358-9c29-2c26b25bff5b")))
@@ -113,9 +110,12 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
String any = modNameCache.getOrDefault(modId, null);
if (any != null)
return any;
- String s = FabricLoader.getInstance().getModContainer(modId).map(ModContainer::getMetadata).map(ModMetadata::getName).orElse(modId);
- modNameCache.put(modId, s);
- return s;
+ if (Platform.isModLoaded(modId)) {
+ String modName = Platform.getMod(modId).getName();
+ modNameCache.put(modId, modName);
+ return modName;
+ }
+ return modId;
}
@Override
@@ -234,7 +234,6 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
return NetworkManager.canServerReceive(RoughlyEnoughItemsNetwork.MOVE_ITEMS_PACKET);
}
- @Override
public void onInitializeClient() {
attachInstance(this, ClientHelper.class);
attachInstance((Supplier<ViewSearchBuilder>) ViewSearchBuilderImpl::new, "viewSearchBuilder");
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
index c3bd6cdbd..0e3e0ff92 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
@@ -31,6 +31,7 @@ import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Matrix4f;
import me.shedaniel.architectury.hooks.ScreenHooks;
+import me.shedaniel.architectury.platform.Platform;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.annotation.ConfigEntry;
import me.shedaniel.autoconfig.gui.ConfigScreenProvider;
@@ -230,7 +231,7 @@ public class ConfigManagerImpl implements ConfigManager {
@Override
public Screen getConfigScreen(Screen parent) {
try {
- if (!detectWorkingOptifabric()) {
+ if (Platform.isFabric() && !detectWorkingOptifabric()) {
List<Tuple<String, String>> warnings = Lists.newArrayList();
warnings.add(new Tuple<>(I18n.get("text.rei.config.optifine.title"), null));
warnings.add(new Tuple<>(I18n.get("text.rei.config.optifine.description"), null));
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ErrorDisplayer.java b/runtime/src/main/java/me/shedaniel/rei/impl/ErrorDisplayer.java
index 411aa489e..90c5c4582 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/ErrorDisplayer.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/ErrorDisplayer.java
@@ -26,12 +26,10 @@ package me.shedaniel.rei.impl;
import me.shedaniel.architectury.event.events.GuiEvent;
import me.shedaniel.rei.RoughlyEnoughItemsState;
import me.shedaniel.rei.gui.WarningAndErrorScreen;
-import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.Minecraft;
import net.minecraft.world.InteractionResult;
-public class ErrorDisplayer implements ClientModInitializer {
- @Override
+public class ErrorDisplayer {
public void onInitializeClient() {
GuiEvent.INIT_PRE.register((screen, widgets, children) -> {
Minecraft minecraft = Minecraft.getInstance();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/IssuesDetector.java b/runtime/src/main/java/me/shedaniel/rei/impl/IssuesDetector.java
index 326425a93..9be504e61 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/IssuesDetector.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/IssuesDetector.java
@@ -23,51 +23,28 @@
package me.shedaniel.rei.impl;
+import me.shedaniel.architectury.platform.Platform;
import me.shedaniel.rei.RoughlyEnoughItemsState;
-import net.fabricmc.loader.api.FabricLoader;
import org.apache.commons.lang3.tuple.Triple;
-import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
-import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
import java.util.function.BooleanSupplier;
@ApiStatus.Internal
public final class IssuesDetector {
- private static final List