From fd1678dbc9c61ad71c4008566c3f910e65916368 Mon Sep 17 00:00:00 2001 From: hortiSquash <45213805+hortiSquash@users.noreply.github.com> Date: Wed, 17 Nov 2021 15:35:36 +0100 Subject: [PATCH] Unloading into plast belts - bug fix (#6347) * hortiloaders hotfix randomness Improved the unloaders' balance with multiple blocks having the same load * deterministic lets go Co-Authored-By: citrusMarmelade <20476281+citrusMarmelade@users.noreply.github.com> * update contributors forgot to add them since they helped a lot for the previous commits/PRs * unloader - fix cant load Co-authored-by: citrusMarmelade <20476281+citrusMarmelade@users.noreply.github.com> --- .../world/blocks/storage/Unloader.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/world/blocks/storage/Unloader.java b/core/src/mindustry/world/blocks/storage/Unloader.java index bf70385092..206d732efa 100644 --- a/core/src/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/mindustry/world/blocks/storage/Unloader.java @@ -143,12 +143,18 @@ public class Unloader extends Block{ } //sort so it gives full priority to blocks that can give but not receive (stackConveyors and Storage), and then by load, and then by last use - possibleBlocks.sort(Structs.comps( - Structs.comparingBool(e -> e.building.block.highUnloadPriority), + possibleBlocks.sort( Structs.comps( - Structs.comparingFloat(e -> e.loadFactor), - Structs.comparingInt(e -> -lastUsed[e.index]) - ))); + Structs.comps( + Structs.comparingBool(e -> e.building.block.highUnloadPriority && !e.canLoad), + Structs.comparingBool(e -> e.canUnload && !e.canLoad) + ), + Structs.comps( + Structs.comparingFloat(e -> e.loadFactor), + Structs.comparingInt(e -> -lastUsed[e.index]) + ) + ) + ); ContainerStat dumpingFrom = null; ContainerStat dumpingTo = null; @@ -175,7 +181,7 @@ public class Unloader extends Block{ } //trade the items - if(dumpingFrom != null && dumpingTo != null && (dumpingFrom.loadFactor != dumpingTo.loadFactor || dumpingFrom.building.block.highUnloadPriority)){ + if(dumpingFrom != null && dumpingTo != null && (dumpingFrom.loadFactor != dumpingTo.loadFactor || !dumpingFrom.canLoad)){ dumpingTo.building.handleItem(this, item); dumpingFrom.building.removeStack(item, 1); lastUsed[dumpingFrom.index] = 0;