Skip to main content

Conditions

Custom conditions are registered in startup_scripts/ and invoked from Origins JSON data files.


Registration Methods

MethodCallback SignatureJSON Type
registerEntityCondition(id, pred)(Entity, JsonObject) => booleanorigins_js:js_entity_condition
registerBlockCondition(id, pred)(Level, BlockPos, JsonObject) => booleanorigins_js:js_block_condition
registerItemCondition(id, pred)(Level, ItemStack, JsonObject) => booleanorigins_js:js_item_condition
registerBiEntityCondition(id, pred)(Entity, Entity, JsonObject) => booleanorigins_js:js_bientity_condition
registerBiomeCondition(id, pred)(Holder<Biome>, BlockPos, JsonObject) => booleanorigins_js:js_biome_condition
registerDamageCondition(id, pred)(DamageSource, float, JsonObject) => booleanorigins_js:js_damage_condition
registerFluidCondition(id, pred)(FluidState, JsonObject) => booleanorigins_js:js_fluid_condition

The callback must return true or false. The id must match between JS and JSON.


JSON Format

{
"type": "origins_js:js_entity_condition",
"id": "my_condition_id",
"params": { "threshold": 10 }
}

Entity Condition

OriginsJS.registerEntityCondition("is_in_nether", (entity, params) => {
return entity.level.dimension() === "minecraft:the_nether";
});
{
"type": "origins:conditioned_attribute",
"modifier": {
"attribute": "minecraft:generic.max_health",
"operation": "addition",
"value": 10
},
"condition": {
"type": "origins_js:js_entity_condition",
"id": "is_in_nether"
}
}

Block Condition

OriginsJS.registerBlockCondition("is_air", (world, pos, params) => {
return world.getBlockState(pos).isAir();
});

Item Condition

OriginsJS.registerItemCondition("is_damaged", (world, stack, params) => {
return stack.isDamaged();
});

Bi-entity Condition

OriginsJS.registerBiEntityCondition("is_looking_at", (actor, target, params) => {
let look = actor.getLookAngle();
let toTarget = target.position().subtract(actor.position()).normalize();
return look.x * toTarget.x + look.y * toTarget.y + look.z * toTarget.z > 0.9;
});

Damage Condition

OriginsJS.registerDamageCondition("bypass_shield", (source, amount, params) => {
if (source.isMagic()) return true;
return amount > 5.0;
});