Skip to content

Commit

Permalink
Merge pull request #106 from GTNewHorizons/fixFluidPatterns
Browse files Browse the repository at this point in the history
Fix modifying fluid patterns with OC
  • Loading branch information
Dream-Master authored Aug 11, 2023
2 parents 2a311a8 + a3eccfb commit 91c32e5
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 19 deletions.
61 changes: 42 additions & 19 deletions src/main/scala/li/cil/oc/integration/appeng/ConverterPattern.java
Original file line number Diff line number Diff line change
@@ -1,38 +1,61 @@
package li.cil.oc.integration.appeng;

import appeng.api.AEApi;
import appeng.helpers.PatternHelper;
import appeng.util.Platform;
import java.util.HashMap;
import java.util.Map;
import li.cil.oc.api.driver.Converter;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;

public final class ConverterPattern implements Converter {
@Override
public void convert(final Object value, final Map<Object, Object> output) {
if (value instanceof ItemStack) {
ItemStack is = (ItemStack) value;
try {
PatternHelper p = new PatternHelper(is, null);
Map[] inputs = new Map[p.getInputs().length];
for (int i = 0; i < p.getInputs().length; ++i) {
inputs[i] = new HashMap<>();
if (p.getInputs()[i] == null) continue;
ItemStack input = p.getInputs()[i].getItemStack();
inputs[i].put("name", input.getItem().getItemStackDisplayName(input));
inputs[i].put("count", input.stackSize);
}
output.put("inputs", inputs);
Map[] results = new Map[p.getOutputs().length];
for (int i = 0; i < p.getOutputs().length; ++i) {
results[i] = new HashMap<>();
if (p.getOutputs()[i] == null) continue;
ItemStack result = p.getOutputs()[i].getItemStack();
results[i].put("name", result.getItem().getItemStackDisplayName(result));
results[i].put("count", result.stackSize);
final NBTTagCompound encodedValue = is.getTagCompound();
if (encodedValue != null) {
final NBTTagList inTag = encodedValue.getTagList("in", 10);
final NBTTagList outTag = encodedValue.getTagList("out", 10);

Map[] inputs = new Map[inTag.tagCount()];
for (int i = 0; i < inTag.tagCount(); i++) {
inputs[i] = new HashMap<>();
final NBTTagCompound tag = inTag.getCompoundTagAt(i);
final ItemStack inputItem = Platform.loadItemStackFromNBT(tag);
if (inputItem != null) {
inputs[i].put("name", inputItem.getItem().getItemStackDisplayName(inputItem));
if (tag.getLong("Cnt") > 0) {
inputs[i].put("count", tag.getLong("Cnt"));
} else {
inputs[i].put("count", inputItem.stackSize);
}
}
}

Map[] results = new Map[outTag.tagCount()];
for (int i = 0; i < outTag.tagCount(); i++) {
results[i] = new HashMap<>();
final NBTTagCompound tag = outTag.getCompoundTagAt(i);
final ItemStack outputItem = Platform.loadItemStackFromNBT(tag);
if (outputItem != null) {
results[i].put("name", outputItem.getItem().getItemStackDisplayName(outputItem));
if (tag.getLong("Cnt") > 0) {
results[i].put("count", tag.getLong("Cnt"));
} else {
results[i].put("count", outputItem.stackSize);
}
}
}
output.put("inputs", inputs);
output.put("outputs", results);
output.put("isCraftable", encodedValue.getBoolean("crafting"));
}
output.put("outputs", results);
output.put("isCraftable", p.isCraftable());
} catch (final Throwable ignored) {

}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ object DriverBlockInterface extends DriverSidedTileEntity {
val nbt = new NBTTagCompound()
stack.writeToNBT(nbt)
nbt.setInteger("Count", stack.stackSize)
nbt.setLong("Cnt", stack.stackSize)
inTag.func_150304_a(index, nbt)
}
else
Expand Down

0 comments on commit 91c32e5

Please sign in to comment.