iron431 / irons-spells-n-spellbooks

Other
76 stars 57 forks source link

[Game Balancing] Alchemist Cauldron - Minor Potion Brewing Exploit #220

Closed PotionSeeker closed 4 weeks ago

PotionSeeker commented 9 months ago

Observed behaviour

This may actually be how its supposed to work, but it seemed odd to me so I'm just making sure: When using the alchemist cauldron to brew potions, there doesn't seem to be a check for the amount of water in the cauldron and taking the potion liquid doesn't deplete the amount of water in the cauldron. What ends up happening is that any amount of water acts as an infinite water supply for potion brewing; a single bottle's worth of water in the cauldron can still generate 4 potions.

As an added note: would it be possible to add a config to make the cauldron require a heat source below it and would it be possible to add an option to change brewing time for specific recipes or for cauldron brewing as a whole?

Expected behaviour

Using a bottle to collect the potion from the cauldron should deplete the cauldron by 1 bottle's worth of liquid (the cauldron should only hold 4 bottle's worth of liquid).

This change is mainly for consistency (and my own sanity) and for modpacks where water and thirst is used as a part of survival and resource management.

Steps to reproduce

(This occurs with any brewing recipe)

  1. Add water to a cauldron
  2. Add nether wart and wait until brewing is complete
  3. Use bottles to remove 4 bottles of awkward potion
  4. There are still 4 bottles worth of water left in the cauldron

Server Type

Single Player

Crashlog

No response

Iron's Spells N Spellbooks version

1.20.1-2.0.3

Forge version

1.20.1 - 47.1.3

Other mods

No response

iron431 commented 9 months ago

Right now this is the intended behavior, but I can see how it can become unbalanced with thirst mechanics. It might make more sense overall if the water level was tracked to the contents of the cauldron, although it would be very low priority due to the work required compared to the quality of the improvement it would bring.

PotionSeeker commented 9 months ago

I was just doing some testing of my own and I found that changing line 412 of 'AlchemistCauldronTile.java' was enough of a change:

Code Test

I compared the line 'if (isEmpty(storedItems))' with the following 'else' line and just added a decrement to its 'currentLevel' as well. I'm not sure if this is the way you would want to do it, but I've tested it and it doesn't seem to cause any problems. The only issue I see this causes is with blood vials or if the water level is too low when brewing (say 1 water bottle's worth). The recipe still works fine, but when you add more water, if you haven't taken the full recipe result, then the result acts like residue:

Example:

  1. Add 1 bottle of water to a cauldron
  2. Add nether wart to create awkward potion
  3. Right click with empty bottle to collect awkward potion (cauldron is emptied)
  4. Add more water
  5. The rest of the awkward potion is still there (3 bottles worth)

In one sense, this could literally be like the residue of the awkward potion is still left in the cauldron, but again, this was just a quick test and it's probably not the best solution.

iron431 commented 9 months ago

Yeah the problem isn't as simple as that, which can be seen by the residue. Basically what you're asking for is for the water level to always reflect the result item count, but that is far from how the cauldron was set up originally. Furthermore, if there are only 2 water levels, that means you must only be able to brew 2 potions instead of the full 4; which again, is not how the cauldron was set up originally. I do like the rework idea, but it would be a decent bit of a rewrite to get it there.

If you are interested in working on it yourself, my plan was to change the overall state tracking. As it stands, an empty item stack in the result slots represents water, and the water level obviously represents the amount. The change would be to change the item representing water to actual water bottles, and make the water level a reflection of how many slots are not empty. However, changing the assumption that emptiness is water, to now water bottles are water, impacts all the logic and state handling.

iron431 commented 4 weeks ago

released in 3.4.0