aboutsummaryrefslogtreecommitdiff
path: root/api/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/main/java')
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/REIOverlay.java3
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStack.java17
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackProvider.java21
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackVisitor.java23
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggingContext.java25
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java1
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java7
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java1
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java8
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java21
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java8
12 files changed, 129 insertions, 8 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java b/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java
index 24eaf15bd..c9dc4c16e 100644
--- a/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java
+++ b/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java
@@ -23,9 +23,12 @@
package me.shedaniel.rei.api;
+import me.shedaniel.rei.api.gui.drag.DraggingContext;
import org.jetbrains.annotations.ApiStatus;
@ApiStatus.Experimental
public interface REIOverlay {
void queueReloadOverlay();
+
+ DraggingContext getDraggingContext();
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStack.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStack.java
new file mode 100644
index 000000000..8d38fb4c8
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStack.java
@@ -0,0 +1,17 @@
+package me.shedaniel.rei.api.gui.drag;
+
+import com.mojang.blaze3d.vertex.PoseStack;
+import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.ingredient.EntryStack;
+
+public interface DraggableStack {
+ EntryStack<?> getStack();
+
+ void drag();
+
+ void release(boolean accepted);
+
+ default void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
+ getStack().render(matrices, bounds, mouseX, mouseY, delta);
+ }
+} \ No newline at end of file
diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackProvider.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackProvider.java
new file mode 100644
index 000000000..7b799b26a
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackProvider.java
@@ -0,0 +1,21 @@
+package me.shedaniel.rei.api.gui.drag;
+
+import org.jetbrains.annotations.Nullable;
+
+import java.util.function.Supplier;
+
+@FunctionalInterface
+public interface DraggableStackProvider {
+ static DraggableStackProvider from(Supplier<Iterable<DraggableStackProvider>> providers) {
+ return (context, mouseX, mouseY) -> {
+ for (DraggableStackProvider provider : providers.get()) {
+ DraggableStack stack = provider.getHoveredStack(context, mouseX, mouseY);
+ if (stack != null) return stack;
+ }
+ return null;
+ };
+ }
+
+ @Nullable
+ DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY);
+} \ No newline at end of file
diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackVisitor.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackVisitor.java
new file mode 100644
index 000000000..e0e64bf9a
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackVisitor.java
@@ -0,0 +1,23 @@
+package me.shedaniel.rei.api.gui.drag;
+
+import java.util.Optional;
+import java.util.function.Supplier;
+
+@FunctionalInterface
+public interface DraggableStackVisitor {
+ static DraggableStackVisitor from(Supplier<Iterable<DraggableStackVisitor>> visitors) {
+ return (stack) -> {
+ for (DraggableStackVisitor visitor : visitors.get()) {
+ Optional<Acceptor> acceptor = visitor.visitDraggedStack(stack);
+ if (acceptor.isPresent()) return acceptor;
+ }
+ return Optional.empty();
+ };
+ }
+
+ Optional<Acceptor> visitDraggedStack(DraggableStack stack);
+
+ interface Acceptor {
+ void accept(DraggableStack stack);
+ }
+}
diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggingContext.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggingContext.java
new file mode 100644
index 000000000..cd9bc3a32
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggingContext.java
@@ -0,0 +1,25 @@
+package me.shedaniel.rei.api.gui.drag;
+
+import me.shedaniel.math.Point;
+import me.shedaniel.rei.api.REIHelper;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.function.Supplier;
+
+public interface DraggingContext {
+ static DraggingContext getInstance() {
+ return REIHelper.getInstance().getOverlay().get().getDraggingContext();
+ }
+
+ default boolean isDraggingStack() {
+ return getCurrentStack() != null;
+ }
+
+ @Nullable
+ DraggableStack getCurrentStack();
+
+ @Nullable
+ Point getCurrentPosition();
+
+ void registerRenderBackToPosition(DraggableStack stack, Supplier<Point> position);
+}
diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java
index abe4454ae..ddb4d0d26 100644
--- a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java
+++ b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java
@@ -75,6 +75,7 @@ public abstract class Widget extends AbstractContainerEventHandler implements ne
}
@Override
+ @Deprecated
public void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
render(matrices, mouseX, mouseY, delta);
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java
index 17b178bb3..b427d8a47 100644
--- a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java
+++ b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java
@@ -27,7 +27,6 @@ import me.shedaniel.math.Rectangle;
import org.jetbrains.annotations.NotNull;
public abstract class WidgetWithBounds extends Widget {
-
@NotNull
public abstract Rectangle getBounds();
@@ -35,5 +34,4 @@ public abstract class WidgetWithBounds extends Widget {
public boolean containsMouse(double mouseX, double mouseY) {
return getBounds().contains(mouseX, mouseY);
}
-
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java
index 913dded0d..9e62eb9a1 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java
@@ -29,11 +29,11 @@ import com.mojang.serialization.Dynamic;
import com.mojang.serialization.JsonOps;
import me.shedaniel.architectury.utils.Fraction;
import me.shedaniel.rei.api.gui.Renderer;
-import me.shedaniel.rei.api.util.TextRepresentable;
import me.shedaniel.rei.api.ingredient.entry.ComparisonContext;
import me.shedaniel.rei.api.ingredient.entry.EntryDefinition;
import me.shedaniel.rei.api.ingredient.entry.EntryRenderer;
import me.shedaniel.rei.api.ingredient.entry.EntryType;
+import me.shedaniel.rei.api.util.TextRepresentable;
import me.shedaniel.rei.impl.Internals;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@@ -202,4 +202,9 @@ public interface EntryStack<T> extends TextRepresentable, Renderer {
setAmount(getAmount().simplify());
return this;
}
+
+ @ApiStatus.NonExtendable
+ default <O> EntryStack<O> cast() {
+ return (EntryStack<O>) this;
+ }
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java
index dcb72f0fe..f2d22668f 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java
@@ -49,7 +49,6 @@ public interface EntryDefinition<T> {
boolean isEmpty(EntryStack<T> entry, T value);
- @NotNull
T copy(EntryStack<T> entry, T value);
int hash(EntryStack<T> entry, T value, ComparisonContext context);
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java
index 2fd9f0bbb..2397b46a5 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java
@@ -25,11 +25,11 @@ package me.shedaniel.rei.api.ingredient.entry;
import me.shedaniel.rei.api.plugins.PluginManager;
import me.shedaniel.rei.api.registry.Reloadable;
-import me.shedaniel.rei.impl.Internals;
import net.minecraft.resources.ResourceLocation;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Set;
+
public interface EntryTypeRegistry extends Reloadable {
static EntryTypeRegistry getInstance() {
return PluginManager.getInstance().get(EntryTypeRegistry.class);
@@ -75,6 +75,10 @@ public interface EntryTypeRegistry extends Reloadable {
@Nullable
EntryDefinition<?> get(ResourceLocation id);
+ Set<ResourceLocation> keySet();
+
+ Set<EntryDefinition<?>> values();
+
<A, B> void registerBridge(EntryType<A> original, EntryType<B> destination, EntryTypeBridge<A, B> bridge);
<A, B> Iterable<EntryTypeBridge<A, B>> getBridgesFor(EntryType<A> original, EntryType<B> destination);
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java
index 0407ae215..bbd401247 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java
@@ -24,10 +24,13 @@
package me.shedaniel.rei.api.ingredient.util;
import com.google.common.collect.ImmutableList;
+import me.shedaniel.architectury.fluid.FluidStack;
import me.shedaniel.architectury.utils.Fraction;
import me.shedaniel.rei.api.gui.Renderer;
import me.shedaniel.rei.api.ingredient.EntryIngredient;
import me.shedaniel.rei.api.ingredient.EntryStack;
+import me.shedaniel.rei.api.ingredient.entry.EntryDefinition;
+import me.shedaniel.rei.api.ingredient.entry.EntryType;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
@@ -65,10 +68,28 @@ public final class EntryIngredients {
return EntryIngredient.of(EntryStacks.of(fluid, amount));
}
+ public static EntryIngredient of(FluidStack stack) {
+ return EntryIngredient.of(EntryStacks.of(stack));
+ }
+
public static EntryIngredient of(Renderer renderer) {
return EntryIngredient.of(EntryStacks.of(renderer));
}
+ public static <T> EntryIngredient of(EntryType<T> type, Collection<T> values) {
+ return of(type.getDefinition(), values);
+ }
+
+ public static <T> EntryIngredient of(EntryDefinition<T> definition, Collection<T> values) {
+ if (values.size() == 0) return EntryIngredient.empty();
+ if (values.size() == 1) return EntryIngredient.of(EntryStack.of(definition, values.iterator().next()));
+ List<EntryStack<T>> result = new ArrayList<>(values.size());
+ for (T value : values) {
+ result.add(EntryStack.of(definition, value));
+ }
+ return EntryIngredient.of(result);
+ }
+
public static EntryIngredient ofItems(Collection<ItemLike> stacks) {
if (stacks.size() == 0) return EntryIngredient.empty();
if (stacks.size() == 1) return EntryIngredient.of(EntryStacks.of(stacks.iterator().next()));
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java
index 18144e5df..30b6af005 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java
@@ -26,9 +26,9 @@ package me.shedaniel.rei.api.ingredient.util;
import com.google.common.collect.ImmutableList;
import me.shedaniel.architectury.fluid.FluidStack;
import me.shedaniel.architectury.utils.Fraction;
+import me.shedaniel.rei.api.gui.Renderer;
import me.shedaniel.rei.api.ingredient.EntryStack;
import me.shedaniel.rei.api.ingredient.entry.*;
-import me.shedaniel.rei.api.gui.Renderer;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
@@ -57,6 +57,10 @@ public final class EntryStacks {
return EntryStack.of(VanillaEntryTypes.FLUID, FluidStack.create(fluid, amount));
}
+ public static EntryStack<FluidStack> of(FluidStack stack) {
+ return EntryStack.of(VanillaEntryTypes.FLUID, stack);
+ }
+
public static EntryStack<ItemStack> of(ItemStack stack) {
return EntryStack.of(VanillaEntryTypes.ITEM, stack);
}
@@ -67,7 +71,7 @@ public final class EntryStacks {
public static EntryStack<?> of(Renderer renderer) {
if (renderer instanceof EntryStack) {
- return (EntryStack<Renderer>) renderer;
+ return (EntryStack<?>) renderer;
}
return EntryStack.of(BuiltinEntryTypes.RENDERING, renderer);