Skip to content

Commit

Permalink
Merge branch '1.19.3' into 1.19.2
Browse files Browse the repository at this point in the history
  • Loading branch information
emilyploszaj committed Feb 18, 2024
2 parents 9138def + 86c5e52 commit 55175e4
Show file tree
Hide file tree
Showing 12 changed files with 119 additions and 17 deletions.
12 changes: 7 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
### Fixes
* Fixed fill recipe not working in the inventory grid with JEI present #426
* Fixed 1.20.4 effects displaying with the wrong time #435
* Fixed Forge/NeoForge recipe book causing offset in EMI #425
* Fixed input behaving as if EMI is present even if it's not in certain screens
### Tweaks
* Search now has a history of previous queries #147
* Made mod name tooltip more likely to apply if other mods are making changes
* EMI's index construction is now slightly safer when other mods cause issues

### API
* Added an experimental "recipe decorator" API
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ minecraft_version=1.19.2
enabled_platforms=fabric,forge

archives_base_name=emi
mod_version=1.1.1
mod_version=1.1.2
maven_group=dev.emi

architectury_version=4.9.83
Expand Down
23 changes: 23 additions & 0 deletions xplat/src/main/java/dev/emi/emi/api/EmiRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
import java.util.function.Function;
import java.util.function.Predicate;

import org.jetbrains.annotations.ApiStatus;

import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.recipe.EmiRecipeDecorator;
import dev.emi.emi.api.stack.Comparison;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
Expand Down Expand Up @@ -169,4 +172,24 @@ default void setDefaultComparison(EmiStack stack, Comparison comparison) {
* Recipe handlers are responsible for filling recipes automatically.
*/
<T extends ScreenHandler> void addRecipeHandler(ScreenHandlerType<T> type, dev.emi.emi.api.recipe.handler.EmiRecipeHandler<T> handler);

/**
* Adds a recipe decorator for all recipe categories.
* Recipe decorators can display additional widgets in recipes to indicate information from external mods.
*/
@ApiStatus.Experimental
void addRecipeDecorator(EmiRecipeDecorator decorator);

/**
* Adds a recipe decorator for a specific recipe category.
* Recipe decorators can display additional widgets in recipes to indicate information from external mods.
*/
@ApiStatus.Experimental
default void addRecipeDecorator(EmiRecipeCategory category, EmiRecipeDecorator decorator) {
addRecipeDecorator((recipe, widgets) -> {
if (recipe.getCategory() == category) {
decorator.decorateRecipe(recipe, widgets);
}
});
}
}
11 changes: 11 additions & 0 deletions xplat/src/main/java/dev/emi/emi/api/recipe/EmiRecipeDecorator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package dev.emi.emi.api.recipe;

import org.jetbrains.annotations.ApiStatus;

import dev.emi.emi.api.widget.WidgetHolder;

