Players are able to go past +16 (+16 being default max), details below:
Single-click enchant is fine. RequestEnchantItem calls isUsableWith() every attempt and rejects the item once it is already +16.
Auto-enchant goes through MultiEnchant$Session in GiranForgeInterface.ext.jar. The client sends a target level, and that target is not clamped to scroll max / EnchantMax (16). Then:
isUsableWith()is checked once at the start (passes at +15 or lower).The loop is
while (item.getEnchantLevel() < target)and just +1s on success.The cap is never re-checked inside the loop.
The increment clamp only runs when
getIncrement() > 1. Normal weapon scrolls useincrement=1, so it never runs.
If the client target is 18: +15 → +16 → +17 → +18. Chance tables also do not go to 0 after +16 — they clamp to the last row, so +16 and +17 still roll at 30%.
EnchantMax = 16 in other.properties is only the XML default when a scroll has no <levels max>. It is not a runtime hard cap.