aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-11-05 01:34:31 +0800
committershedaniel <daniel@shedaniel.me>2021-11-05 01:34:31 +0800
commit94ff6aac084cfba2ce7eab00da76b7fe2992e657 (patch)
tree99905bcb0501ebe1a1a9b2f6a8b5dffe53baf75b
parent23e81b494b73f74c416ec3cf2147e6520608a258 (diff)
parent987ee5269a9bc61b9ab4d07ea0986629b1421964 (diff)
downloadRoughlyEnoughItems-94ff6aac084cfba2ce7eab00da76b7fe2992e657.tar.gz
RoughlyEnoughItems-94ff6aac084cfba2ce7eab00da76b7fe2992e657.tar.bz2
RoughlyEnoughItems-94ff6aac084cfba2ce7eab00da76b7fe2992e657.zip
Merge branch '6.x-1.17' into 7.x-1.18
# Conflicts: # gradle.properties
-rw-r--r--api/build.gradle5
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayCategory.java24
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java20
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/display/Display.java23
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/display/DisplayMerger.java30
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java4
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoProvider.java40
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoRegistry.java16
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationContext.java5
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationProviderContext.java43
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/display/DisplaySpec.java39
-rwxr-xr-xbuild.gradle2
-rw-r--r--default-plugin/build.gradle7
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java19
-rw-r--r--fabric/build.gradle4
-rw-r--r--forge/build.gradle24
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java2
-rw-r--r--gradle.properties4
-rw-r--r--runtime/build.gradle7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java21
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java149
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java16
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java28
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java2
-rwxr-xr-xruntime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json1
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/he_il.json10
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/zh_cn.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/zh_tw.json2
37 files changed, 511 insertions, 124 deletions
diff --git a/api/build.gradle b/api/build.gradle
index a38d48176..7939ee6a5 100644
--- a/api/build.gradle
+++ b/api/build.gradle
@@ -14,10 +14,6 @@ remapJar {
remapAccessWidener = false
}
-configurations {
- dev
-}
-
remapJar {
classifier "raw"
}
@@ -31,7 +27,6 @@ task fakeJar(type: Jar, dependsOn: remapJar) {
}
artifacts {
- dev(jar)
apiElements(fakeJar)
runtimeElements(fakeJar)
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java b/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java
index 791d2cd39..20165ffc1 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java
@@ -111,6 +111,8 @@ public interface ConfigObject {
boolean doDebugRenderTimeRequired();
+ boolean doMergeDisplayUnderOne();
+
ModifierKeyCode getFavoriteKeyCode();
ModifierKeyCode getRecipeKeybind();
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayCategory.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayCategory.java
index 5be94aa76..9202a18ca 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayCategory.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayCategory.java
@@ -31,12 +31,14 @@ import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
+import me.shedaniel.rei.api.common.display.DisplayMerger;
import me.shedaniel.rei.api.common.util.Identifiable;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
@@ -119,6 +121,28 @@ public interface DisplayCategory<T extends Display> extends Identifiable {
CategoryIdentifier<? extends T> getCategoryIdentifier();
+ @Nullable
+ default DisplayMerger<T> getDisplayMerger() {
+ return null;
+ }
+
+ static <T extends Display> DisplayMerger<T> getContentMerger() {
+ return new DisplayMerger<T>() {
+ @Override
+ public boolean canMerge(T first, T second) {
+ if (!first.getCategoryIdentifier().equals(second.getCategoryIdentifier())) return false;
+ if (!first.getInputEntries().equals(second.getInputEntries())) return false;
+ if (!first.getOutputEntries().equals(second.getOutputEntries())) return false;
+ return true;
+ }
+
+ @Override
+ public int hashOf(T display) {
+ return display.getCategoryIdentifier().hashCode() * 31 * 31 * 31 + display.getInputEntries().hashCode() * 31 * 31 + display.getOutputEntries().hashCode();
+ }
+ };
+ }
+
@Override
default ResourceLocation getIdentifier() {
return getCategoryIdentifier().getIdentifier();
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java b/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java
index 589970db9..9b8a7582c 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java
@@ -31,12 +31,11 @@ import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.CollectionUtils;
import me.shedaniel.rei.impl.ClientInternals;
+import me.shedaniel.rei.impl.display.DisplaySpec;
+import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
public interface ViewSearchBuilder {
static ViewSearchBuilder builder() {
@@ -66,7 +65,18 @@ public interface ViewSearchBuilder {
@Nullable
CategoryIdentifier<?> getPreferredOpenedCategory();
- Map<DisplayCategory<?>, List<Display>> buildMap();
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval
+ default Map<DisplayCategory<?>, List<Display>> buildMap() {
+ Map<DisplayCategory<?>, List<Display>> map = new HashMap<>();
+ for (Map.Entry<DisplayCategory<?>, List<DisplaySpec>> entry : buildMapInternal().entrySet()) {
+ map.put(entry.getKey(), CollectionUtils.map(entry.getValue(), DisplaySpec::provideInternalDisplay));
+ }
+ return map;
+ }
+
+ @ApiStatus.Internal
+ Map<DisplayCategory<?>, List<DisplaySpec>> buildMapInternal();
default boolean open() {
return ClientHelper.getInstance().openView(this);
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java b/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java
index 14db33133..1ee2515e3 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java
@@ -25,8 +25,12 @@ package me.shedaniel.rei.api.common.display;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.entry.EntryIngredient;
+import me.shedaniel.rei.impl.display.DisplaySpec;
import net.minecraft.resources.ResourceLocation;
+import org.jetbrains.annotations.ApiStatus;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -37,7 +41,7 @@ import java.util.Optional;
* @see me.shedaniel.rei.api.common.display.basic.BasicDisplay
* @see me.shedaniel.rei.api.client.registry.display.DisplayRegistry
*/
-public interface Display {
+public interface Display extends DisplaySpec {
/**
* @return a list of inputs
*/
@@ -72,4 +76,21 @@ public interface Display {
default Optional<ResourceLocation> getDisplayLocation() {
return Optional.empty();
}
+
+ @Override
+ @ApiStatus.NonExtendable
+ default Display provideInternalDisplay() {
+ return this;
+ }
+
+ @Override
+ @ApiStatus.NonExtendable
+ default Collection<ResourceLocation> provideInternalDisplayIds() {
+ Optional<ResourceLocation> location = getDisplayLocation();
+ if (location.isPresent()) {
+ return Collections.singletonList(location.get());
+ } else {
+ return Collections.emptyList();
+ }
+ }
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/DisplayMerger.java b/api/src/main/java/me/shedaniel/rei/api/common/display/DisplayMerger.java
new file mode 100644
index 000000000..e13e24cc1
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/common/display/DisplayMerger.java
@@ -0,0 +1,30 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021 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.api.common.display;
+
+public interface DisplayMerger<T extends Display> {
+ boolean canMerge(T first, T second);
+
+ int hashOf(T display);
+}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java
index 313ab23de..b5ed1de67 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java
@@ -34,6 +34,8 @@ import me.shedaniel.rei.api.common.transfer.info.clean.InputCleanHandler;
import me.shedaniel.rei.api.common.transfer.info.simple.SimplePlayerInventoryMenuInfo;
import me.shedaniel.rei.api.common.transfer.info.stack.SlotAccessor;
import me.shedaniel.rei.api.common.util.CollectionUtils;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.inventory.AbstractContainerMenu;
@@ -109,6 +111,7 @@ public interface MenuInfo<T extends AbstractContainerMenu, D extends Display> ex
* @throws MenuTransferException the exception to throw if something is wrong,
* this exception should be caught by the invoker
*/
+ @Environment(EnvType.CLIENT)
default void validate(MenuInfoContext<T, ?, D> context) throws MenuTransferException {
}
@@ -133,6 +136,7 @@ public interface MenuInfo<T extends AbstractContainerMenu, D extends Display> ex
* @return the {@link CompoundTag} serialized
*/
default CompoundTag save(MenuSerializationContext<T, ?, D> context, D display) {
+ // TODO Remove this, replace with getDisplay()
return DisplaySerializerRegistry.getInstance().save(display, new CompoundTag());
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoProvider.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoProvider.java
index 393a6cab6..904c59dd4 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoProvider.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoProvider.java
@@ -25,7 +25,12 @@ package me.shedaniel.rei.api.common.transfer.info;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
+import org.jetbrains.annotations.ApiStatus;
import java.util.Optional;
@@ -37,5 +42,40 @@ import java.util.Optional;
*/
@FunctionalInterface
public interface MenuInfoProvider<T extends AbstractContainerMenu, D extends Display> {
+ @Environment(EnvType.CLIENT)
+ default Optional<MenuInfo<T, D>> provideClient(D display, T menu) {
+ return provide((CategoryIdentifier<D>) display.getCategoryIdentifier(), (Class<T>) menu.getClass());
+ }
+
+ default Optional<MenuInfo<T, D>> provide(CategoryIdentifier<D> display, T menu, MenuSerializationProviderContext<T, ?, D> context, CompoundTag networkTag) {
+ Optional<MenuInfo<T, D>> menuInfo = provide(display, (Class<T>) menu.getClass());
+ if (menuInfo.isPresent()) {
+ menuInfo.get().read(new MenuSerializationContext<T, Player, D>() {
+ @Override
+ public MenuInfo<T, D> getContainerInfo() {
+ return menuInfo.get();
+ }
+
+ @Override
+ public T getMenu() {
+ return context.getMenu();
+ }
+
+ @Override
+ public Player getPlayerEntity() {
+ return context.getPlayerEntity();
+ }
+
+ @Override
+ public CategoryIdentifier<D> getCategoryIdentifier() {
+ return context.getCategoryIdentifier();
+ }
+ }, networkTag);
+ }
+ return menuInfo;
+ }
+
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval
Optional<MenuInfo<T, D>> provide(CategoryIdentifier<D> categoryId, Class<T> menuClass);
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoRegistry.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoRegistry.java
index bd1b14ff6..fdb83fb30 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoRegistry.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfoRegistry.java
@@ -28,7 +28,11 @@ import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.api.common.plugins.PluginManager;
import me.shedaniel.rei.api.common.plugins.REIServerPlugin;
import me.shedaniel.rei.api.common.registry.Reloadable;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.inventory.AbstractContainerMenu;
+import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import java.util.function.Predicate;
@@ -45,7 +49,17 @@ public interface MenuInfoRegistry extends Reloadable<REIServerPlugin> {
<D extends Display> void registerGeneric(Predicate<CategoryIdentifier<?>> categoryPredicate, MenuInfoProvider<?, D> menuInfo);
- @Nullable <C extends AbstractContainerMenu, D extends Display> MenuInfo<C, D> get(CategoryIdentifier<D> category, Class<C> menuClass);
+ @Nullable
+ @ApiStatus.ScheduledForRemoval
+ @Deprecated
+ <C extends AbstractContainerMenu, D extends Display> MenuInfo<C, D> get(CategoryIdentifier<D> category, Class<C> menuClass);
+
+ @Nullable
+ @Environment(EnvType.CLIENT)
+ <C extends AbstractContainerMenu, D extends Display> MenuInfo<C, D> getClient(D display, C menu);
+
+ @Nullable
+ <C extends AbstractContainerMenu, D extends Display> MenuInfo<C, D> get(CategoryIdentifier<D> category, C menu, MenuSerializationProviderContext<C, ?, D> context, CompoundTag tag);
int infoSize();
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationContext.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationContext.java
index 7a335c064..b3ed73d5f 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationContext.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationContext.java
@@ -34,12 +34,15 @@ import net.minecraft.world.inventory.AbstractContainerMenu;
* @param <T> the type of {@link AbstractContainerMenu}
* @param <P> the type of {@link Player}, server sided contexts may pass {@link net.minecraft.server.level.ServerPlayer} instead
*/
-public interface MenuSerializationContext<T extends AbstractContainerMenu, P extends Player, D extends Display> {
+public interface MenuSerializationContext<T extends AbstractContainerMenu, P extends Player, D extends Display> extends MenuSerializationProviderContext<T, P, D> {
+ @Override
T getMenu();
+ @Override
P getPlayerEntity();
MenuInfo<T, D> getContainerInfo();
+ @Override
CategoryIdentifier<D> getCategoryIdentifier();
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationProviderContext.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationProviderContext.java
new file mode 100644
index 000000000..19a8cb78a
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuSerializationProviderContext.java
@@ -0,0 +1,43 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021 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.api.common.transfer.info;
+
+import me.shedaniel.rei.api.common.category.CategoryIdentifier;
+import me.shedaniel.rei.api.common.display.Display;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+
+/**
+ * Context for menu display serialization.
+ *
+ * @param <T> the type of {@link AbstractContainerMenu}
+ * @param <P> the type of {@link Player}, server sided contexts may pass {@link net.minecraft.server.level.ServerPlayer} instead
+ */
+public interface MenuSerializationProviderContext<T extends AbstractContainerMenu, P extends Player, D extends Display> {
+ T getMenu();
+
+ P getPlayerEntity();
+
+ CategoryIdentifier<D> getCategoryIdentifier();
+}
diff --git a/api/src/main/java/me/shedaniel/rei/impl/display/DisplaySpec.java b/api/src/main/java/me/shedaniel/rei/impl/display/DisplaySpec.java
new file mode 100644
index 000000000..399386a32
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/impl/display/DisplaySpec.java
@@ -0,0 +1,39 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021 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.impl.display;
+
+import me.shedaniel.rei.api.common.display.Display;
+import net.minecraft.resources.ResourceLocation;
+import org.jetbrains.annotations.ApiStatus;
+
+import java.util.Collection;
+
+@ApiStatus.Internal
+public interface DisplaySpec {
+ @ApiStatus.Internal
+ Display provideInternalDisplay();
+
+ @ApiStatus.Internal
+ Collection<ResourceLocation> provideInternalDisplayIds();
+}
diff --git a/build.gradle b/build.gradle
index 63f4c7076..1b8fa08a5 100755
--- a/build.gradle
+++ b/build.gradle
@@ -12,7 +12,7 @@ import java.text.SimpleDateFormat
archivesBaseName = "RoughlyEnoughItems"
def runNumber = System.getenv("GITHUB_RUN_NUMBER") ?: "9999"
-version = rootProject.base_version + "." + runNumber + "-alpha"
+version = rootProject.base_version + "." + runNumber + (rootProject.unstable ? "-alpha" : "")
group = "me.shedaniel"
diff --git a/default-plugin/build.gradle b/default-plugin/build.gradle
index c22da8b91..3daaef18c 100644
--- a/default-plugin/build.gradle
+++ b/default-plugin/build.gradle
@@ -8,7 +8,7 @@ dependencies {
modCompileOnly("net.fabricmc:fabric-loader:${project.fabricloader_version}")
modApi("me.shedaniel.cloth:cloth-config:${cloth_config_version}")
modApi("dev.architectury:architectury:${architectury_version}")
- compileClasspath(project(path: ":api", configuration: "dev"))
+ compileClasspath(project(path: ":api", configuration: "namedElements"))
}
architectury {
@@ -19,10 +19,6 @@ remapJar {
remapAccessWidener = false
}
-configurations {
- dev
-}
-
remapJar {
classifier "raw"
}
@@ -36,7 +32,6 @@ task fakeJar(type: Jar, dependsOn: remapJar) {
}
artifacts {
- dev(jar)
apiElements(fakeJar)
runtimeElements(fakeJar)
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java
index 32bec42b1..fdedcff29 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java
@@ -32,8 +32,10 @@ import me.shedaniel.rei.api.client.gui.Renderer;
import me.shedaniel.rei.api.client.gui.widgets.Slot;
import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
+import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
+import me.shedaniel.rei.api.common.display.DisplayMerger;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.EntryStacks;
import me.shedaniel.rei.plugin.common.BuiltinPlugin;
@@ -44,13 +46,14 @@ import net.fabricmc.api.Environment;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;