Skip to content

Commit

Permalink
Merge branch '1.20' into 1.19.4
Browse files Browse the repository at this point in the history
  • Loading branch information
emilyploszaj committed Aug 8, 2024
2 parents 6ccf779 + e8b3e48 commit 5095ad8
Show file tree
Hide file tree
Showing 10 changed files with 1,723 additions and 11 deletions.
11 changes: 9 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
### Tweaks
* Re-enabled stack batching for 1.21
* Query creative group contents on thread. This may cause slight notable performance dips but will significantly improve compatibility
* Redundant JEI initialization will not be performed on mods with dedicated EMI integration, increasing performance in those situations

### Fixes
* Fixed certain recipe ingredients having incorrect amounts starting in 1.1.8 properly #609 #610
* Fixed registry adapters for dynamic registries in older versions #527
* Various fixes to modern JEI compatibility
* Fix recipe filling behavior having incorrect behavior with edge case slot interactions
* Fixed invisible slots having rendered overlays when they should not #654
* Fixed handling for extra mouse button binds #645
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
import java.util.Optional;
import java.util.function.Consumer;

import org.apache.commons.lang3.text.WordUtils;

import com.google.common.collect.Lists;

import dev.emi.emi.EmiPort;
import dev.emi.emi.EmiRenderHelper;
import dev.emi.emi.EmiUtil;
Expand All @@ -19,6 +23,7 @@
import dev.emi.emi.platform.EmiAgnos;
import dev.emi.emi.recipe.EmiBrewingRecipe;
import dev.emi.emi.registry.EmiPluginContainer;
import dev.emi.emi.runtime.EmiLog;
import dev.emi.emi.screen.FakeScreen;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
Expand All @@ -29,6 +34,8 @@
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributes;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.tooltip.TooltipComponent;
import net.minecraft.client.texture.Sprite;
import net.minecraft.client.util.math.MatrixStack;
Expand Down Expand Up @@ -102,8 +109,16 @@ protected List<String> getAllModAuthorsAgnos() {

@Override
protected List<EmiPluginContainer> getPluginsAgnos() {
return FabricLoader.getInstance().getEntrypointContainers("emi", EmiPlugin.class).stream()
.map(p -> new EmiPluginContainer(p.getEntrypoint(), p.getProvider().getMetadata().getId())).toList();
List<EmiPluginContainer> list = Lists.newArrayList();
for (EntrypointContainer<EmiPlugin> container : FabricLoader.getInstance().getEntrypointContainers("emi", EmiPlugin.class)) {
try {
list.add(new EmiPluginContainer(container.getEntrypoint(), container.getProvider().getMetadata().getId()));
} catch (Throwable t) {
EmiLog.error("Critical exception thrown when constructing EMI Plugin from mod " + container.getProvider().getMetadata().getId());
EmiLog.error(t);
}
}
return list;
}

@Override
Expand Down
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.4
enabled_platforms=fabric,forge

archives_base_name=emi
mod_version=1.1.10
mod_version=1.1.11
maven_group=dev.emi

architectury_version=4.9.83
Expand Down
13 changes: 13 additions & 0 deletions xplat/src/main/java/dev/emi/emi/jemi/JemiUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@

import java.util.List;
import java.util.Optional;
import java.util.Set;

import com.google.common.collect.Sets;

import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.platform.EmiAgnos;
import dev.emi.emi.registry.EmiPluginContainer;
import dev.emi.emi.runtime.EmiLog;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.fabric.ingredients.fluids.IJeiFluidIngredient;
import mezz.jei.api.helpers.IPlatformFluidHelper;
Expand Down Expand Up @@ -81,4 +86,12 @@ public static IPlatformFluidHelper getFluidHelper() {
public static IIngredientType getFluidType() {
return getFluidHelper().getFluidIngredientType();
}

public static Set<String> getHandledMods() {
Set<String> set = Sets.newHashSet();
for (EmiPluginContainer plugin : EmiAgnos.getPlugins()) {
set.add(plugin.id());
}
return set;
}
}
11 changes: 10 additions & 1 deletion xplat/src/main/java/dev/emi/emi/mixin/jei/PluginCallerMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.google.common.collect.Sets;

import dev.emi.emi.EmiPort;
import dev.emi.emi.jemi.JemiUtil;
import mezz.jei.api.IModPlugin;
import mezz.jei.library.load.PluginCaller;
import net.minecraft.util.Identifier;
Expand All @@ -24,12 +25,15 @@ public class PluginCallerMixin {
private static final Set<Identifier> SKIPPED = Sets.newHashSet(
EmiPort.id("jei", "minecraft"), EmiPort.id("jei", "gui"), EmiPort.id("jei", "fabric_gui"), EmiPort.id("jei", "forge_gui")
);
@Unique
private static final Set<String> SKIPPED_MODS = JemiUtil.getHandledMods();

@Redirect(at = @At(value = "INVOKE", target = "java/util/function/Consumer.accept(Ljava/lang/Object;)V"),
method = "callOnPlugins", remap = false)
private static void callOnPlugins(Consumer<IModPlugin> target, Object value, String title, List<IModPlugin> plugins, Consumer<IModPlugin> func) {
IModPlugin plugin = (IModPlugin) value;
if (SKIPPED.contains(plugin.getPluginUid())) {
Identifier uid = plugin.getPluginUid();
if (SKIPPED.contains(uid)) {
switch (title) {
case "Registering categories" -> {}
case "Registering ingredients" -> {}
Expand All @@ -38,6 +42,11 @@ private static void callOnPlugins(Consumer<IModPlugin> target, Object value, Str
case "Sending Runtime Unavailable" -> {}
default -> { return; }
}
} else if (uid != null) {
String namespace = uid.getNamespace();
if (SKIPPED_MODS.contains(namespace) && !namespace.equals("jei") && !namespace.equals("emi")) {
return;
}
}
target.accept(plugin);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,10 @@ public void apply(PlayerEntity player) {
for (int i = 0; i < crafting.size(); i++) {
Slot s = crafting.get(i);
if (s != null && s.canTakeItems(player) && !s.getStack().isEmpty()) {
rubble.add(s.getStack().copy());
ItemStack taken = s.getStack();
rubble.add(taken.copy());
s.setStack(ItemStack.EMPTY);
s.onTakeItem(player, taken);
}
}
try {
Expand Down Expand Up @@ -223,13 +225,15 @@ private static int grabMatching(PlayerEntity player, List<Slot> slots, List<Item
ItemStack st = s.getStack();
if (ItemStack.canCombine(stack, st)) {
int wanted = amount - grabbed;
ItemStack taken = st.copy();
if (st.getCount() <= wanted) {
grabbed += st.getCount();
s.setStack(ItemStack.EMPTY);
} else {
grabbed = amount;
st.setCount(st.getCount() - wanted);
}
s.onTakeItem(player, taken);
}
}
return grabbed;
Expand Down
16 changes: 14 additions & 2 deletions xplat/src/main/java/dev/emi/emi/registry/EmiStackList.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet;
import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap;
import net.minecraft.block.Block;
import net.minecraft.client.MinecraftClient;
import net.minecraft.fluid.FlowableFluid;
Expand Down Expand Up @@ -74,14 +75,25 @@ public static void reload() {
}
}
if (EmiConfig.indexSource != IndexSource.REGISTERED) {
// There is an unwritten convention that ItemGroup.updateEntries is only invoked on the main thread
long groupReloadStart = System.currentTimeMillis();
EmiLog.info("Reloading item groups on client thread...");
Map<ItemGroup, Collection<ItemStack>> itemGroupToStacksMap = client.submit(() -> {
Map<ItemGroup, Collection<ItemStack>> map = new Reference2ReferenceOpenHashMap<>();
for (ItemGroup group : ItemGroups.getGroups()) {
group.updateEntries(context);
map.put(group, group.getSearchTabStacks());
}
return map;
}).join();
EmiLog.info("Reloading item groups on client thread took " + (System.currentTimeMillis() - groupReloadStart) + "ms");
for (ItemGroup group : ItemGroups.getGroups()) {
String groupName = "null";
try {
groupName = group.getDisplayName().getString();
group.updateEntries(context);
Object2IntMap<String> usedNamespaces = new Object2IntOpenHashMap<>();
IndexGroup ig = new IndexGroup();
Collection<ItemStack> searchStacks = group.getSearchTabStacks();
Collection<ItemStack> searchStacks = itemGroupToStacksMap.get(group);
for (ItemStack stack : searchStacks) {
EmiStack es = EmiStack.of(stack);
String namespace = es.getId().getNamespace();
Expand Down
11 changes: 9 additions & 2 deletions xplat/src/main/java/dev/emi/emi/screen/EmiScreenManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -835,6 +835,9 @@ private static void renderSlotOverlays(EmiDrawContext context, int mouseX, int m
context.push();
context.matrices().translate(hsa.getX(), hsa.getY(), 0);
for (Slot slot : hs.getScreenHandler().slots) {
if (!slot.isEnabled()) {
continue;
}
EmiStack stack = EmiStack.of(slot.getStack());
context.push();
context.matrices().translate(0, 0, 300);
Expand Down Expand Up @@ -935,10 +938,14 @@ public static boolean mouseClicked(double mouseX, double mouseY, int button) {
return false;
}
recalculate();
EmiIngredient ingredient = getHoveredStack((int) mouseX, (int) mouseY, false).getStack();
EmiIngredient ingredient = getHoveredStack((int) mouseX, (int) mouseY, !isClickClicky(button)).getStack();
pressedStack = ingredient;
if (!ingredient.isEmpty()) {
return true;
// Don't cancel the event for extra mouse buttons
ingredient = getHoveredStack((int) mouseX, (int) mouseY, false).getStack();
if (!ingredient.isEmpty()) {
return true;
}
} else {
if (genericInteraction(bind -> bind.matchesMouse(button))) {
return true;
Expand Down
Loading

0 comments on commit 5095ad8

Please sign in to comment.