Links
Tags
Creators
Details
1.0.0
Compatibility
Required content
Changes
Bad Throws
A Fabric mod that always returns extreme projectile vector values.
How ?
When choosing what velocity to give a projectile, Minecraft does the following:
public Vec3 getMovementToShoot(final double xd, final double yd, final double zd, final float pow, final float uncertainty) {
return (new Vec3(xd, yd, zd)).normalize().add(this.random.triangle((double)0.0F, 0.0172275 * (double)uncertainty), this.random.triangle((double)0.0F, 0.0172275 * (double)uncertainty), this.random.triangle((double)0.0F, 0.0172275 * (double)uncertainty)).scale((double)pow);
}
The above code adds an offset with a triangle distribution of bounds 0.0172275 * uncertainty in each axis. See the Minecraft Wiki for uncertainty values per-projectile.
This creates a cube of possible vector end-points, where values closer to the center are linearly more likely. With the mod, every projectile's throw angle vector will be on one of the 8 corners of the cube, emulating a theoretically possible throw.
Why ?
Most pearl or arrow lineups are luck-dependent. With a bad throw, the whole machine can break. When creating throw lineups or capturing shot or dispensed arrows, make sure that it works, even with a bad throw.
License
Copyright (C) 2026 AeshKit
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see
<https://www.gnu.org/licenses/>.
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:xFmWhpKy:vnIytALI"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:xFmWhpKy:vnIytALI"
}

