From 966bbd7fe43237f9b1aa6cfd94cf5e34a9bcfddf Mon Sep 17 00:00:00 2001 From: shedaniel Date: Tue, 6 Apr 2021 15:47:20 +0800 Subject: Expose draggable stacks Signed-off-by: shedaniel --- .../rei/plugin/client/DefaultClientRuntimePlugin.java | 15 ++++++++++++++- .../rei/plugin/client/entry/ItemEntryDefinition.java | 4 ++-- .../java/me/shedaniel/rei/plugin/test/REITestPlugin.java | 4 ++-- 3 files changed, 18 insertions(+), 5 deletions(-) (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin') diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java index 3b547fe2f..719f7c775 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientRuntimePlugin.java @@ -27,13 +27,18 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.client.ClientHelper; +import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.favorites.FavoriteEntryType; import me.shedaniel.rei.api.client.gui.AbstractRenderer; import me.shedaniel.rei.api.client.gui.Renderer; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitorWidget; import me.shedaniel.rei.api.client.gui.widgets.Panel; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.client.registry.screen.DisplayBoundsProvider; @@ -95,7 +100,7 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin { @Override public void registerEntries(EntryRegistry registry) { if (ClientHelperImpl.getInstance().isAprilFools.get()) { - registry.registerEntry(ClientEntryStacks.of(new AbstractRenderer() { + registry.addEntry(ClientEntryStacks.of(new AbstractRenderer() { private ResourceLocation id = new ResourceLocation("roughlyenoughitems", "textures/gui/kirb.png"); @Override @@ -147,6 +152,14 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin { return InteractionResult.SUCCESS; } }); + registry.registerDraggableStackProvider(DraggableStackProviderWidget.from(context -> { + if (RoughlyEnoughItemsCore.shouldReturn(context.getScreen()) || !REIHelper.getInstance().isOverlayVisible()) return Collections.emptyList(); + return Widgets.walk(REIHelper.getInstance().getOverlay().get().children(), DraggableStackProviderWidget.class::isInstance); + })); + registry.registerDraggableStackVisitor(DraggableStackVisitorWidget.from(context -> { + if (RoughlyEnoughItemsCore.shouldReturn(context.getScreen()) || !REIHelper.getInstance().isOverlayVisible()) return Collections.emptyList(); + return Widgets.walk(REIHelper.getInstance().getOverlay().get().children(), DraggableStackVisitorWidget.class::isInstance); + })); } @Override 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 292ca0fb8..453df00c3 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 @@ -111,7 +111,7 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer public long hash(EntryStack entry, ItemStack value, ComparisonContext context) { int code = 1; code = 31 * code + System.identityHashCode(value.getItem()); - code = 31 * code + (context.isFuzzy() ? 0 : Long.hashCode(ItemComparatorRegistry.getInstance().hashOf(value))); + code = 31 * code + Long.hashCode(ItemComparatorRegistry.getInstance().hashOf(context, value)); return code; } @@ -119,7 +119,7 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer public boolean equals(ItemStack o1, ItemStack o2, ComparisonContext context) { if (o1.getItem() != o2.getItem()) return false; - return context.isFuzzy() || ItemComparatorRegistry.getInstance().hashOf(o1) == ItemComparatorRegistry.getInstance().hashOf(o2); + return ItemComparatorRegistry.getInstance().hashOf(context, o1) == ItemComparatorRegistry.getInstance().hashOf(context, o2); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java index 67d0c7cb5..f0f1dae76 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java @@ -56,10 +56,10 @@ public class REITestPlugin implements REIClientPlugin { int times = 1000; for (Item item : Registry.ITEM) { EntryStack base = EntryStacks.of(item); - registry.registerEntriesAfter(base, IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(item))).collect(Collectors.toList())); + registry.addEntriesAfter(base, IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(item))).collect(Collectors.toList())); try { for (ItemStack stack : registry.appendStacksForItem(item)) { - registry.registerEntries(IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(stack))).collect(Collectors.toList())); + registry.addEntries(IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(stack))).collect(Collectors.toList())); } } catch (Exception ignored) { } -- cgit