aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableBoundsProvider.java70
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStack.java49
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProvider.java15
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProviderWidget.java11
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackVisitor.java49
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackVisitorWidget.java20
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggingContext.java69
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/component/DraggableComponent.java83
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/component/DraggableComponentProvider.java84
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/component/DraggableComponentProviderWidget.java74
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/component/DraggableComponentVisitor.java115
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/drag/component/DraggableComponentVisitorWidget.java110
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/DelegateWidgetWithBounds.java15
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widgets.java3
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/registry/category/CategoryRegistry.java2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ScreenRegistry.java32
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/util/CollectionUtils.java9
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java15
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultCompostingCategory.java13
-rw-r--r--forge/build.gradle8
-rw-r--r--gradle.properties4
-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/config/entries/FilteringScreen.java95
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/RecipeDisplayExporter.java23
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java99
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java87
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/AutoCraftingEvaluator.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java170
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java61
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java45
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/ArrowWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/BurningFireWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/PanelWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java22
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java66
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java152
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java365
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FadingFavoritesPanelButton.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FavoritesPanel.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/rows/FavoritesPanelEntriesRow.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/trash/TrashWidget.java41
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RegionListener.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RegionRenderingDebugger.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/category/CategoryRegistryImpl.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ScreenRegistryImpl.java58
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java11
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/util/RectangleUtils.java52
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java12
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/cs_cz.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/de_de.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/en_ud.json2
-rwxr-xr-xruntime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json6
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/es_es.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/et_ee.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/fr_fr.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/it_it.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/ja_jp.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/ko_kr.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/lol_us.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/pl_pl.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/pt_br.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/pt_pt.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/ru_ru.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/tr_tr.json2
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/uk_ua.json2
-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
73 files changed, 2066 insertions, 291 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableBoundsProvider.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableBoundsProvider.java
new file mode 100644
index 000000000..c6d1a35cf
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableBoundsProvider.java
@@ -0,0 +1,70 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021, 2022 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.client.gui.drag;
+
+import me.shedaniel.math.Rectangle;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.VoxelShape;
+
+import java.util.stream.StreamSupport;
+
+@FunctionalInterface
+public interface DraggableBoundsProvider {
+ static VoxelShape fromRectangle(Rectangle bounds) {
+ return Shapes.box(bounds.x, bounds.y, 0, bounds.getMaxX(), bounds.getMaxY(), 0.1);
+ }
+
+ static DraggableBoundsProvider ofRectangle(Rectangle bounds) {
+ return ofShape(fromRectangle(bounds));
+ }
+
+ static DraggableBoundsProvider ofRectangles(Iterable<Rectangle> bounds) {
+ VoxelShape shape = StreamSupport.stream(bounds.spliterator(), false)
+ .map(DraggableBoundsProvider::fromRectangle)
+ .reduce(Shapes.empty(), Shapes::or);
+ return ofShape(shape);
+ }
+
+ static DraggableBoundsProvider ofShape(VoxelShape shape) {
+ return () -> shape;
+ }
+
+ static DraggableBoundsProvider ofShapes(Iterable<VoxelShape> shapes) {
+ VoxelShape shape = StreamSupport.stream(shapes.spliterator(), false)
+ .reduce(Shapes.empty(), Shapes::or);
+ return ofShape(shape);
+ }
+
+ static DraggableBoundsProvider empty() {
+ return Shapes::empty;
+ }
+
+ static DraggableBoundsProvider concat(Iterable<DraggableBoundsProvider> providers) {
+ return () -> StreamSupport.stream(providers.spliterator(), false)
+ .map(DraggableBoundsProvider::bounds)
+ .reduce(Shapes.empty(), Shapes::or);
+ }
+
+ VoxelShape bounds();
+}
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStack.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStack.java
index dc3311055..713347743 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStack.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStack.java
@@ -24,17 +24,64 @@
package me.shedaniel.rei.api.client.gui.drag;
import com.mojang.blaze3d.vertex.PoseStack;
+import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponent;
import me.shedaniel.rei.api.common.entry.EntryStack;
-public interface DraggableStack {
+public interface DraggableStack extends DraggableComponent<EntryStack<?>> {
+ static DraggableStack from(DraggableComponent<EntryStack<?>> component) {
+ return component instanceof DraggableStack ? (DraggableStack) component : new DraggableStack() {
+ @Override
+ public EntryStack<?> getStack() {
+ return component.get();
+ }
+
+ @Override
+ public void drag() {
+ component.drag();
+ }
+
+ @Override
+ public void release(DraggedAcceptorResult result) {
+ component.release(result);
+ }
+
+ @Override
+ public void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
+ component.render(matrices, bounds, mouseX, mouseY, delta);
+ }
+
+ @Override
+ public void render(PoseStack matrices, Point position, int mouseX, int mouseY, float delta) {
+ component.render(matrices, position, mouseX, mouseY, delta);
+ }
+ };
+ }
+
EntryStack<?> getStack();
+ @Override
+ default EntryStack<?> get() {
+ return getStack();
+ }
+
void drag();
+ @Override
+ default int getWidth() {
+ return 18;
+ }
+
+ @Override
+ default int getHeight() {
+ return 18;
+ }
+
default void release(DraggedAcceptorResult result) {
}
+ @Override
default void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
getStack().render(matrices, bounds, mouseX, mouseY, delta);
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProvider.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProvider.java
index 57569b405..e11805d0a 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProvider.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProvider.java
@@ -23,6 +23,9 @@
package me.shedaniel.rei.api.client.gui.drag;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponent;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponentProvider;
+import me.shedaniel.rei.api.common.entry.EntryStack;
import net.minecraft.client.gui.screens.Screen;
import org.jetbrains.annotations.Nullable;
@@ -31,7 +34,7 @@ import java.util.function.Supplier;
/**
* A provider for supplying {@link DraggableStack} to the screen.
*/
-public interface DraggableStackProvider<T extends Screen> extends Comparable<DraggableStackProvider<T>> {
+public interface DraggableStackProvider<T extends Screen> extends DraggableComponentProvider<T, EntryStack<?>> {
static <T extends Screen> DraggableStackProvider<T> from(Supplier<Iterable<DraggableStackProvider<T>>> providers) {
return new DraggableStackProvider<T>() {
@Override
@@ -61,8 +64,16 @@ public interface DraggableStackProvider<T extends Screen> extends Comparable<Dra
@Nullable
DraggableStack getHoveredStack(DraggingContext<T> context, double mouseX, double mouseY);
+ @Override
+ @Nullable
+ default DraggableComponent<EntryStack<?>> getHovered(DraggingContext<T> context, double mouseX, double mouseY) {
+ return getHoveredStack(context, mouseX, mouseY);
+ }
+
+ @Override
<R extends Screen> boolean isHandingScreen(R screen);
+ @Override
default DraggingContext<T> getContext() {
return DraggingContext.getInstance().cast();
}
@@ -72,11 +83,11 @@ public interface DraggableStackProvider<T extends Screen> extends Comparable<Dra
*
* @return the priority
*/
+ @Override
default double getPriority() {
return 0f;
}
- @Override
default int compareTo(DraggableStackProvider<T> o) {
return Double.compare(getPriority(), o.getPriority());
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProviderWidget.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProviderWidget.java
index 29d375118..d0ae7227c 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProviderWidget.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackProviderWidget.java
@@ -23,6 +23,9 @@
package me.shedaniel.rei.api.client.gui.drag;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponent;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponentProviderWidget;
+import me.shedaniel.rei.api.common.entry.EntryStack;
import net.minecraft.client.gui.screens.Screen;
import org.jetbrains.annotations.Nullable;
@@ -33,7 +36,7 @@ import java.util.function.Function;
* {@link DraggableStack}.
*/
@FunctionalInterface
-public interface DraggableStackProviderWidget {
+public interface DraggableStackProviderWidget extends DraggableComponentProviderWidget<EntryStack<?>> {
static DraggableStackProviderWidget from(Function<DraggingContext<Screen>, Iterable<DraggableStackProviderWidget>> providers) {
return (context, mouseX, mouseY) -> {
for (DraggableStackProviderWidget provider : providers.apply(context)) {
@@ -47,6 +50,12 @@ public interface DraggableStackProviderWidget {
@Nullable
DraggableStack getHoveredStack(DraggingContext<Screen> context, double mouseX, double mouseY);
+ @Override
+ @Nullable
+ default DraggableComponent<EntryStack<?>> getHovered(DraggingContext<Screen> context, double mouseX, double mouseY) {
+ return getHoveredStack(context, mouseX, mouseY);
+ }
+
static DraggableStackProvider<Screen> toProvider(DraggableStackProviderWidget widget) {
return toProvider(widget, 0D);
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackVisitor.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackVisitor.java
index 8b8f9c220..dfbf5d69b 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackVisitor.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggableStackVisitor.java
@@ -24,11 +24,16 @@
package me.shedaniel.rei.api.client.gui.drag;
import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponent;
+import me.shedaniel.rei.api.client.gui.drag.component.DraggableComponentVisitor;
+import me.shedaniel.rei.api.common.entry.EntryStack;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
+import java.util.List;
import java.util.Objects;
+import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
@@ -36,7 +41,7 @@ import java.util.stream.StreamSupport;
/**
* A visitor for accepting {@link DraggableStack} to the screen.
*/
-public interface DraggableStackVisitor<T extends Screen> extends Comparable<DraggableStackVisitor<T>> {
+public interface DraggableStackVisitor<T extends Screen> extends DraggableComponentVisitor<T> {
static <T extends Screen> DraggableStackVisitor<T> from(Supplier<Iterable<DraggableStackVisitor<T>>> visitors) {
return new DraggableStackVisitor<T>() {
@Override
@@ -81,6 +86,13 @@ public interface DraggableStackVisitor<T extends Screen> extends Comparable<Drag
return DraggedAcceptorResult.PASS;
}
+ @Override
+ default DraggedAcceptorResult acceptDragged(DraggingContext<T> context, DraggableComponent<?> component) {
+ return component.<EntryStack<?>>getIf()
+ .map(comp -> acceptDraggedStack(context, DraggableStack.from(comp)))
+ .orElse(DraggedAcceptorResult.PASS);
+ }
+