Skip to content

Commit

Permalink
Fix fluid conversion remainders
Browse files Browse the repository at this point in the history
  • Loading branch information
Meegooo committed Oct 25, 2024
1 parent f48e6f4 commit f35aabe
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,12 @@ public int dfs(String requestedKey, int requestedAmount, HashSet<BookmarkRecipeI

// Handle fluid conversion
if (node instanceof FluidConversionGraphNode fluidNode) {
String keyToRequest = fluidNode.getInputKey();
int itemAmountToRequest = fluidNode.calculateAmountToRequest(requestedKey, requestedAmount, keyToRequest);
String leftKey = fluidNode.getInputKey();
int leftAmountToRequest = fluidNode.calculateAmountToRequest(requestedKey, requestedAmount, leftKey);

int returnedItemAmount = dfs(keyToRequest, itemAmountToRequest, history);
int returnedLeftAmount = dfs(leftKey, leftAmountToRequest, history);

return fluidNode.processResults(requestedKey, keyToRequest, returnedItemAmount);
return fluidNode.processResults(requestedKey, requestedAmount, leftKey, returnedLeftAmount);
}

if (!(node instanceof RecipeGraphNode recipeNode)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,35 +73,36 @@ public Map<String, Integer> getRemainders() {
return Collections.singletonMap(displayStackGUID, fluidRemainder);
}

public int calculateAmountToRequest(String requestedKey, int requestedAmount, String inputKey) {
int outputFluidSize = conversionOutputs.get(requestedKey);
int inputFluidSize = conversionInputs.get(inputKey);
int fluidAmountToRequest = requestedAmount * outputFluidSize - fluidRemainder;
return NEIServerUtils.divideCeil(fluidAmountToRequest, inputFluidSize);
public int calculateAmountToRequest(String rightKey, int rightRequestedAmount, String leftKey) {
int rightFluidSize = conversionOutputs.get(rightKey);
int leftFluidSize = conversionInputs.get(leftKey);
int fluidAmountToRequest = rightRequestedAmount * rightFluidSize - fluidRemainder;
return NEIServerUtils.divideCeil(fluidAmountToRequest, leftFluidSize);
}

public String getInputKey() {
return conversionInputs.entrySet().stream().findFirst().get().getKey();
}

public int processResults(String outputKey, String inputKey, int inputItemReturned) {
int outputFluidSize = conversionOutputs.get(outputKey);
int inputFluidSize = conversionInputs.get(inputKey);
int fluidReturned = inputItemReturned * inputFluidSize;
int outputItemReturned = fluidReturned / outputFluidSize;
public int processResults(String rightKey, int rightAmount, String leftKey, int leftAmount) {
int rightFluidSize = conversionOutputs.get(rightKey);
int leftFluidSize = conversionInputs.get(leftKey);
int leftFluidReturned = leftAmount * leftFluidSize;
int rightFluidRequested = rightFluidSize * rightAmount;
int rightAmountReturned = leftFluidReturned / rightFluidSize;

this.fluidRemainder += Math.max(0, fluidReturned - outputItemReturned * outputFluidSize);
this.fluidRemainder += Math.max(0, leftFluidReturned - rightFluidRequested);

if (keyToEmptyContainer.containsKey(outputKey)) {
String containerKey = keyToEmptyContainer.get(outputKey);
consumedEmptyContainers.compute(containerKey, (k, v) -> (v == null ? 0 : v) + outputItemReturned);
if (keyToEmptyContainer.containsKey(rightKey)) {
String containerKey = keyToEmptyContainer.get(rightKey);
consumedEmptyContainers.compute(containerKey, (k, v) -> (v == null ? 0 : v) + rightAmountReturned);
}

if (keyToEmptyContainer.containsKey(inputKey)) {
String containerKey = keyToEmptyContainer.get(inputKey);
producedEmptyContainers.compute(containerKey, (k, v) -> (v == null ? 0 : v) + inputItemReturned);
if (keyToEmptyContainer.containsKey(leftKey)) {
String containerKey = keyToEmptyContainer.get(leftKey);
producedEmptyContainers.compute(containerKey, (k, v) -> (v == null ? 0 : v) + leftAmount);
}
return outputItemReturned;
return rightAmountReturned;
}

public Map<String, Integer> getConsumedEmptyContainers() {
Expand Down

0 comments on commit f35aabe

Please sign in to comment.