Skip to content

Commit 826041e

Browse files
committed
Merge branch '1.19.3' into 1.19.2
2 parents 8aee32a + 977a61c commit 826041e

File tree

12 files changed

+174
-80
lines changed

12 files changed

+174
-80
lines changed

CHANGELOG.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
### Additions
2+
* List ingredients can now be serialized (and can be coerced into other ingredients)
3+
14
### Tweaks
2-
* Large amounts are now separated at and easier to read in EMI
3-
* Synthetic favorites no longer overlap with large counts, now use a microfont and display an approximate value
5+
* Recipe tree should be more conscious of catalyst ingredients, no longer requesting redundant tag ingredients
6+
* Empty/full search focus now does not trigger on random inputs
47

58
### Fixes
6-
* Fixed overlapping digits in synfavs #721
7-
* Fixed EMI on a server requiring clients to have EMI on NeoForge #889
8-
* Fixed overlap synfav count #905
9-
* Fixed recipe fill not respecting maximum stack size #906
9+
* Recipe fills no longer break when filling max stack size #915

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ minecraft_version=1.19.2
44
enabled_platforms=fabric,forge
55

66
archives_base_name=emi
7-
mod_version=1.1.21
7+
mod_version=1.1.22
88
maven_group=dev.emi
99

1010
architectury_version=4.9.83

xplat/src/main/java/dev/emi/emi/VanillaPlugin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import dev.emi.emi.api.stack.EmiStack;
4848
import dev.emi.emi.api.stack.FluidEmiStack;
4949
import dev.emi.emi.api.stack.ItemEmiStack;
50+
import dev.emi.emi.api.stack.ListEmiIngredient;
5051
import dev.emi.emi.api.stack.TagEmiIngredient;
5152
import dev.emi.emi.api.widget.Bounds;
5253
import dev.emi.emi.api.widget.GeneratedSlotWidget;
@@ -93,6 +94,7 @@
9394
import dev.emi.emi.runtime.EmiReloadLog;
9495
import dev.emi.emi.stack.serializer.FluidEmiStackSerializer;
9596
import dev.emi.emi.stack.serializer.ItemEmiStackSerializer;
97+
import dev.emi.emi.stack.serializer.ListEmiIngredientSerializer;
9698
import dev.emi.emi.stack.serializer.TagEmiIngredientSerializer;
9799
import net.minecraft.block.Block;
98100
import net.minecraft.block.BlockState;
@@ -208,6 +210,7 @@ public void initialize(EmiInitRegistry registry) {
208210
registry.addIngredientSerializer(ItemEmiStack.class, new ItemEmiStackSerializer());
209211
registry.addIngredientSerializer(FluidEmiStack.class, new FluidEmiStackSerializer());
210212
registry.addIngredientSerializer(TagEmiIngredient.class, new TagEmiIngredientSerializer());
213+
registry.addIngredientSerializer(ListEmiIngredient.class, new ListEmiIngredientSerializer());
211214

212215
registry.addRegistryAdapter(EmiRegistryAdapter.simple(Item.class, EmiPort.getItemRegistry(), EmiStack::of));
213216
registry.addRegistryAdapter(EmiRegistryAdapter.simple(Fluid.class, EmiPort.getFluidRegistry(), EmiStack::of));

xplat/src/main/java/dev/emi/emi/api/stack/ListEmiIngredient.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,9 @@ public List<TooltipComponent> getTooltip() {
106106
tooltip.addAll(ingredients.get(item).copy().setAmount(amount).getTooltip());
107107
return tooltip;
108108
}
109+
110+
@ApiStatus.Internal
111+
public List<? extends EmiIngredient> getIngredients() {
112+
return ingredients;
113+
}
109114
}

xplat/src/main/java/dev/emi/emi/bom/MaterialNode.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class MaterialNode {
1919
public long amount = 1;
2020
public long divisor = 1;
2121
public long remainderAmount = 0;
22+
public boolean catalyst = false;
2223
// Should these be decoupled from material nodes?
2324
public FoldState state = FoldState.EXPANDED;
2425
public ProgressState progress = ProgressState.UNSTARTED;
@@ -34,6 +35,14 @@ public MaterialNode(EmiIngredient ingredient) {
3435
} else {
3536
this.remainder = EmiStack.EMPTY;
3637
}
38+
out: {
39+
for (EmiStack stack : ingredient.getEmiStacks()) {
40+
if (!stack.getRemainder().equals(stack)) {
41+
break out;
42+
}
43+
}
44+
catalyst = true;
45+
}
3746
}
3847

