diff options
Diffstat (limited to 'runtime/src/main/java')
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) { |
