aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-10-15 02:43:32 +0800
committershedaniel <daniel@shedaniel.me>2021-10-15 02:44:22 +0800
commit5481fc9f6517f73a0fe9d2ce6db9fe2275dcefd5 (patch)
treeb344702447d37b0bde2ce7a5692e2410b4bd7882 /runtime/src/main/java/me
parent7d1ba596b1a082f5ff9c8f77b82ae01052d05307 (diff)
downloadRoughlyEnoughItems-5481fc9f6517f73a0fe9d2ce6db9fe2275dcefd5.tar.gz
RoughlyEnoughItems-5481fc9f6517f73a0fe9d2ce6db9fe2275dcefd5.tar.bz2
RoughlyEnoughItems-5481fc9f6517f73a0fe9d2ce6db9fe2275dcefd5.zip
Add tag match & JEI recipe ids
Diffstat (limited to 'runtime/src/main/java/me')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/DefaultDisplayViewingScreen.java43
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java3
3 files changed, 54 insertions, 1 deletions
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 be84c395b..fa1261c06 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
@@ -29,6 +29,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.math.Matrix4f;
+import me.shedaniel.architectury.fluid.FluidStack;
import me.shedaniel.clothconfig2.api.ModifierKeyCode;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
@@ -46,6 +47,9 @@ import me.shedaniel.rei.api.client.view.ViewSearchBuilder;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.api.common.entry.EntryIngredient;
+import me.shedaniel.rei.api.common.entry.EntryStack;
+import me.shedaniel.rei.api.common.entry.type.EntryType;
+import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.CollectionUtils;
import me.shedaniel.rei.api.common.util.ImmutableTextComponent;
import me.shedaniel.rei.impl.client.ClientHelperImpl;
@@ -67,7 +71,11 @@ import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvents;
+import net.minecraft.tags.Tag;
+import net.minecraft.tags.TagCollection;
+import net.minecraft.tags.TagContainer;
import net.minecraft.util.Mth;
+import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@@ -246,8 +254,12 @@ public class DefaultDisplayViewingScreen extends AbstractDisplayViewingScreen {
int displayWidth = getCurrentCategory().getDisplayWidth(displaySupplier.get());
final Rectangle displayBounds = new Rectangle(getBounds().getCenterX() - displayWidth / 2, getBounds().getCenterY() + 16 - recipeHeight * (getRecipesPerPage() + 1) / 2 - 2 * (getRecipesPerPage() + 1) + recipeHeight * i + 4 * i, displayWidth, recipeHeight);
List<Widget> setupDisplay = getCurrentCategory().setupDisplay(display, displayBounds);
+ setupTags(setupDisplay);
transformIngredientNotice(setupDisplay, ingredientStackToNotice);
transformResultNotice(setupDisplay, resultStackToNotice);
+ for (EntryWidget widget : Widgets.<EntryWidget>walk(widgets, EntryWidget.class::isInstance)) {
+ widget.removeTagMatch = true;
+ }
recipeBounds.put(displayBounds, setupDisplay);
this.widgets.addAll(setupDisplay);
if (supplier.isPresent() && supplier.get().get(displayBounds) != null)
@@ -287,6 +299,37 @@ public class DefaultDisplayViewingScreen extends AbstractDisplayViewingScreen {
_children().addAll(preWidgets);
}
+ private void setupTags(List<Widget> widgets) {
+ TagContainer tags = Minecraft.getInstance().getConnection().getTags();
+ outer:
+ for (EntryWidget widget : Widgets.<EntryWidget>walk(widgets, EntryWidget.class::isInstance)) {
+ widget.removeTagMatch = false;
+ if (widget.getEntries().size() <= 1) continue;
+ EntryType<?> type = null;
+ for (EntryStack<?> entry : widget.getEntries()) {
+ if (type == null) {
+ type = entry.getType();
+ } else if (type != entry.getType()) {
+ continue outer;
+ }
+ }
+ // TODO: Don't hardcode
+ TagCollection<?> collection;
+ List<Object> objects;
+ if (type == VanillaEntryTypes.ITEM) {
+ collection = tags.getItems();
+ objects = CollectionUtils.map(widget.getEntries(), stack -> stack.<ItemStack>castValue().getItem());
+ } else if (type == VanillaEntryTypes.FLUID) {
+ collection = tags.getFluids();
+ objects = CollectionUtils.map(widget.getEntries(), stack -> stack.<FluidStack>castValue().getFluid());
+ } else continue;
+ Map.Entry<ResourceLocation, ? extends Tag<?>> firstOrNull = CollectionUtils.findFirstOrNull(collection.getAllTags().entrySet(), entry -> entry.getValue().getValues().equals(objects));
+ if (firstOrNull != null) {
+ widget.tagMatch = firstOrNull.getKey();
+ }
+ }
+ }
+
public List<Widget> getWidgets() {
return widgets;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
index fe6276a20..ab4e19fc2 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
@@ -43,6 +43,7 @@ import me.shedaniel.rei.api.client.view.ViewSearchBuilder;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.impl.client.REIRuntimeImpl;
import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl;
+import net.minecraft.ChatFormatting;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
import net.minecraft.client.Minecraft;
@@ -50,6 +51,7 @@ import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.TextComponent;
+import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import org.jetbrains.annotations.ApiStatus;
@@ -78,6 +80,8 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
protected boolean wasClicked = false;
private Rectangle bounds;
private List<EntryStack<?>> entryStacks;
+ public ResourceLocation tagMatch;
+ public boolean removeTagMatch = true;
public EntryWidget(Point point) {
this(new Rectangle(point.x - 1, point.y - 1, 18, 18));
@@ -232,6 +236,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
}
entryStacks.add(stack);
}
+ if (removeTagMatch) tagMatch = null;
return this;
}
@@ -242,6 +247,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
entryStacks = new ArrayList<>(entryStacks);
}
entryStacks.addAll(stacks);
+ if (removeTagMatch) tagMatch = null;
}
return this;
}
@@ -319,6 +325,9 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
tooltip.addAllTexts(Stream.of(I18n.get("text.rei.favorites_tooltip", name).split("\n"))
.map(TextComponent::new).collect(Collectors.toList()));
}
+ if (tagMatch != null) {
+ tooltip.add(new TranslatableComponent("text.rei.tag_match", tagMatch.toString()).withStyle(ChatFormatting.GRAY));
+ }
tooltip.queue();
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java
index 8df053102..1529a9e4b 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java
@@ -48,6 +48,7 @@ import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.events.GuiEventListener;
+import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component;
@@ -176,7 +177,7 @@ public final class InternalWidgets {
str.add(errorTooltip[0].get(0).copy().withStyle(ChatFormatting.RED));
}
}
- if (Minecraft.getInstance().options.advancedItemTooltips && displaySupplier.get().getDisplayLocation().isPresent()) {
+ if ((Minecraft.getInstance().options.advancedItemTooltips || Screen.hasShiftDown()) && displaySupplier.get().getDisplayLocation().isPresent()) {
str.add(new TranslatableComponent("text.rei.recipe_id", "", new TextComponent(displaySupplier.get().getDisplayLocation().get().toString()).withStyle(ChatFormatting.GRAY)).withStyle(ChatFormatting.GRAY));
}
return str.toArray(new Component[0]);