Tags
Creators
Details
v1.3.7-mc1.21plus+mod
Compatibility
Required content
Changes
v1.3.7
This update introduces a fully playable Snooker bot, improves bot planning and shot selection, and adds more options for adjusting difficulty and physics accuracy.
New Features
-
Added a fully playable Snooker bot!
- The bot aims to maximize its score while considering the difficulty of future shots.
- Defensive shot searches are triggered when attacking options are poor or when a snooker is needed to win.
-
Added search depth 2 for bot players.
- The bot can now simulate potential follow-up shots to make better decisions about cue-ball positioning.
- This requires additional computation but is now practical thanks to performance optimizations introduced in previous updates.
-
Added adjustable shot-force accuracy for bot players.
- Random variation can be applied to the bot's shot force, allowing players to adjust its difficulty.
- Higher accuracy makes the bot more consistent, while lower accuracy introduces more imperfections.
-
Added an adjustable collision detection accuracy setting.
- Controls how many nearby balls the physics engine checks for potential collisions.
- Higher settings reduce the risk of missed collisions, especially when balls are tightly packed together, as in Snooker, but slightly increase computational load.
- Lower settings are generally sufficient for normal gameplay and offer better performance.
Bot Improvements
-
Improved shot evaluation to favor more reasonable cue-ball positioning.
- Added penalties for simulated shots involving excessive cue-ball collisions, as complex trajectories are less predictable.
- Increased penalties for cue-ball collisions with pocket edges, where small inaccuracies can increase the risk of scratching.
- Added gradual penalties for cue-ball positions near cushions, where subsequent shots may be more difficult.
- These adjustments reduce the estimated value of risky follow-up opportunities without completely discouraging difficult or necessary shots, such as breaking up ball clusters.
-
Improved the bot's simulation and evaluation scheduler to reduce unexpected deadlocks and interruptions.
Technical Improvements
-
Added direct position updates using entity NBT as an alternative to teleportation-based ball movement.
- Simplifies movement calculations, improves positioning accuracy, and reduces the number of commands needed to update ball positions.
- In testing, average motion load decreased by 44.8%, making the new method approximately 1.8× faster.
- However, the original teleportation method truncates small displacements, leaving a slight separation between balls. The more precise NBT method reduces this separation, potentially increasing the likelihood of balls clipping through each other due to numerical errors.
- This feature is disabled by default. To enable it, run
/function app:settings/pool/motion/use_nbt.
-
For Minecraft 1.17+, Snooker now uses marker entities instead of area effect clouds where applicable.
Other Changes
-
Removed Simulate ASAP mode.
- Distributing simulations across multiple game ticks now provides a more practical way to manage computational load.
- Maintaining a separate ASAP simulation path is no longer worthwhile, especially with the introduction of more advanced planning.
-
Removed the option to choose between 5 and 10 force/spin combinations per shot and the default is set to 10 combinations, simplifying bot configuration.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:mksguUIH:klECfORg"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:mksguUIH:klECfORg"
}

