aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/main')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java2
-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/config/REIConfigScreen.java24
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigCategoryEntryWidget.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigSearchWidget.java42
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/AbstractMenuEntry.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java11
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ListWidget.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java23
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidgetWithBounds.java19
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java71
16 files changed, 193 insertions, 75 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
index c8905db02..86ccdcb37 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCoreClient.java
@@ -99,6 +99,7 @@ import me.shedaniel.rei.plugin.test.REITestPlugin;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
+import net.minecraft.client.data.models.blockstates.PropertyDispatch;
import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.components.ImageButton;
import net.minecraft.client.gui.components.events.GuiEventListener;
@@ -108,7 +109,6 @@ import net.minecraft.client.gui.screens.inventory.CraftingScreen;
import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.core.RegistryAccess;
-import net.minecraft.data.models.blockstates.PropertyDispatch;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundRecipeBookAddPacket;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
index 0c081340e..fe905b5cc 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
@@ -519,8 +519,11 @@ public abstract class ScreenOverlayImpl extends ScreenOverlay {
if (!visible) {
return false;
}
+ if (draggingStack != null) {
+ draggingStack.mouseClicked(mouseX, mouseY, button);
+ }
for (GuiEventListener element : widgets) {
- if (element != configButton && element != menuHolder.widget() && element != hintsWidget && element.mouseClicked(mouseX, mouseY, button)) {
+ if (element != configButton && element != menuHolder.widget() && element != hintsWidget && element != draggingStack && element.mouseClicked(mouseX, mouseY, button)) {
this.setFocused(element);
if (button == 0)
this.setDragging(true);
@@ -551,6 +554,15 @@ public abstract class ScreenOverlayImpl extends ScreenOverlay {
}
@Override
+ public boolean mouseReleased(double mouseX, double mouseY, int button) {
+ if (draggingStack != null) {
+ draggingStack.mouseReleased(mouseX, mouseY, button);
+ }
+
+ return super.mouseReleased(mouseX, mouseY, button);
+ }
+
+ @Override
public GuiEventListener getFocused() {
if (choosePageWidget != null)
return choosePageWidget;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/REIConfigScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/REIConfigScreen.java
index af8ae2132..e9a766c5d 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/REIConfigScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/REIConfigScreen.java
@@ -62,10 +62,7 @@ import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
import org.jetbrains.annotations.Nullable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.function.BiConsumer;
import static me.shedaniel.rei.impl.client.gui.config.options.ConfigUtils.literal;
@@ -307,6 +304,25 @@ public class REIConfigScreen extends Screen implements ConfigAccess {
}
@Override
+ public Optional<GuiEventListener> getChildAt(double mouseX, double mouseY) {
+ if (menu != null) {
+ if (menu.containsMouse(mouseX, mouseY)) {
+ return Optional.of(menu);
+ }
+ }
+
+ // Reverse iteration
+ for (int i = widgets.size() - 1; i >= 0; i--) {
+ Widget widget = widgets.get(i);
+ if (widget.containsMouse(mouseX, mouseY)) {
+ return Optional.of(widget);
+ }
+ }
+
+ return Optional.empty();
+ }
+
+ @Override
public boolean mouseReleased(double mouseX, double mouseY, int button) {
if (menu != null && menu.mouseReleased(mouseX, mouseY, button))
return true;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigCategoryEntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigCategoryEntryWidget.java
index e701eac07..1716578a5 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigCategoryEntryWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigCategoryEntryWidget.java
@@ -50,7 +50,7 @@ public class ConfigCategoryEntryWidget {
Widget descriptionLabel = Widgets.createDrawableWidget((graphics, mouseX, mouseY, delta) -> {
renderTextScrolling(graphics, description, 0, 0, (int) ((width - 21 - 6) / 0.75), 0xFFB0B0B0);
});
- Rectangle bounds = new Rectangle(0, 0, label.getBounds().getMaxX(), hasDescription ? 24 : 7 * 3);
+ Rectangle bounds = new Rectangle(0, 0, width, hasDescription ? 24 : 7 * 3);
return Widgets.concatWithBounds(
bounds,
label,
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigSearchWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigSearchWidget.java
index 40986fc47..9d811892f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigSearchWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/config/components/ConfigSearchWidget.java
@@ -51,13 +51,12 @@ public class ConfigSearchWidget {
Label label = Widgets.createLabel(new Point(21, 6), translatable("config.rei.texts.search_options"))
.leftAligned();
Font font = Minecraft.getInstance().font;
- Rectangle bounds = new Rectangle(0, 0, label.getBounds().getMaxX(), 7 * 3);
return Widgets.concatWithBounds(
- bounds,
- new Widget() {
+ () -> new Rectangle(0, 0, width.getAsInt(), 7 * 3),
+ new WidgetWithBounds() {
@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
- boolean hovering = new Rectangle(-1, -1, width.getAsInt() + 2, 21).contains(mouseX, mouseY);
+ boolean hovering = containsMouse(mouseX, mouseY);
for (Widget widget : List.of(Widgets.createFilledRectangle(new Rectangle(1, 1, width.getAsInt() - 2, 18), hovering ? 0x50FFFFFF : 0x25FFFFFF),
Widgets.createFilledRectangle(new Rectangle(-1, -1, width.getAsInt() + 2, 1), hovering ? 0x90FFFFFF : 0x45FFFFFF),
Widgets.createFilledRectangle(new Rectangle(-1, 20, width.getAsInt() + 2, 1), hovering ? 0x90FFFFFF : 0x45FFFFFF),
@@ -75,18 +74,18 @@ public class ConfigSearchWidget {
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (new Rectangle(-1, -1, width.getAsInt() + 2, 21).contains(mouseX, mouseY)) {
- Widgets.produceClickSound();
- ((REIConfigScreen) Minecraft.getInstance().screen).setSearching(true);
- return true;
- }
-
- return false;
+ Widgets.produceClickSound();
+ ((REIConfigScreen) Minecraft.getInstance().screen).setSearching(true);
+ return true;
+ }
+
+ @Override
+ public Rectangle getBounds() {
+ return new Rectangle(-1, -1, width.getAsInt() + 2, 21);
}
},
Widgets.withTranslate(label, 0, 0.5, 0),
Widgets.createTexturedWidget(ResourceLocation.parse("roughlyenoughitems:textures/gui/config/search_options.png"), new Rectangle(3, 3, 16, 16), 0, 0, 1, 1, 1, 1)
-
);
}
@@ -94,10 +93,10 @@ public class ConfigSearchWidget {
Rectangle bounds = new Rectangle(0, 0, 16, 16);
return Widgets.withTooltip(Widgets.concatWithBounds(
bounds,
- new Widget() {
+ new WidgetWithBounds() {
@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
- boolean hovering = new Rectangle(-1, -1, 18, 18).contains(mouseX, mouseY);
+ boolean hovering = containsMouse(mouseX, mouseY);
graphics.pose().pushPose();
graphics.pose().translate(-0.5, -0.5, 0);
for (Widget widget : List.of(Widgets.createFilledRectangle(new Rectangle(-1, -1, 18, 18), hovering ? 0x50FFFFFF : 0x25FFFFFF),
@@ -117,13 +116,14 @@ public class ConfigSearchWidget {
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (new Rectangle(-1, -1, 18, 18).contains(mouseX, mouseY)) {
- Widgets.produceClickSound();
- ((REIConfigScreen) Minecraft.getInstance().screen).setSearching(true);
- return true;
- }
-
- return false;
+ Widgets.produceClickSound();
+ ((REIConfigScreen) Minecraft.getInstance().screen).setSearching(true);
+ return true;
+ }
+
+ @Override
+ public Rectangle getBounds() {
+ return new Rectangle(-1, -1, 18, 18);
}
},
Widgets.createTexturedWidget(ResourceLocation.parse("roughlyenoughitems:textures/gui/config/search_options.png"), bounds, 0, 0, 1, 1, 1, 1)
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/AbstractMenuEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/AbstractMenuEntry.java
index 7cd5c574d..849950ec8 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/AbstractMenuEntry.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/AbstractMenuEntry.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.impl.client.gui.modules;
+import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry;
public abstract class AbstractMenuEntry extends FavoriteMenuEntry {
@@ -41,7 +42,7 @@ public abstract class AbstractMenuEntry extends FavoriteMenuEntry {
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (isRendering() && mouseX >= getX() && mouseX <= getX() + getWidth() && mouseY >= getY() && mouseY < getY() + getEntryHeight()) {
+ if (containsMouse(mouseX, mouseY)) {
if (onClick(mouseX, mouseY, button)) {
return true;
}
@@ -76,4 +77,9 @@ public abstract class AbstractMenuEntry extends FavoriteMenuEntry {
public boolean isRendering() {
return rendering;
}
+
+ @Override
+ public boolean containsMouse(double mouseX, double mouseY) {
+ return isRendering() && new Rectangle(getX(), getY(), getWidth(), getEntryHeight()).contains(mouseX, mouseY);
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java
index eb094d8d2..5005aa93e 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java
@@ -465,7 +465,18 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
- return super.mouseClicked(mouseX, mouseY, button) || (getOverlay().mouseClicked(mouseX, mouseY, button) && handleFocuses(button));
+ Optional<GuiEventListener> hovered = this.getChildAt(mouseX, mouseY);
+ if (hovered.isPresent() && hovered.get().mouseClicked(mouseX, mouseY, button)) {
+ this.setFocused(hovered.get());
+ if (button == 0) {
+ this.setDragging(true);
+ }
+
+ if (getOverlay().mouseClicked(mouseX, mouseY, button)) handleFocuses(button);
+ return true;
+ }
+
+ return getOverlay().mouseClicked(mouseX, mouseY, button) && handleFocuses(button);
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java
index 3788f162e..18767d4b6 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/CompositeDisplayViewingScreen.java
@@ -224,6 +224,19 @@ public class CompositeDisplayViewingScreen extends AbstractDisplayViewingScreen
}
@Override
+ public Optional<GuiEventListener> getChildAt(double mouseX, double mouseY) {
+ // Reverse iteration
+ for (int i = widgets.size() - 1; i >= 0; i--) {
+ Widget widget = widgets.get(i);
+ if (widget.containsMouse(mouseX, mouseY)) {
+ return Optional.of(widget);
+ }
+ }
+
+ return Optional.empty();
+ }
+
+ @Override
public boolean charTyped(char char_1, int int_1) {
for (GuiEventListener listener : children())
if (listener.charTyped(char_1, int_1))
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java
index ca6fe77a0..f5d1a8c0e 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java
@@ -27,7 +27,6 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.mojang.blaze3d.systems.RenderSystem;
-import com.mojang.blaze3d.vertex.Tesselator;
import it.unimi.dsi.fastutil.Pair;
import me.shedaniel.clothconfig2.api.ModifierKeyCode;
import me.shedaniel.clothconfig2.api.animator.ValueAnimator;
@@ -66,7 +65,6 @@ import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.screens.ConfirmScreen;
import net.minecraft.client.gui.screens.Screen;
-import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component;
@@ -501,6 +499,19 @@ public class DefaultDisplayViewingScreen extends AbstractDisplayViewingScreen {
return super.mouseClicked(mouseX, mouseY, button);
}
+ @Override
+ public Optional<GuiEventListener> getChildAt(double mouseX, double mouseY) {
+ // Reverse iteration
+ for (int i = widgets.size() - 1; i >= 0; i--) {
+ Widget widget = widgets.get(i);
+ if (widget.containsMouse(mouseX, mouseY)) {
+ return Optional.of(widget);
+ }
+ }
+
+ return Optional.empty();
+ }
+
public static class WorkstationSlotWidget extends EntryWidget {
public WorkstationSlotWidget(int x, int y, EntryIngredient widgets) {
super(new Point(x, y));
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java
index 236c791f6..12196723f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CachedEntryListRender.java
@@ -176,7 +176,8 @@ public class CachedEntryListRender {
nativeImage.flipY();
cachedTexture = new DynamicTexture(nativeImage);
- cachedTextureLocation = minecraft.getTextureManager().register("rei_cached_entries", cachedTexture);
+ cachedTextureLocation = ResourceLocation.fromNamespaceAndPath("roughlyenoughitems", "rei_cached_entries");
+ minecraft.getTextureManager().register(cachedTextureLocation, cachedTexture);
renderType.reset();
target.destroyBuffers();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java
index 6213b47b6..87ad675bc 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java
@@ -24,6 +24,7 @@
package me.shedaniel.rei.impl.client.gui.widget;
import com.mojang.math.Transformation;
+import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.gui.widgets.DelegateWidget;
import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds;
@@ -42,11 +43,6 @@ public class DelegateWidgetWithTranslate extends DelegateWidget {
this.translate = translate;
}
- public DelegateWidgetWithTranslate(Widget widget, Supplier<Matrix4f> translate) {
- super(widget);
- this.translate = translate;
- }
-
protected Matrix4f translate() {
return translate.get();
}
@@ -135,4 +131,9 @@ public class DelegateWidgetWithTranslate extends DelegateWidget {
Transformation transformation = new Transformation(translate());
return transformation.getTranslation().z() + super.getZRenderingPriority();
}
+
+ @Override
+ public Rectangle getBounds() {
+ return MatrixUtils.transform(translate(), super.getBounds());
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ListWidget.java
index 313ad40a2..3121a5d95 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ListWidget.java
@@ -224,6 +224,11 @@ public class ListWidget {
}
@Override
+ public boolean containsMouse(double mouseX, double mouseY) {
+ return super.containsMouse(mouseX, mouseY);
+ }
+
+ @Override
protected Matrix4f translate() {
Rectangle bounds = delegate().getBounds();
return new Matrix4f().translate(position.x - bounds.x, position.y - bounds.y, 0);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java
index 32a76895c..54a801061 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java
@@ -32,6 +32,7 @@ import net.minecraft.client.gui.components.events.GuiEventListener;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
public class MergedWidget extends Widget {
private final List<Widget> widgets;
@@ -115,4 +116,26 @@ public class MergedWidget extends Widget {
return CollectionUtils.max(widgets, Comparator.comparingDouble(Widget::getZRenderingPriority))
.map(Widget::getZRenderingPriority).orElse(0.0);
}
+
+ @Override
+ public boolean containsMouse(double mouseX, double mouseY) {
+ for (Widget widget : this.widgets) {
+ if (widget.containsMouse(mouseX, mouseY))
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public Optional<GuiEventListener> getChildAt(double mouseX, double mouseY) {
+ // Reverse iteration
+ for (int i = widgets.size() - 1; i >= 0; i--) {
+ Widget widget = widgets.get(i);
+ if (widget.containsMouse(mouseX, mouseY)) {
+ return Optional.of(widget);
+ }
+ }
+
+ return Optional.empty();
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidgetWithBounds.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidgetWithBounds.java
index 23eb26c90..89e05d1ee 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidgetWithBounds.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidgetWithBounds.java
@@ -32,6 +32,7 @@ import net.minecraft.client.gui.components.events.GuiEventListener;
import java.util.Comparator;
import java.util.List;
+import java.util.Optional;
import java.util.function.Supplier;
public class MergedWidgetWithBounds extends WidgetWithBounds {
@@ -128,4 +129,22 @@ public class MergedWidgetWithBounds extends WidgetWithBounds {
render(graphics, mouseX, mouseY, delta);
getBounds().setBounds(clone);
}
+
+ @Override
+ public boolean containsMouse(double mouseX, double mouseY) {
+ return getBounds().contains(mouseX, mouseY);
+ }
+
+ @Override
+ public Optional<GuiEventListener> getChildAt(double mouseX, double mouseY) {
+ // Reverse iteration
+ for (int i = widgets.size() - 1; i >= 0; i--) {
+ Widget widget = widgets.get(i);
+ if (widget.containsMouse(mouseX, mouseY)) {
+ return Optional.of(widget);
+ }
+ }
+
+ return Optional.empty();
+ }
} \ No newline at end of file
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
index 4480cda5b..d217e1000 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
@@ -69,7 +69,6 @@ import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.util.Mth;
-import net.minecraft.world.inventory.InventoryMenu;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.material.FlowingFluid;
@@ -282,7 +281,7 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
.alpha(0xff)
.normal(graphics.pose().last().normal(), 0, 0, 0)
.position(graphics.pose().last().pose(), bounds.x, bounds.getMaxY() - bounds.height * Mth.clamp(entry.get(EntryStack.Settings.FLUID_RENDER_RATIO), 0, 1), bounds.getMaxX(), bounds.getMaxY(), 0)
- .next(InventoryMenu.BLOCK_ATLAS);
+ .next(TextureAtlas.LOCATION_BLOCKS);
immediate.endBatch();
}
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 a2c046e9f..963f6833b 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
@@ -53,10 +53,10 @@ import net.minecraft.CrashReportCategory;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.MultiBufferSource;
+import net.minecraft.client.renderer.item.ItemStackRenderState;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.resources.language.I18n;
-import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.component.DataComponentPatch;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.registries.BuiltInRegistries;
@@ -245,86 +245,87 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
}
@Environment(EnvType.CLIENT)
- public class ItemEntryRenderer implements BatchedEntryRenderer<ItemStack, BakedModel> {
+ public class ItemEntryRenderer implements BatchedEntryRenderer<ItemStack, ItemStackRenderState> {
private static final float SCALE = 20.0F;
public static final int ITEM_LIGHT = 0xf000f0;
@Override
- public BakedModel getExtraData(EntryStack<ItemStack> entry) {
+ public ItemStackRenderState getExtraData(EntryStack<ItemStack> entry) {
Minecraft minecraft = Minecraft.getInstance();
- return minecraft.getItemRenderer().getModel(entry.getValue(), minecraft.level, minecraft.player, 0);
+ ItemStackRenderState renderState = new ItemStackRenderState();
+ minecraft.getItemModelResolver().updateForTopItem(renderState, entry.getValue(), ItemDisplayContext.GUI, false, minecraft.level, minecraft.player, 0);
+ return renderState;
}
@Override
public void render(EntryStack<ItemStack> entry, GuiGraphics graphics, Rectangle bounds, int mouseX, int mouseY, float delta) {
- BakedModel model = getExtraData(entry);
- setupGL(entry, model);
if (!entry.isEmpty()) {
ItemStack value = entry.getValue();
+ ItemStackRenderState renderState = getExtraData(entry);
+ setupGL(entry, renderState);
graphics.pose().pushPose();
graphics.pose().translate(bounds.getCenterX(), bounds.getCenterY(), 0);
graphics.pose().mulPose(new Matrix4f().scaling(1.0F, -1.0F, 1.0F));
graphics.pose().scale(bounds.getWidth(), bounds.getHeight(), (bounds.getWidth() + bounds.getHeight()) / 2.0F);
MultiBufferSource.BufferSource immediate = graphics.bufferSource;
- Minecraft.getInstance().getItemRenderer().render(value, ItemDisplayContext.GUI, false, graphics.pose(), immediate,
- ITEM_LIGHT, OverlayTexture.NO_OVERLAY, model);
+ renderState.render(graphics.pose(), immediate, ITEM_LIGHT, OverlayTexture.NO_OVERLAY);
immediate.endBatch();
graphics.pose().popPose();
+
+ Matrix4fStack modelViewStack = RenderSystem.getModelViewStack();
+ modelViewStack.pushMatrix();
+ modelViewStack.mul(graphics.pose().last().pose());
+ modelViewStack.translate(bounds.x, bounds.y, 0);
+ modelViewStack.scale(bounds.width / 16f, (bounds.getWidth() + bounds.getHeight()) / 2f / 16f, 1.0F);
+ graphics.drawSpecial(source -> {
+ if (source instanceof MultiBufferSource.BufferSource multiBufferSource) {
+ renderOverlay(new GuiGraphics(Minecraft.getInstance(), multiBufferSource), entry, bounds);
+ }
+ });
+ modelViewStack.popMatrix();
+ endGL(entry, renderState);
}
- Matrix4fStack modelViewStack = RenderSystem.getModelViewStack();
- modelViewStack.pushMatrix();
- modelViewStack.mul(graphics.pose().last().pose());
- modelViewStack.translate(bounds.x, bounds.y, 0);
- modelViewStack.scale(bounds.width / 16f, (bounds.getWidth() + bounds.getHeight()) / 2f / 16f, 1.0F);
- graphics.drawSpecial(source -> {
- if (source instanceof MultiBufferSource.BufferSource multiBufferSource) {
- renderOverlay(new GuiGraphics(Minecraft.getInstance(), multiBufferSource), entry, bounds);
- }
- });
- modelViewStack.popMatrix();
- endGL(entry, model);
}
@Override
- public int getBatchIdentifier(EntryStack<ItemStack> entry, Rectangle bounds, BakedModel model) {
- return 1738923 + (model.usesBlockLight() ? 1 : 0);
+ public int getBatchIdentifier(EntryStack<ItemStack> entry, Rectangle bounds, ItemStackRenderState renderState) {
+ return 1738923 + (renderState.usesBlockLight() ? 1 : 0);
}
@Override
- public void startBatch(EntryStack<ItemStack> entry, BakedModel model, GuiGraphics graphics, float delta) {
- setupGL(entry, model);
+ public void startBatch(EntryStack<ItemStack> entry, ItemStackRenderState renderState, GuiGraphics graphics, float delta) {
+ setupGL(entry, renderState);
}
- public void setupGL(EntryStack<ItemStack> entry, BakedModel model) {
+ public void setupGL(EntryStack<ItemStack> entry, ItemStackRenderState renderState) {
Minecraft.getInstance().getTextureManager().getTexture(TextureAtlas.LOCATION_BLOCKS).setFilter(false, false);
RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS);
RenderSystem.enableBlend();
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
- boolean sideLit = model.usesBlockLight();
+ boolean sideLit = renderState.usesBlockLight();
if (!sideLit) Lighting.setupForFlatItems();
}
@Override
- public void renderBase(EntryStack<ItemStack> entry, BakedModel model, GuiGraphics graphics, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta) {
+ public void renderBase(EntryStack<ItemStack> entry, ItemStackRenderState renderState, GuiGraphics graphics, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta) {
if (!entry.isEmpty()) {
ItemStack value = entry.getValue();
graphics.pose().pushPose();
graphics.pose().translate(bounds.getCenterX(), bounds.getCenterY(), 0);
graphics.pose().scale(bounds.getWidth(), (bounds.getWidth() + bounds.getHeight()) /