The easiest reproduction is:
which fails. If "Half a Purse" is changed to "Bag o' Tricks" (which has a straight +15% meat bonus), it succeeds.
Changing MaximizerSpeculation.getScore to always recalculate the score and never use the cached value passes, but isn't ideal.
Code:
@Test
public void shouldntUnequipWeapon() {
var cleanups = new Cleanups(withEquipped(EquipmentManager.WEAPON, "seal-clubbing club"), withEquippableItem("Half a Purse"));
try (cleanups) {
assertTrue(maximize("meat"));
recommendedSlotIsUnchanged(EquipmentManager.WEAPON);
}
}
Changing MaximizerSpeculation.getScore to always recalculate the score and never use the cached value passes, but isn't ideal.