跳到主要内容

条件

自定义条件在 startup_scripts/ 中注册,并由 Origins 的 JSON 数据文件调用。


注册方法​

方法回调签名JSON 类型
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

回调 必须返回 true 或 false。id 在 JS 与 JSON 中必须保持一致。


JSON 格式​

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

实体条件​

OriginsJS.registerEntityCondition("is_in_nether", (entity, params) => {
return entity.level.dimension().location().toString() === "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"
}
}

方块条件​

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

物品条件​

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

双实体条件​

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;
});

伤害条件​

OriginsJS.registerDamageCondition("bypass_shield", (source, amount, params) => {
// 1.20.1: use source.is(tag) instead of source.isMagic()
if (source.is(net.minecraft.tags.DamageTypeTags.IS_MAGIC)) return true;
return amount > 5.0;
});