3948
public MaterialNode(MaterialNode node) {

xplat/src/main/java/dev/emi/emi/bom/TreeCost.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,6 @@ public void calculateProgress(MaterialNode node, long batches, EmiPlayerInventor
3737
calculateCost(node, batches * node.amount, ChanceState.DEFAULT, true);
3838
}
3939

40-
public static boolean isCatalyst(EmiIngredient ing) {
41-
if (ing.getEmiStacks().size() == 1) {
42-
EmiStack stack = ing.getEmiStacks().get(0);
43-
if (stack.equals(stack.getRemainder())) {
44-
return true;
45-
}
46-
}
47-
return false;
48-
}
49-
5040
private void addCost(EmiIngredient stack, long amount, long minBatch, ChanceState chance) {
5141
if (chance.chanced()) {
5242
if (chanceCosts.containsKey(stack)) {
@@ -170,15 +160,18 @@ private void calculateCost(MaterialNode node, long amount, ChanceState chance, b
170160
node.totalNeeded = 0;
171161
node.neededBatches = 0;
172162
}
163+
boolean catalyst = node.catalyst;
164+
if (catalyst) {
165+
amount = node.amount;
166+
}
173167
EmiRecipe recipe = node.recipe;
174-
if (recipe instanceof EmiResolutionRecipe) {
168+
if (recipe instanceof EmiResolutionRecipe err) {
175169
calculateCost(node.children.get(0), amount, chance, trackProgress);
170+
if (catalyst) {
171+
addRemainder(err.stack, amount, chance);
172+
}
176173
return;
177174
}
178-
boolean catalyst = isCatalyst(node.ingredient);
179-
if (catalyst) {
180-
amount = node.amount;
181-
}
182175
long original = amount;
183176
List<EmiStack> ingredientStacks = node.ingredient.getEmiStacks();
184177
for (int i = 0; i < ingredientStacks.size(); i++) {
@@ -229,7 +222,7 @@ private void calculateCost(MaterialNode node, long amount, ChanceState chance, b
229222

230223
for (MaterialNode n : node.children) {
231224
if (!n.remainder.isEmpty() && n.remainderAmount > 0) {
232-
if (isCatalyst(n.ingredient)) {
225+
if (n.catalyst) {
233226
addRemainder(n.remainder, n.remainderAmount, produced.consume(n.consumeChance));
234227
} else {
235228
addRemainder(n.remainder, minBatches * n.remainderAmount, produced.consume(n.consumeChance));

xplat/src/main/java/dev/emi/emi/network/FillRecipeC2SPacket.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public void apply(PlayerEntity player) {
134134
return;
135135
} else {
136136
Slot s = crafting.get(i);
137-
if (s != null && s.canInsert(stack) && stack.getCount() <= s.getMaxItemCount() && stack.getCount() < stack.getMaxCount()) {
137+
if (s != null && s.canInsert(stack) && stack.getCount() <= s.getMaxItemCount() && stack.getCount() <= stack.getMaxCount()) {
138138
s.setStack(stack);
139139
} else {
140140
player.getInventory().offerOrDrop(stack);

xplat/src/main/java/dev/emi/emi/registry/EmiIngredientSerializers.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public static EmiIngredient deserialize(JsonElement element) {
6363
}
6464
}
6565
type = json.get("type").getAsString();
66+
} else if (element.isJsonArray()) {
67+
type = "list";
6668
} else {
6769
String[] split = element.getAsString().split(":");
6870
type = split[0];

xplat/src/main/java/dev/emi/emi/screen/BoMScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ public int getNodeHeight(MaterialNode node) {
308308
}
309309

310310
public TreeVolume addNewNodes(MaterialNode node, long multiplier, long divisor, int depth, ChanceState chance) {
311-
if (TreeCost.isCatalyst(node.ingredient)) {
311+
if (node.catalyst) {
312312
multiplier = node.amount;
313313
} else {
314314
multiplier = node.amount * (int) Math.ceil(multiplier / (float) divisor);

xplat/src/main/java/dev/emi/emi/screen/widget/EmiSearchWidget.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ public void swap() {
145145

146146
@Override
147147
public void setFocused(boolean focused) {
148+
if (focused == isFocused) {
149+
return;
150+
}
148151
if (!focused) {
149152
searchHistoryIndex = 0;
150153
String currentSearch = getText();

0 commit comments

Comments
 (0)