Skip to content

Commit

Permalink
Fixed a bug that would cause the quantum crafter to sometimes lose it…
Browse files Browse the repository at this point in the history
…s entire nbt data if patterns had remaining items
  • Loading branch information
pedroksl committed Sep 29, 2024
1 parent 70aac1c commit bf9e1e9
Showing 1 changed file with 38 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -286,11 +286,15 @@ private boolean hasCraftWork() {

private int maximumCraftableAmount(CraftingJob job) {
if (this.getGridNode() == null) return 0;
if (job == null || job.pattern == null) return 0;

var inputs = job.pattern.getInputs();
var outputs = job.pattern.getOutputs();

var grid = this.getGridNode().getGrid();

int totalCrafts = MAX_CRAFT_AMOUNT;
for (var input : job.pattern.getInputs()) {
for (var input : inputs) {
var minStock = job.minimumInputToKeep(input);

var success = false;
Expand Down Expand Up @@ -325,7 +329,7 @@ private int maximumCraftableAmount(CraftingJob job) {
}
}

var output = job.pattern.getOutputs().getFirst();
var output = outputs.getFirst();
var maxStock = job.limitMaxOutput;
if (maxStock > 0) {
var extracted = grid.getStorageService()
Expand Down Expand Up @@ -442,6 +446,10 @@ private void performCrafts(int maxCrafts) {

private void performCraft(CraftingJob job, int toCraft) {
if (this.getGridNode() == null) return;
if (job == null || job.pattern == null) return;

var inputs = job.pattern.getInputs();
var outputs = job.pattern.getOutputs();

List<Long> requiredPerCraft = new ArrayList<>();
List<GenericStack> extractedItems = new ArrayList<>();
Expand All @@ -450,7 +458,7 @@ private void performCraft(CraftingJob job, int toCraft) {
var storage = grid.getStorageService();

// Extract all the items from ME Storage
for (var input : job.pattern.getInputs()) {
for (var input : inputs) {
for (var genInput : input.getPossibleInputs()) {
var inputAmount = input.getMultiplier() * genInput.amount();

Expand All @@ -466,7 +474,7 @@ private void performCraft(CraftingJob job, int toCraft) {
}

// Check how many complete recipes were extracted
var completeRecipes = extractedItems.size() == job.pattern.getInputs().length ? toCraft : 0;
var completeRecipes = extractedItems.size() == inputs.length ? toCraft : 0;
for (var x = 0; x < extractedItems.size(); x++) {
if (!job.isInputConsumed(extractedItems.get(x))) {
continue;
Expand All @@ -478,7 +486,7 @@ private void performCraft(CraftingJob job, int toCraft) {
}

// Create outputs and put them in output slots
for (var output : job.pattern.getOutputs()) {
for (var output : outputs) {
if (output.what() instanceof AEItemKey key) {
var stack = key.toStack();
stack.setCount((int) job.outputAmountPerCraft(output) * completeRecipes);
Expand Down Expand Up @@ -653,17 +661,21 @@ public void saveAdditional(CompoundTag data, HolderLookup.Provider registries) {
}
data.put("enabledPatterns", enabledTags);

ListTag jobTags = new ListTag();
for (var job : craftingJobs) {
CompoundTag tag = new CompoundTag();
if (job != null) {
job.writeToNBT(tag, registries);
jobTags.add(tag);
} else {
jobTags.add(tag);
try {
ListTag jobTags = new ListTag();
for (var job : craftingJobs) {
CompoundTag tag = new CompoundTag();
if (job != null) {
job.writeToNBT(tag, registries);
jobTags.add(tag);
} else {
jobTags.add(tag);
}
}
data.put("craftingJobs", jobTags);
} catch (NullPointerException ignored) {

}
data.put("craftingJobs", jobTags);

this.upgrades.writeToNBT(data, "upgrades", registries);
this.configManager.writeToNBT(data, registries);
Expand All @@ -689,12 +701,14 @@ public void loadTag(CompoundTag data, HolderLookup.Provider registries) {
}
}

ListTag jobTags = data.getList("craftingJobs", Tag.TAG_COMPOUND);
if (!jobTags.isEmpty()) {
for (var x = 0; x < jobTags.size(); x++) {
CompoundTag tag = ((CompoundTag) jobTags.get(x));
if (!tag.isEmpty()) {
craftingJobs.set(x, CraftingJob.fromTag(tag, registries));
if (data.contains("craftingJobs")) {
ListTag jobTags = data.getList("craftingJobs", Tag.TAG_COMPOUND);
if (!jobTags.isEmpty()) {
for (var x = 0; x < jobTags.size(); x++) {
CompoundTag tag = ((CompoundTag) jobTags.get(x));
if (!tag.isEmpty()) {
craftingJobs.set(x, CraftingJob.fromTag(tag, registries));
}
}
}
}
Expand Down Expand Up @@ -916,8 +930,10 @@ private CraftingJob(
public void writeToNBT(CompoundTag data, HolderLookup.Provider registries) {
ListTag remainingTag = new ListTag();
for (var item : remainingItems) {
if (item == null || item.isEmpty()) continue;

CompoundTag itemTag = new CompoundTag();
item.save(registries, itemTag);
itemTag = (CompoundTag) item.save(registries, itemTag);
remainingTag.add(itemTag);
}
data.put("remainingItems", remainingTag);
Expand Down Expand Up @@ -1092,7 +1108,7 @@ private List<ItemStack> getRemainingItems() {
}
}
}
return finalList;
return Collections.unmodifiableList(finalList);
}
}
}

0 comments on commit bf9e1e9

Please sign in to comment.