diff options
| author | shedaniel <daniel@shedaniel.me> | 2024-10-26 16:55:52 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-10-26 16:55:57 +0800 |
| commit | ddb48e2032d1986709cad973067693eec3118504 (patch) | |
| tree | e7905130008c67767d2ad2a4d72f49ba4df7e6e3 /fabric/src/main/java/me | |
| parent | eaf9236e3da2adafcea204778ecc0072e70d0aa5 (diff) | |
| download | RoughlyEnoughItems-ddb48e2032d1986709cad973067693eec3118504.tar.gz RoughlyEnoughItems-ddb48e2032d1986709cad973067693eec3118504.tar.bz2 RoughlyEnoughItems-ddb48e2032d1986709cad973067693eec3118504.zip | |
Update to 1.21.2 (Please read Primer)
https://hackmd.io/@shedaniel/rei17_primer
Diffstat (limited to 'fabric/src/main/java/me')
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java | 15 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplFabric.java | 8 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/impl/common/compat/FabricFluidAPISupportPlugin.java | 4 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinClientPacketListener.java | 5 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinEffectsInInventory.java (renamed from fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinEffectRenderingInventoryScreen.java) | 31 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinRecipeToast.java | 6 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java | 20 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagManager.java | 48 | ||||
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/fabric/DefaultCraftingDisplayImpl.java | 29 |
9 files changed, 48 insertions, 118 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 3561c9da5..7585fb2e6 100644 --- a/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java +++ b/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java @@ -123,27 +123,22 @@ public class PluginDetectorImpl implements PluginDetector { return simpleName; } + @SuppressWarnings({"RedundantCast", "rawtypes"}) @Override - public void detectServerPlugins() { - loadPlugin(REIServerPlugin.class, ((PluginView<REIServerPlugin>) PluginManager.getServerInstance())::registerPlugin); + public void detectCommonPlugins() { + loadPlugin((Class<? extends REICommonPlugin>) (Class) REICommonPlugin.class, PluginManager.getInstance().view()::registerPlugin); try { - PluginView.getServerInstance().registerPlugin((REIServerPlugin) Class.forName("me.shedaniel.rei.impl.common.compat.FabricFluidAPISupportPlugin").getConstructor().newInstance()); + PluginView.getInstance().registerPlugin((REICommonPlugin) Class.forName("me.shedaniel.rei.impl.common.compat.FabricFluidAPISupportPlugin").getConstructor().newInstance()); } catch (Throwable throwable) { throwable.printStackTrace(); } } - @SuppressWarnings({"RedundantCast", "rawtypes"}) - @Override - public void detectCommonPlugins() { - loadPlugin((Class<? extends REIPlugin<?>>) (Class) REIPlugin.class, ((PluginView<REIPlugin<?>>) PluginManager.getInstance())::registerPlugin); - } - @Environment(EnvType.CLIENT) @Override public Supplier<Runnable> detectClientPlugins() { return () -> () -> { - loadPlugin(REIClientPlugin.class, ((PluginView<REIClientPlugin>) PluginManager.getClientInstance())::registerPlugin); + loadPlugin(REIClientPlugin.class, PluginManager.getClientInstance().view()::registerPlugin); Supplier<Method> method = Suppliers.memoize(() -> { String methodName = FabricLoader.getInstance().isDevelopmentEnvironment() ? FabricLoader.getInstance().getMappingResolver().mapMethodName("intermediary", "net.minecraft.class_332", "method_51442", "(Ljava/util/List;Lnet/minecraft/class_5632;)V") : "method_51442"; diff --git a/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplFabric.java b/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplFabric.java index ad6bedf4b..89883f9fd 100644 --- a/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplFabric.java +++ b/fabric/src/main/java/me/shedaniel/rei/impl/client/gui/fabric/ScreenOverlayImplFabric.java @@ -34,8 +34,10 @@ import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPosition import net.minecraft.locale.Language; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.Style; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.inventory.tooltip.TooltipComponent; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.stream.Collectors; @@ -72,15 +74,15 @@ public class ScreenOverlayImplFabric extends ScreenOverlayImpl { } } } - renderTooltipInner(graphics, lines, tooltip.getX(), tooltip.getY()); + renderTooltipInner(graphics, lines, tooltip.getX(), tooltip.getY(), tooltip.getTooltipStyle()); } - public static void renderTooltipInner(GuiGraphics graphics, List<ClientTooltipComponent> lines, int mouseX, int mouseY) { + public static void renderTooltipInner(GuiGraphics graphics, List<ClientTooltipComponent> lines, int mouseX, int mouseY, @Nullable ResourceLocation tooltipStyle) { if (lines.isEmpty()) { return; } graphics.pose().pushPose(); - graphics.renderTooltipInternal(Minecraft.getInstance().font, lines, mouseX, mouseY, DefaultTooltipPositioner.INSTANCE); + graphics.renderTooltipInternal(Minecraft.getInstance().font, lines, mouseX, mouseY, DefaultTooltipPositioner.INSTANCE, tooltipStyle); graphics.pose().popPose(); } } diff --git a/fabric/src/main/java/me/shedaniel/rei/impl/common/compat/FabricFluidAPISupportPlugin.java b/fabric/src/main/java/me/shedaniel/rei/impl/common/compat/FabricFluidAPISupportPlugin.java index 4fbd24e27..930d940dd 100644 --- a/fabric/src/main/java/me/shedaniel/rei/impl/common/compat/FabricFluidAPISupportPlugin.java +++ b/fabric/src/main/java/me/shedaniel/rei/impl/common/compat/FabricFluidAPISupportPlugin.java @@ -28,7 +28,7 @@ import dev.architectury.fluid.FluidStack; import dev.architectury.hooks.fluid.fabric.FluidStackHooksFabric; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; -import me.shedaniel.rei.api.common.plugins.REIServerPlugin; +import me.shedaniel.rei.api.common.plugins.REICommonPlugin; import me.shedaniel.rei.api.common.util.EntryStacks; import net.fabricmc.fabric.api.transfer.v1.context.ContainerItemContext; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage; @@ -40,7 +40,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.StreamSupport; -public class FabricFluidAPISupportPlugin implements REIServerPlugin { +public class FabricFluidAPISupportPlugin implements REICommonPlugin { @Override public void registerFluidSupport(FluidSupportProvider support) { support.register(entry -> { diff --git a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinClientPacketListener.java b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinClientPacketListener.java index 4cff54d51..c2ba18810 100644 --- a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinClientPacketListener.java +++ b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinClientPacketListener.java @@ -28,6 +28,7 @@ import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.core.RegistryAccess; import net.minecraft.network.protocol.common.ClientboundUpdateTagsPacket; import net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket; +import net.minecraft.world.item.crafting.RecipeAccess; import net.minecraft.world.item.crafting.RecipeManager; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -38,13 +39,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientPacketListener.class) public abstract class MixinClientPacketListener { - @Shadow @Final private RecipeManager recipeManager; + @Shadow public abstract RecipeAccess recipes(); @Shadow public abstract RegistryAccess.Frozen registryAccess(); @Inject(method = "handleUpdateRecipes", at = @At("HEAD")) private void handleUpdateRecipes(ClientboundUpdateRecipesPacket clientboundUpdateRecipesPacket, CallbackInfo ci) { - RoughlyEnoughItemsCoreClient.PRE_UPDATE_RECIPES.invoker().accept(recipeManager, registryAccess()); + RoughlyEnoughItemsCoreClient.PRE_UPDATE_RECIPES.invoker().accept(recipes(), registryAccess()); } @Inject(method = "handleUpdateTags", at = @At("HEAD")) diff --git a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinEffectRenderingInventoryScreen.java b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinEffectsInInventory.java index d4909d391..fefbec21f 100644 --- a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinEffectRenderingInventoryScreen.java +++ b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinEffectsInInventory.java @@ -25,20 +25,19 @@ package me.shedaniel.rei.mixin.fabric; import me.shedaniel.rei.api.client.config.ConfigObject; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.gui.screens.inventory.EffectRenderingInventoryScreen; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.client.gui.screens.inventory.EffectsInInventory; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -@Mixin(EffectRenderingInventoryScreen.class) -public abstract class MixinEffectRenderingInventoryScreen extends AbstractContainerScreen<AbstractContainerMenu> { - public MixinEffectRenderingInventoryScreen(AbstractContainerMenu menu, Inventory inventory, Component component) { - super(menu, inventory, component); - } +@Mixin(EffectsInInventory.class) +public abstract class MixinEffectsInInventory { + @Shadow + @Final + private AbstractContainerScreen<?> screen; @Unique private boolean leftSideEffects() { @@ -46,19 +45,19 @@ public abstract class MixinEffectRenderingInventoryScreen extends AbstractContai } @ModifyVariable(method = "renderEffects", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getActiveEffects()Ljava/util/Collection;", ordinal = 0), - ordinal = 2) // 3rd int + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getActiveEffects()Ljava/util/Collection;", ordinal = 0), + ordinal = 2) // 3rd int public int modifyK(int k) { if (!leftSideEffects()) return k; - boolean bl = this.leftPos >= 120; - return bl ? this.leftPos - 120 - 4 : this.leftPos - 32 - 4; + boolean bl = this.screen.leftPos >= 120; + return bl ? this.screen.leftPos - 120 - 4 : this.screen.leftPos - 32 - 4; } @ModifyVariable(method = "renderEffects", - at = @At(value = "INVOKE", target = "Lcom/google/common/collect/Ordering;sortedCopy(Ljava/lang/Iterable;)Ljava/util/List;", ordinal = 0), - ordinal = 0) // 1st bool + at = @At(value = "INVOKE", target = "Lcom/google/common/collect/Ordering;sortedCopy(Ljava/lang/Iterable;)Ljava/util/List;", ordinal = 0), + ordinal = 0) // 1st bool public boolean modifyBl(boolean bl) { if (!leftSideEffects()) return bl; - return this.leftPos >= 120; + return this.screen.leftPos >= 120; } } diff --git a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinRecipeToast.java b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinRecipeToast.java index fd8a6a12c..8c462b86d 100644 --- a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinRecipeToast.java +++ b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinRecipeToast.java @@ -25,8 +25,8 @@ package me.shedaniel.rei.mixin.fabric; import me.shedaniel.rei.api.client.config.ConfigObject; import net.minecraft.client.gui.components.toasts.RecipeToast; -import net.minecraft.client.gui.components.toasts.ToastComponent; -import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.client.gui.components.toasts.ToastManager; +import net.minecraft.world.item.crafting.display.RecipeDisplay; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -36,7 +36,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(RecipeToast.class) public class MixinRecipeToast { @Inject(method = "addOrUpdate", at = @At("HEAD"), cancellable = true) - private static void addOrUpdate(ToastComponent toastGui, RecipeHolder<?> recipe, CallbackInfo info) { + private static void addOrUpdate(ToastManager toastManager, RecipeDisplay recipeDisplay, CallbackInfo info) { if (disableRecipeBook()) info.cancel(); } diff --git a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java index 05b0fa9f8..8255b633a 100644 --- a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java +++ b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java @@ -33,8 +33,10 @@ import me.shedaniel.rei.impl.common.InternalLogger; import me.shedaniel.rei.plugin.common.displays.tag.TagNodes; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.tags.TagEntry; import net.minecraft.tags.TagLoader; import org.spongepowered.asm.mixin.Final; @@ -48,7 +50,15 @@ import java.util.*; @Mixin(TagLoader.class) public class MixinTagLoader<T> { - @Shadow @Final private String directory; + @Shadow + @Final + private String directory; + + @Inject(method = "loadPendingTags", at = @At("HEAD")) + private static <T> void loadPendingTags(ResourceManager resourceManager, Registry<T> registry, CallbackInfoReturnable<Optional<Registry.PendingTags<T>>> cir) { + ResourceKey<? extends Registry<T>> resourceKey = registry.key(); + TagNodes.TAG_DIR_MAP.put(Registries.tagsDirPath(resourceKey), resourceKey); + } @Inject(method = "build(Ljava/util/Map;)Ljava/util/Map;", at = @At("HEAD")) private void load(Map<ResourceLocation, TagLoader.EntryWithSource> map, CallbackInfoReturnable<Map<ResourceLocation, Collection<T>>> cir) { @@ -67,7 +77,7 @@ public class MixinTagLoader<T> { TagNodes.TAG_DATA_MAP.put(resourceKey, new HashMap<>()); Map<ResourceLocation, TagNodes.TagData> tagDataMap = TagNodes.TAG_DATA_MAP.get(resourceKey); if (tagDataMap == null) return; - Registry<T> registry = ((Registry<Registry<T>>) BuiltInRegistries.REGISTRY).get((ResourceKey<Registry<T>>) resourceKey); + Registry<T> registry = ((Registry<Registry<T>>) BuiltInRegistries.REGISTRY).getValue((ResourceKey<Registry<T>>) resourceKey); Stopwatch stopwatch = Stopwatch.createStarted(); Iterator<Map.Entry<TagNodes.CollectionWrapper<?>, TagNodes.RawTagData>> entryIterator = TagNodes.RAW_TAG_DATA_MAP.getOrDefault(directory, Reference2ObjectMaps.emptyMap()) @@ -87,7 +97,7 @@ public class MixinTagLoader<T> { TagNodes.RawTagData rawTagData = entry.getValue(); IntList elements = new IntArrayList(); for (ResourceLocation element : rawTagData.otherElements()) { - T t = registry.get(element); + T t = registry.getValue(element); if (t != null) { elements.add(registry.getId(t)); } @@ -100,7 +110,7 @@ public class MixinTagLoader<T> { InternalLogger.getInstance().debug("Processed %d tags in %s for %s", tagDataMap.size(), stopwatch.stop(), resourceKey.location()); } - @Inject(method = "build(Lnet/minecraft/tags/TagEntry$Lookup;Ljava/util/List;)Lcom/mojang/datafixers/util/Either;", at = @At("RETURN")) + @Inject(method = "tryBuildTag", at = @At("RETURN")) private void load(TagEntry.Lookup<T> lookup, List<TagLoader.EntryWithSource> entries, CallbackInfoReturnable<Either<Collection<TagLoader.EntryWithSource>, Collection<T>>> cir) { Collection<T> tag = cir.getReturnValue().right().orElse(null); if (tag != null) { @@ -121,7 +131,7 @@ public class MixinTagLoader<T> { otherTags.add(entry.id); } } else { - T apply = lookup.element(entry.id); + T apply = lookup.element(entry.id, entry.required); if (apply != null) { otherElements.add(entry.id); } diff --git a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagManager.java b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagManager.java deleted file mode 100644 index c87b2073e..000000000 --- a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagManager.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is licensed under the MIT License, part of Roughly Enough Items. - * Copyright (c) 2018, 2019, 2020, 2021, 2022, 2023 shedaniel - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package me.shedaniel.rei.mixin.fabric; - -import me.shedaniel.rei.plugin.common.displays.tag.TagNodes; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.tags.TagManager; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; - -@Mixin(TagManager.class) -public abstract class MixinTagManager<T> { - @Inject(method = "createLoader", at = @At("HEAD")) - private void load(ResourceManager resourceManager, Executor executor, RegistryAccess.RegistryEntry<T> registryEntry, CallbackInfoReturnable<CompletableFuture<TagManager.LoadResult<T>>> cir) { - ResourceKey<? extends Registry<T>> resourceKey = registryEntry.key(); - TagNodes.TAG_DIR_MAP.put(Registries.tagsDirPath(resourceKey), resourceKey); - } -} diff --git a/fabric/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/fabric/DefaultCraftingDisplayImpl.java b/fabric/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/fabric/DefaultCraftingDisplayImpl.java deleted file mode 100644 index d985dc64d..000000000 --- a/fabric/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/fabric/DefaultCraftingDisplayImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is licensed under the MIT License, part of Roughly Enough Items. - * Copyright (c) 2018, 2019, 2020, 2021, 2022, 2023 shedaniel - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package me.shedaniel.rei.plugin.common.displays.crafting.fabric; - -public class DefaultCraftingDisplayImpl { - public static void registerPlatformSizeProvider() { - } -} |
