Single Jack/Bishop with a buy rule for Bishop to only buy it if we're already sick of Silver and trash the Jack if we're greening:
# Buys Jack/Bishop and otherwise plays a version of Big Money.
#
# This has no Colony rules, because it would be a terrible strategy in
# Colony games.
{
name: 'JackBishop'
author: 'rspeer'
requires: ["Jack of All Trades", "Bishop"]
gainPriority: (state, my) -> [
"Province" if my.getTotalMoney() > 15
"Duchy" if state.gainsToEndGame() <= 5
"Estate" if state.gainsToEndGame() <= 2
"Gold"
"Jack of All Trades" if my.countInDeck("Jack of All Trades") < 1
"Bishop" if my.countInDeck("Bishop") < 1 and my.countInDeck("Silver") > 6
"Silver"
]
bishopTrashPriority: (state, my) -> [
"Gold" if this.goingGreen(state) > 0 and state.current.getAvailableMoney() > 7
"Silver" if this.goingGreen(state) > 0 and state.current.getAvailableMoney() > 7
"Jack of All Trades" if this.goingGreen(state) > 0
"Bishop" if this.goingGreen(state) > 0
"Duchy" if this.goingGreen(state) < 3
]
}
This is even money with DoubleJack, but can possibly be tweaked for better results.
To be honest, it doesn't buy Bishop all that often due to the high restriction and when it does, it plays it maybe just one time if that.
This made me look at a very good bot to combat DoubleJack:
# Buys one Jack of All Trades and otherwise plays a version of Big Money.
#
# This has no Colony rules, because it would be a terrible strategy in
# Colony games.
{
name: 'SingleJack'
author: 'rspeer'
requires: ["Jack of All Trades"]
gainPriority: (state, my) -> [
"Province" if my.getTotalMoney() > 15
"Duchy" if state.gainsToEndGame() <= 5
"Estate" if state.gainsToEndGame() <= 2
"Gold"
"Jack of All Trades" if my.countInDeck("Jack of All Trades") < 1
"Silver"
]
}
That's right, it's SingleJack and it's even money with DoubleJack (even slightly better in my sim run of ~5000 games, but the margin is within 1%).