aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-04-12 00:36:08 +0800
committershedaniel <daniel@shedaniel.me>2021-04-12 00:36:08 +0800
commit513347f841a401391f59b4c9fe3cbcb4f554f86d (patch)
tree1348b448e43ad83aae2e2de556d520f3f716af9f /runtime/src/main/java
parent6d7690b3410e6aa837089987c08598cb9ecbe45a (diff)
downloadRoughlyEnoughItems-513347f841a401391f59b4c9fe3cbcb4f554f86d.tar.gz
RoughlyEnoughItems-513347f841a401391f59b4c9fe3cbcb4f554f86d.tar.bz2
RoughlyEnoughItems-513347f841a401391f59b4c9fe3cbcb4f554f86d.zip
Prepare for true sided REI
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java32
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java1
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/EmptyEntryDefinition.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java13
8 files changed, 65 insertions, 22 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index f0a392e65..0ed0e6f78 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -29,6 +29,7 @@ import me.shedaniel.architectury.event.events.RecipeUpdateEvent;
import me.shedaniel.architectury.event.events.client.ClientScreenInputEvent;
import me.shedaniel.architectury.networking.NetworkManager;
import me.shedaniel.architectury.platform.Platform;
+import me.shedaniel.architectury.registry.ReloadListeners;
import me.shedaniel.architectury.utils.Env;
import me.shedaniel.math.Point;
import me.shedaniel.rei.api.client.REIHelper;
@@ -111,6 +112,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.packs.PackType;
import net.minecraft.util.Unit;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.inventory.CraftingMenu;
@@ -137,14 +139,19 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
@ApiStatus.Internal
-@Environment(EnvType.CLIENT)
public class RoughlyEnoughItemsCore {
- @ApiStatus.Internal public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
- private static final ExecutorService SYNC_RECIPES = Executors.newSingleThreadScheduledExecutor(r -> new Thread(r, "REI-SyncRecipes"));
+ @ApiStatus.Internal
+ public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
+ private static final ExecutorService RELOAD_PLUGINS;
@ApiStatus.Experimental
public static boolean isLeftMousePressed = false;
static {
+ RELOAD_PLUGINS = Executors.newSingleThreadScheduledExecutor(r -> {
+ Thread thread = new Thread(r, "REI-ReloadPlugins");
+ thread.setDaemon(true);
+ return thread;
+ });
attachCommonInternals();
if (Platform.getEnvironment() == Env.CLIENT) {
attachClientInternals();
@@ -255,7 +262,8 @@ public class RoughlyEnoughItemsCore {
@Environment(EnvType.CLIENT)
public static void attachClientInternals() {
InternalWidgets.attach();
- ClientInternals.attachInstance((Supplier<EntryRenderer<?>>) () -> EmptyEntryDefinition.EmptyRenderer.INSTANCE, "emptyEntryRenderer");
+ EmptyEntryDefinition.EmptyRenderer emptyEntryRenderer = new EmptyEntryDefinition.EmptyRenderer();
+ ClientInternals.attachInstance((Supplier<EntryRenderer<?>>) () -> emptyEntryRenderer, "emptyEntryRenderer");
ClientInternals.attachInstance((BiFunction<Supplier<FavoriteEntry>, Supplier<CompoundTag>, FavoriteEntry>) (supplier, toJson) -> new FavoriteEntry() {
FavoriteEntry value = null;
@@ -383,6 +391,7 @@ public class RoughlyEnoughItemsCore {
}
@ApiStatus.Internal
+ @Environment(EnvType.CLIENT)
public static void reloadPlugins(MutableLong lastReload) {
if (lastReload != null) {
if (lastReload.getValue() > 0 && System.currentTimeMillis() - lastReload.getValue() <= 5000) {
@@ -392,7 +401,7 @@ public class RoughlyEnoughItemsCore {
lastReload.setValue(System.currentTimeMillis());
}
if (ConfigObject.getInstance().doesRegisterRecipesInAnotherThread()) {
- CompletableFuture.runAsync(RoughlyEnoughItemsCore::_reloadPlugins, SYNC_RECIPES);
+ CompletableFuture.runAsync(RoughlyEnoughItemsCore::_reloadPlugins, RELOAD_PLUGINS);
} else {
_reloadPlugins();
}
@@ -408,12 +417,21 @@ public class RoughlyEnoughItemsCore {
PluginDetector.detectCommonPlugins();
PluginDetector.detectServerPlugins();
RoughlyEnoughItemsNetwork.onInitialize();
+
+ if (Platform.getEnvironment() == Env.SERVER) {
+ MutableLong lastReload = new MutableLong(-1);
+ ReloadListeners.registerReloadListener(PackType.SERVER_DATA, (preparationBarrier, resourceManager, profilerFiller, profilerFiller2, executor, executor2) -> {
+ return preparationBarrier.wait(Unit.INSTANCE).thenRunAsync(() -> {
+ CompletableFuture.runAsync(RoughlyEnoughItemsCore::_reloadPlugins, RELOAD_PLUGINS);
+ }, executor2);
+ });
+ }
}
@Environment(EnvType.CLIENT)
public void onInitializeClient() {
IssuesDetector.detect();
- registerClothEvents();
+ registerEvents();
PluginDetector.detectClientPlugins();
loadTestPlugins();
@@ -489,7 +507,7 @@ public class RoughlyEnoughItemsCore {
}
@Environment(EnvType.CLIENT)
- private void registerClothEvents() {
+ private void registerEvents() {
Minecraft client = Minecraft.getInstance();
final ResourceLocation recipeButtonTex = new ResourceLocation("textures/gui/recipe_button.png");
MutableLong lastReload = new MutableLong(-1);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java
index e8dfa574f..ed0aaf717 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/type/types/RenderingEntryDefinition.java
@@ -43,7 +43,7 @@ import org.jetbrains.annotations.Nullable;
@ApiStatus.Internal
@Environment(EnvType.CLIENT)
public class RenderingEntryDefinition {
- public static final EntryDefinition<Renderer> RENDERING = new BuiltinEntryDefinition<Renderer>(Renderer.class, BuiltinClientEntryTypes.RENDERING, false, RenderingEntryDefinition::throwRendering, DeferredRenderer.INSTANCE) {
+ public static final EntryDefinition<Renderer> RENDERING = new BuiltinEntryDefinition<Renderer>(Renderer.class, BuiltinClientEntryTypes.RENDERING, false, RenderingEntryDefinition::throwRendering, () -> () -> DeferredRenderer.INSTANCE) {
@Override
public Component asFormattedText(EntryStack<Renderer> entry, Renderer value) {
Tooltip tooltip = value.getTooltip(PointHelper.ofMouse());
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
index 0275db9a4..38a0403d7 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java
@@ -87,6 +87,7 @@ public class EntryRegistryImpl implements EntryRegistry {
entries.clear();
entries.addAll(CollectionUtils.map(reloadingRegistry, HashedEntryStackWrapper::unwrap));
reloadingRegistry = null;
+ refilter();
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java
index fb7590a82..48f5fc293 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java
@@ -23,6 +23,8 @@
package me.shedaniel.rei.impl.common.entry.type.types;
+import me.shedaniel.architectury.utils.Env;
+import me.shedaniel.architectury.utils.EnvExecutor;
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer;
import me.shedaniel.rei.api.common.entry.EntrySerializer;
import me.shedaniel.rei.api.common.entry.EntryStack;
@@ -30,6 +32,8 @@ import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext;
import me.shedaniel.rei.api.common.entry.type.EntryDefinition;
import me.shedaniel.rei.api.common.entry.type.EntryType;
import me.shedaniel.rei.api.common.util.ImmutableTextComponent;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
@@ -48,14 +52,15 @@ public class BuiltinEntryDefinition<T> implements EntryDefinition<T>, EntrySeria
private final EntryType<T> type;
private final boolean empty;
private final Supplier<T> defaultValue;
- private final EntryRenderer<T> renderer;
+ @Environment(EnvType.CLIENT)
+ private EntryRenderer<T> renderer;
- protected BuiltinEntryDefinition(Class<T> clazz, EntryType<T> type, boolean empty, Supplier<T> defaultValue, EntryRenderer<T> renderer) {
+ protected BuiltinEntryDefinition(Class<T> clazz, EntryType<T> type, boolean empty, Supplier<T> defaultValue, Supplier<Supplier<EntryRenderer<T>>> renderer) {
this.clazz = clazz;
this.type = type;
this.empty = empty;
this.defaultValue = defaultValue;
- this.renderer = renderer;
+ EnvExecutor.runInEnv(Env.CLIENT, () -> () -> this.renderer = renderer.get().get());
}
@Override
@@ -69,6 +74,7 @@ public class BuiltinEntryDefinition<T> implements EntryDefinition<T>, EntrySeria
}
@Override
+ @Environment(EnvType.CLIENT)
public EntryRenderer<T> getRenderer() {
return renderer;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/EmptyEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/EmptyEntryDefinition.java
index 8c82b02d5..31a951bdc 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/EmptyEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/EmptyEntryDefinition.java
@@ -31,17 +31,18 @@ import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.type.BuiltinEntryTypes;
import me.shedaniel.rei.api.common.entry.type.EntryDefinition;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
import net.minecraft.util.Unit;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@ApiStatus.Internal
public class EmptyEntryDefinition {
- public static final EntryDefinition<Unit> EMPTY = new BuiltinEntryDefinition<>(Unit.class, BuiltinEntryTypes.EMPTY, true, () -> Unit.INSTANCE, EmptyRenderer.INSTANCE);
+ public static final EntryDefinition<Unit> EMPTY = new BuiltinEntryDefinition<>(Unit.class, BuiltinEntryTypes.EMPTY, true, () -> Unit.INSTANCE, () -> () -> new EmptyRenderer());
- public enum EmptyRenderer implements EntryRenderer<Unit> {
- INSTANCE;
-
+ @Environment(EnvType.CLIENT)
+ public static class EmptyRenderer implements EntryRenderer<Unit> {
@Override
public void render(EntryStack<Unit> entry, PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
index a9ac12590..d90ece572 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
@@ -49,7 +49,6 @@ import java.util.function.LongConsumer;
import java.util.function.UnaryOperator;
@ApiStatus.Internal
-@Environment(EnvType.CLIENT)
public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<P>, PluginView<P> {
private final List<Reloadable<P>> reloadables = new ArrayList<>();
private final Map<Class<? extends Reloadable<P>>, Reloadable<? super P>> cache = new ConcurrentHashMap<>();
@@ -189,10 +188,6 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
}
}
- try (SectionClosable refilter = section(sectionData, "entry-registry-refilter")) {
- EntryRegistry.getInstance().refilter();
- }
-
long usedTime = Util.getMillis() - startTime;
reloadDoneListener.accept(usedTime);
} catch (Throwable throwable) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
index d0d162777..eadb3f947 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
@@ -28,6 +28,8 @@ import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.architectury.fluid.FluidStack;
import me.shedaniel.architectury.hooks.FluidStackHooks;
import me.shedaniel.architectury.platform.Platform;
+import me.shedaniel.architectury.utils.Env;
+import me.shedaniel.architectury.utils.EnvExecutor;
import me.shedaniel.architectury.utils.Fraction;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
@@ -42,6 +44,8 @@ import me.shedaniel.rei.api.common.entry.type.EntryDefinition;
import me.shedaniel.rei.api.common.entry.type.EntryType;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.EntryStacks;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
@@ -58,6 +62,7 @@ import net.minecraft.tags.TagCollection;
import net.minecraft.tags.TagContainer;
import net.minecraft.util.Mth;
import net.minecraft.world.inventory.InventoryMenu;
+import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.Nullable;
@@ -70,7 +75,12 @@ import java.util.stream.Stream;
public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntrySerializer<FluidStack> {
private static final String FLUID_AMOUNT = Platform.isForge() ? "tooltip.rei.fluid_amount.forge" : "tooltip.rei.fluid_amount";
- private final EntryRenderer<FluidStack> renderer = new FluidEntryRenderer();
+ @Environment(EnvType.CLIENT)
+ private EntryRenderer<FluidStack> renderer;
+
+ public FluidEntryDefinition() {
+ EnvExecutor.runInEnv(Env.CLIENT, () -> () -> renderer = new FluidEntryRenderer());
+ }
@Override
public Class<FluidStack> getValueType() {
@@ -83,6 +93,7 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
}
@Override
+ @Environment(EnvType.CLIENT)
public EntryRenderer<FluidStack> getRenderer() {
return renderer;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
index a6a102ea8..d3c666b68 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
@@ -30,6 +30,8 @@ import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import it.unimi.dsi.fastutil.objects.ReferenceSet;
+import me.shedaniel.architectury.utils.Env;
+import me.shedaniel.architectury.utils.EnvExecutor;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.entry.renderer.AbstractEntryRenderer;
@@ -44,6 +46,8 @@ import me.shedaniel.rei.api.common.entry.type.EntryDefinition;
import me.shedaniel.rei.api.common.entry.type.EntryType;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.ImmutableTextComponent;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.ItemTransforms;
@@ -67,7 +71,12 @@ import java.util.Collections;
import java.util.List;
public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySerializer<ItemStack> {
- private final EntryRenderer<ItemStack> renderer = new ItemEntryRenderer();
+ @Environment(EnvType.CLIENT)
+ private EntryRenderer<ItemStack> renderer;
+
+ public ItemEntryDefinition() {
+ EnvExecutor.runInEnv(Env.CLIENT, () -> () -> renderer = new ItemEntryRenderer());
+ }
@Override
public Class<ItemStack> getValueType() {
@@ -80,6 +89,7 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
}
@Override
+ @Environment(EnvType.CLIENT)
public EntryRenderer<ItemStack> getRenderer() {
return renderer;
}
@@ -185,6 +195,7 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
}
@SuppressWarnings("deprecation")
+ @Environment(EnvType.CLIENT)
public class ItemEntryRenderer extends AbstractEntryRenderer<ItemStack> implements BatchedEntryRenderer<ItemStack> {
@Override
public int getBatchIdentifier(EntryStack<ItemStack> entry, Rectangle bounds) {