@ApiStatus.Experimental
public interface EmiRecipeDecorator {

void decorateRecipe(EmiRecipe recipe, WidgetHolder widgets);
}
4 changes: 4 additions & 0 deletions xplat/src/main/java/dev/emi/emi/config/EmiConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,10 @@ public class EmiConfig {
@ConfigValue("dev.show-recipe-ids")
public static boolean showRecipeIds = false;

@Comment("Whether to display additional widgets added to recipes from other mods.\nThese are typically developer facing and compatibility related, and not useful for players.")
@ConfigValue("dev.show-recipe-decorators")
public static boolean showRecipeDecorators = EmiAgnos.isDevelopmentEnvironment();

@Comment("Whether stacks in the index should display a highlight if they have a recipe default.")
@ConfigValue("dev.highlight-defaulted")
public static boolean highlightDefaulted = false;
Expand Down
2 changes: 1 addition & 1 deletion xplat/src/main/java/dev/emi/emi/mixin/ItemStackMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;

@Mixin(value = ItemStack.class, priority = 2000)
@Mixin(value = ItemStack.class, priority = 500)
public class ItemStackMixin {

@Inject(at = @At("RETURN"), method = "getTooltip")
Expand Down
3 changes: 3 additions & 0 deletions xplat/src/main/java/dev/emi/emi/registry/EmiRecipes.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import dev.emi.emi.EmiUtil;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.recipe.EmiRecipeDecorator;
import dev.emi.emi.api.recipe.EmiRecipeManager;
import dev.emi.emi.api.recipe.EmiRecipeSorting;
import dev.emi.emi.api.stack.EmiIngredient;
Expand Down Expand Up @@ -48,6 +49,7 @@ public class EmiRecipes {
private static List<EmiRecipe> recipes = Lists.newArrayList();

public static Map<EmiStack, List<EmiRecipe>> byWorkstation = Maps.newHashMap();
public static List<EmiRecipeDecorator> decorators = Lists.newArrayList();

public static void clear() {
setWorker(null);
Expand All @@ -57,6 +59,7 @@ public static void clear() {
workstations.clear();
recipes.clear();
byWorkstation.clear();
decorators.clear();
manager = Manager.EMPTY;
}

Expand Down
6 changes: 6 additions & 0 deletions xplat/src/main/java/dev/emi/emi/registry/EmiRegistryImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import dev.emi.emi.api.EmiStackProvider;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.recipe.EmiRecipeDecorator;
import dev.emi.emi.api.recipe.handler.EmiRecipeHandler;
import dev.emi.emi.api.stack.Comparison;
import dev.emi.emi.api.stack.EmiIngredient;
Expand Down Expand Up @@ -128,4 +129,9 @@ public <T extends ScreenHandler> void addRecipeHandler(ScreenHandlerType<T> type
public void setDefaultComparison(Object key, Function<Comparison, Comparison> comparison) {
EmiComparisonDefaults.comparisons.put(key, comparison.apply(EmiComparisonDefaults.get(key)));
}

@Override
public void addRecipeDecorator(EmiRecipeDecorator decorator) {
EmiRecipes.decorators.add(decorator);
}
}
41 changes: 31 additions & 10 deletions xplat/src/main/java/dev/emi/emi/registry/EmiStackList.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,29 @@ public static void reload() {
Map<String, IndexGroup> namespaceGroups = new LinkedHashMap<>();
Map<String, IndexGroup> creativeGroups = new LinkedHashMap<>();
for (Item item : EmiPort.getItemRegistry()) {
EmiStack stack = EmiStack.of(item);
namespaceGroups.computeIfAbsent(stack.getId().getNamespace(), (k) -> new IndexGroup()).stacks.add(stack);
String itemName = "null";
try {
itemName = item.toString();
EmiStack stack = EmiStack.of(item);
namespaceGroups.computeIfAbsent(stack.getId().getNamespace(), (k) -> new IndexGroup()).stacks.add(stack);
} catch (Exception e) {
EmiLog.error("Item " + itemName + " threw while EMI was attempting to construct the index, items may be missing.");
EmiLog.error(e);
}
}
for (Item item : EmiPort.getItemRegistry()) {
DefaultedList<ItemStack> itemStacks = DefaultedList.of();
item.appendStacks(ItemGroup.SEARCH, itemStacks);
List<EmiStack> stacks = itemStacks.stream().filter(s -> !s.isEmpty()).map(EmiStack::of).toList();
if (!stacks.isEmpty()) {
creativeGroups.computeIfAbsent(stacks.get(0).getId().getNamespace(), (k) -> new IndexGroup()).stacks.addAll(stacks);
String itemName = "null";
try {
itemName = item.toString();
DefaultedList<ItemStack> itemStacks = DefaultedList.of();
item.appendStacks(ItemGroup.SEARCH, itemStacks);
List<EmiStack> stacks = itemStacks.stream().filter(s -> !s.isEmpty()).map(EmiStack::of).toList();
if (!stacks.isEmpty()) {
creativeGroups.computeIfAbsent(stacks.get(0).getId().getNamespace(), (k) -> new IndexGroup()).stacks.addAll(stacks);
}
} catch (Exception e) {
EmiLog.error("Item " + itemName + " threw while EMI was attempting to construct the index, items may be missing.");
EmiLog.error(e);
}
}
if (EmiConfig.indexSource == IndexSource.CREATIVE) {
Expand All @@ -87,9 +101,16 @@ public static void reload() {
groups.addAll(namespaceGroups.values());
IndexGroup fluidGroup = new IndexGroup();
for (Fluid fluid : EmiPort.getFluidRegistry()) {
if (fluid.isStill(fluid.getDefaultState()) || (fluid instanceof FlowableFluid ff && ff.getStill() == Fluids.EMPTY)) {
EmiStack fs = EmiStack.of(fluid);
fluidGroup.stacks.add(fs);
String fluidName = null;
try {
fluidName = fluid.toString();
if (fluid.isStill(fluid.getDefaultState()) || (fluid instanceof FlowableFluid ff && ff.getStill() == Fluids.EMPTY)) {
EmiStack fs = EmiStack.of(fluid);
fluidGroup.stacks.add(fs);
}
} catch (Exception e) {
EmiLog.error("Fluid " + fluidName + " threw while EMI was attempting to construct the index, stack may be missing.");
EmiLog.error(e);
}
}
groups.add(fluidGroup);
Expand Down
7 changes: 7 additions & 0 deletions xplat/src/main/java/dev/emi/emi/screen/RecipeDisplay.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@
import dev.emi.emi.EmiPort;
import dev.emi.emi.EmiUtil;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeDecorator;
import dev.emi.emi.api.widget.RecipeFillButtonWidget;
import dev.emi.emi.api.widget.TextWidget;
import dev.emi.emi.api.widget.TextWidget.Alignment;
import dev.emi.emi.config.EmiConfig;
import dev.emi.emi.registry.EmiRecipeFiller;
import dev.emi.emi.registry.EmiRecipes;
import dev.emi.emi.widget.RecipeDefaultButtonWidget;
import dev.emi.emi.widget.RecipeScreenshotButtonWidget;
import dev.emi.emi.widget.RecipeTreeButtonWidget;
Expand Down Expand Up @@ -69,6 +71,11 @@ public WidgetGroup getWidgets(int x, int y, int availableWidth, int availableHei
if (recipe != null) {
try {
recipe.addWidgets(widgets);
if (EmiConfig.showRecipeDecorators) {
for (EmiRecipeDecorator decorator : EmiRecipes.decorators) {
decorator.decorateRecipe(recipe, widgets);
}
}
addButtons(widgets, leftButtons, 0 - 4 - 13, -14);
addButtons(widgets, rightButtons, width + 5, 14);
} catch (Throwable t) {
Expand Down
24 changes: 24 additions & 0 deletions xplat/src/main/java/dev/emi/emi/screen/widget/EmiSearchWidget.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@

public class EmiSearchWidget extends TextFieldWidget {
private static final Pattern ESCAPE = Pattern.compile("\\\\.");
private List<String> searchHistory = Lists.newArrayList();
private int searchHistoryIndex = 0;
private List<Pair<Integer, Style>> styles;
private long lastClick = 0;
private String last = "";
Expand Down Expand Up @@ -144,6 +146,18 @@ public void swap() {

@Override
public void setFocused(boolean focused) {
if (!focused) {
searchHistoryIndex = 0;
String currentSearch = getText();
if (!currentSearch.isBlank() && !currentSearch.isEmpty()) {
searchHistory.removeIf(String::isBlank);
searchHistory.remove(currentSearch);
searchHistory.add(0, currentSearch);
if (searchHistory.size() > 36) {
searchHistory.remove(searchHistory.size() - 1);
}
}
}
isFocused = focused;
}

Expand Down Expand Up @@ -189,6 +203,16 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
this.setFocused(false);
return true;
}
if (keyCode == GLFW.GLFW_KEY_UP || keyCode == GLFW.GLFW_KEY_DOWN) {
int offset = keyCode == GLFW.GLFW_KEY_UP ? 1 : -1;
if (searchHistoryIndex + offset >= 0 && searchHistoryIndex + offset < searchHistory.size()) {
if (searchHistoryIndex >= 0 && searchHistoryIndex < searchHistory.size()) {
searchHistory.set(searchHistoryIndex, getText());
}
searchHistoryIndex += offset;
setText(searchHistory.get(searchHistoryIndex));
}
}
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
Expand Down
1 change: 1 addition & 0 deletions xplat/src/main/resources/assets/emi/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@
"config.emi.dev.log_untranslated_tags": "Log Untranslated Tags",
"config.emi.dev.log_non_tag_ingredients": "Log Non-Tag Ingredients",
"config.emi.dev.show_recipe_ids": "Show Recipe IDs",
"config.emi.dev.show_recipe_decorators": "Show Recipe Decorators",
"config.emi.dev.highlight_defaulted": "Highlight Defaulted",
"config.emi.dev.highlight_exclusion_areas": "Highlight Exclusion Areas",

Expand Down

0 comments on commit 55175e4

Please sign in to comment.