All versions
1.0.4-beta
Beta
Onioning API 1.0.4-betalast week 10
Compatibility
Minecraft: Java Edition
1.21.1
Platform
NeoForge
Supported environments
Server-side
Client and server
Changes
Changelog
🆕 New pointers
eget{point_name}— extracts a UUID from a saved variable. Works likeget, but returns a UUID instead of coordinates. Used as a text selector forkill,tp, etc.
✏️ Changes to existing pointers
elook{@s}[nick]— added the[nick]modifier. Without it, behavior is unchanged (returns the UUID of the first entity hit); with it, returns the player's nickname if a player was hit, otherwise the UUID of a non-player entity.
🧮 New math functions
Vector arithmetic:
add{a}{b}— component-wise sumsub{a}{b}— subtractionmul{a}{b}— component-wise multiplicationdiv{a}{b}— component-wise division (zero divisor → 0)
Angles:
face{a}{b}→yaw pitchfrom A to Byaw{a}{b}→ yaw onlypitch{a}{b}→ pitch only
Random vectors:
rUnit[scale]— random unit vector on the sphere (uniform), multiplied byscalerCone{axis}[angle]— random vector inside a cone (cosine-weighted by solid angle)rRing{center}[radius]— random point on a horizontal ring
Offsets:
bodyOffset{base}{dir}[right up forward]— offset in a horizontal framelocalOffset{base}{dir}[right up forward]— offset in a full 3D frame relative todir
World functions:
under{base}— same XZ, but Y = surface height (Heightmap MOTION_BLOCKING)hit{a}{b}— raycast between two points, returns the hit point (block or entity — whichever is closer)
🔁 New parser features
Loops:
[N]— repeat N times with no delay[N:delay]— repeat N times with delay between iterations
Loop variables:
t{}— progress 0.0..1.0i{}— current indexn{}— total iterationst{1},i{1},n{1}— access the outer loop for nested constructs
⚠️ Error handling
nothing— the miss marker. If any function returnsnothing, the whole expression collapses tonothing, and the command is not executed (if the final string contains anothingtoken). This lets you write safe chains that don't break on missing targets.
Список изменений
🆕 Новые указатели
eget{имя_точки}— достаёт UUID из сохранённой переменной. Работает какget, но возвращает UUID вместо координат. Используется как текстовый селектор дляkill,tpи т.д.
✏️ Изменения в существующих указателях
elook{@s}[nick]— добавлен модификатор[nick]. Без него поведение прежнее (возвращает UUID первой попавшейся сущности), с ним — ник игрока, если попали в игрока, иначе UUID не-игрока.
🧮 Новые математические функции
Арифметика векторов:
add{a}{b}— покомпонентное сложениеsub{a}{b}— вычитаниеmul{a}{b}— покомпонентное умножениеdiv{a}{b}— покомпонентное деление (делитель 0 → 0)
Углы:
face{a}{b}→yaw pitchот A к Byaw{a}{b}→ только yawpitch{a}{b}→ только pitch
Случайные вектора:
rUnit[scale]— случайный единичный вектор на сфере (равномерное распределение), умноженный наscalerCone{ось}[угол]— случайный вектор внутри конуса (косинусное распределение по телесному углу)rRing{центр}[радиус]— случайная точка на горизонтальном кольце
Смещения:
bodyOffset{база}{направление}[right up forward]— смещение в горизонтальной системе координатlocalOffset{база}{направление}[right up forward]— смещение в полной 3D-системе относительно направления
Мировые функции:
under{база}— та же XZ, но Y = высота поверхности (Heightmap MOTION_BLOCKING)hit{a}{b}— рейкаст между двумя точками, возвращает точку попадания (в блок или сущность — что ближе)
🔁 Новые возможности парсера
Циклы:
[N]— повторить N раз без задержки[N:delay]— повторить N раз с задержкой между итерациями
Переменные цикла:
t{}— прогресс 0.0..1.0i{}— текущий индексn{}— всего итерацийt{1},i{1},n{1}— обращение к внешнему циклу для вложенных конструкций
⚠️ Обработка ошибок
nothing— маркер промаха. Если любая функция вернулаnothing, всё выражение сворачивается вnothing, а команда не выполняется (если в итоговой строке есть токенnothing). Это позволяет писать безопасные цепочки без обрыва на несуществующих целях.
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:bowZpqfK:CUraN15c"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:bowZpqfK:CUraN15c"
}

