Filter एक हाँ-या-ना वाला सवाल है जो गेम किसी मॉब के बारे में पूछता है। "क्या हमला करने वाला प्लेयर है?" "क्या दिन है?" "क्या यह मॉब पानी में है?" अगर जवाब हाँ है, तो filter पास होता है और जिस चीज़ की वह रखवाली करता है उसे होने दिया जाता है।
Filters मॉब की फ़ाइलों में हर जगह दिखते हैं: इवेंट्स में, damage sensors और targeting जैसे कंपोनेंट में, और spawn rules में। इन्हें एक बार सीख लें और आप इन्हें हर जगह इस्तेमाल कर सकते हैं।
फ़ाइलें
Filters की अपनी कोई फ़ाइल नहीं होती। ये दूसरी फ़ाइलों के अंदर filters नाम की keys में रहते हैं (या spawn rules में biome_filter में)।
BP/
entities/
ruby_golem.json <- in events and many components
spawn_rules/
ruby_golem.json <- minecraft:biome_filterएक test
सबसे छोटा filter एक अकेला test होता है:
{ "test": "is_family", "subject": "other", "operator": "==", "value": "player" }इसे एक वाक्य की तरह पढ़ें: "क्या other एंटिटी की family player के बराबर है?"
| Field | इसका मतलब | अगर आप इसे न लिखें |
|---|---|---|
test | कौन-सा सवाल पूछना है। नीचे की टेबल देखें। | ज़रूरी है |
subject | किसके बारे में पूछना है | self |
operator | value से तुलना कैसे करनी है | equals |
value | किससे तुलना करनी है | हाँ/ना वाले tests के लिए: true |
domain | कुछ tests के लिए अतिरिक्त जानकारी, जैसे equipment slot या property का नाम | Test पर निर्भर है |
Defaults की वजह से छोटे filters आम हैं:
{ "test": "is_daytime" }
{ "test": "in_water", "value": false }
{ "test": "has_tag", "value": "wiki:tamed" }पहला पूछता है "क्या दिन है?"। दूसरा पूछता है "क्या यह मॉब पानी में नहीं है?"।
Subjects: किसकी जाँच हो रही है
| Subject | यह कौन है |
|---|---|
self | वह मॉब जिसका यह filter है |
other | Interaction में दूसरी एंटिटी: जिसे target किया जा रहा है, छुआ जा रहा है या जिससे interact हो रहा है |
player | Interaction में शामिल प्लेयर |
target | मॉब का मौजूदा target |
damager | Damage sensor में, जिसने damage किया |
parent | मॉब का parent |
block | शामिल ब्लॉक, is_block जैसे ब्लॉक tests के लिए |
कौन-से subjects सही बैठते हैं, यह filter की जगह पर निर्भर करता है। Damage sensor में other और damager हमलावर होते हैं। Targeting बिहेवियर में other वह मॉब है जिसे target बनाने पर विचार हो रहा है।
Operators: तुलना कैसे करें
| Operator | मतलब |
|---|---|
==, =, equals | बराबर (default) |
!=, <>, not | बराबर नहीं |
< | से कम |
<= | से कम या बराबर |
> | से ज़्यादा |
>= | से ज़्यादा या बराबर |
कम/ज़्यादा वाले operators सिर्फ़ actor_health या distance_to_nearest_player जैसे संख्या वाले tests के लिए सही बैठते हैं।
Tests को मिलाना
कई tests को एक group में साथ रखें:
| Group | कब पास होता है |
|---|---|
all_of | अंदर का हर test पास हो (AND) |
any_of | अंदर का कम से कम एक test पास हो (OR) |
none_of | अंदर का कोई भी test पास न हो (NOT) |
Groups में दूसरे groups भी हो सकते हैं, इसलिए आप कोई भी नियम बना सकते हैं। यह filter ऐसे प्लेयर के लिए पास होता है जो sneak नहीं कर रहा, रात में या तूफ़ान में:
"filters": {
"all_of": [
{ "test": "is_family", "subject": "other", "value": "player" },
{ "test": "is_sneaking", "subject": "other", "value": false },
{
"any_of": [
{ "test": "is_daytime", "value": false },
{ "test": "weather_at_position", "value": "thunderstorm" }
]
}
]
}खाली list का मतलब all_of
अगर आप group का नाम लिखे बिना tests की सादी list लिखते हैं, तो हर test को पास होना होगा, बिल्कुल all_of की तरह। Vanilla spawn rules अक्सर ऐसा करते हैं।
Filters कहाँ इस्तेमाल होते हैं
Damage sensor: किसने मारा, उस पर react करें
"minecraft:damage_sensor": {
"triggers": [
{
"on_damage": {
"filters": { "test": "is_family", "subject": "other", "value": "player" },
"event": "wiki:become_angry"
}
}
]
}सिर्फ़ प्लेयर ही golem को गुस्सा दिलाते हैं। मॉब, गिरने या आग से हुआ damage कुछ खास नहीं करता। देखें minecraft:damage_sensor।
Targeting: किस पर हमला करना है
"minecraft:behavior.nearest_attackable_target": {
"priority": 2,
"entity_types": [
{
"filters": {
"all_of": [
{ "test": "is_family", "subject": "other", "value": "monster" },
{ "test": "is_family", "subject": "other", "operator": "not", "value": "creeper" }
]
},
"max_dist": 16
}
]
}Golem monsters का शिकार करता है, लेकिन creepers को छोड़ देता है। देखें behavior.nearest_attackable_target।
Environment sensor: दुनिया पर react करें
"minecraft:environment_sensor": {
"triggers": [
{
"filters": { "test": "in_water" },
"event": "wiki:start_rusting"
}
]
}Environment sensor अपने filters लगातार जाँचता है और जब तक वे पास होते हैं, इवेंट fire करता है।
इवेंट्स और spawn rules
इवेंट्स के अंदर filters तय करते हैं कि कोई entry चलेगी या नहीं (देखें एंटिटी इवेंट्स)। Spawn rules में minecraft:biome_filter biomes चुनने के लिए इन्हीं tests का इस्तेमाल करता है (देखें Spawn rules)।
सबसे काम के tests
सौ से ज़्यादा tests हैं। ये वे हैं जिनकी आपको सबसे ज़्यादा ज़रूरत पड़ेगी, इस हिसाब से बाँटे गए कि वे क्या जाँचते हैं।
यह कौन है?
| Test | Value | तब पास होता है जब subject... |
|---|---|---|
is_family | Family का नाम, जैसे "player" | के minecraft:type_family में वह family हो |
has_component | कंपोनेंट ID, जैसे "minecraft:is_baby" | के पास अभी वह कंपोनेंट हो |
has_tag | Tag का नाम | के पास /tag से दिया गया वह tag हो |
is_baby | true / false | बच्चा हो |
is_tamed | true / false | पालतू हो |
is_owner | true / false | उस मॉब का मालिक हो जिसका यह filter है |
has_nametag | true / false | का कोई कस्टम नाम हो |
is_variant | संख्या | के minecraft:variant में वह संख्या हो |
is_mark_variant | संख्या | के minecraft:mark_variant में वह संख्या हो |
is_color | रंग का नाम, जैसे "red" | का वह रंग हो |
Health और हालत
| Test | Value | तब पास होता है जब subject... |
|---|---|---|
actor_health | संख्या | की health value से तुलना में सही हो (<, > आदि इस्तेमाल करें) |
is_missing_health | true / false | की health पूरी न हो |
has_mob_effect | Effect ID, जैसे "poison" | पर वह effect हो। देखें Vanilla effects। |
on_fire | true / false | जल रहा हो |
on_ground | true / false | ज़मीन पर खड़ा हो |
is_sneaking | true / false | sneak कर रहा हो |
is_sprinting | true / false | sprint कर रहा हो |
is_moving | true / false | चल रहा हो |
is_riding | true / false | किसी दूसरी एंटिटी पर सवार हो |
rider_count | संख्या | पर इतने सवार हों |
has_target | true / false | के पास हमला करने के लिए कुछ हो |
has_damage | Damage का प्रकार, जैसे "fall" या "fire" | को उस तरह का damage लग रहा हो (damage sensors) |
आइटम
| Test | Value | तब पास होता है जब subject... |
|---|---|---|
has_equipment | आइटम ID | के domain में दिए slot में वह आइटम हो, जैसे "hand", "head" या "any" |
has_equipment_tag | आइटम tag | के domain slot में उस tag वाला आइटम हो |
has_ranged_weapon | true / false | धनुष या crossbow पकड़े हो |
यह कहाँ है
| Test | Value | तब पास होता है जब subject... |
|---|---|---|
in_water | true / false | पानी में हो |
is_underwater | true / false | पूरी तरह पानी के नीचे हो |
in_water_or_rain | true / false | पानी या बारिश में हो |
in_lava | true / false | lava में हो |
is_underground | true / false | के ऊपर ब्लॉक हों |
in_nether / in_overworld | true / false | उस dimension में हो |
has_biome_tag | Biome tag, जैसे "desert" | उस tag वाले biome में हो। देखें Vanilla biomes। |
is_biome | Biome का प्रकार, जैसे "ocean" या "jungle" | उस बड़े प्रकार के biome में हो |
is_altitude | संख्या | की ऊँचाई value से तुलना में सही हो |
is_block | ब्लॉक ID | ("subject": "block" के साथ) शामिल ब्लॉक वही ब्लॉक हो |
is_in_village | true / false | गाँव के अंदर हो |
has_biome_tag या is_biome?
has_biome_tag को चुनें। Tags ज़्यादा सटीक होते हैं, और दूसरे ऐड-ऑन के कस्टम biomes में भी वही tags हो सकते हैं।
दूरी
| Test | Value | तब पास होता है जब... |
|---|---|---|
distance_to_nearest_player | ब्लॉक की संख्या | सबसे पास का प्लेयर इतनी दूर हो (< या > इस्तेमाल करें) |
target_distance | ब्लॉक की संख्या | मॉब का target इतनी दूर हो |
owner_distance | ब्लॉक की संख्या | मॉब का मालिक इतनी दूर हो |
home_distance | ब्लॉक की संख्या | मॉब का घर इतनी दूर हो |
समय, मौसम और world
| Test | Value | तब पास होता है जब... |
|---|---|---|
is_daytime | true / false | दिन हो |
hourly_clock_time | 0 से 24000 तक की संख्या | दिन का समय value से तुलना में सही हो |
moon_phase | 0 से 7 तक की संख्या | चाँद उस phase में हो |
weather_at_position | मौसम, जैसे "thunderstorm" | subject जहाँ खड़ा है वहाँ का मौसम मेल खाए |
is_difficulty | "peaceful", "easy", "normal" या "hard" | गेम उस difficulty पर हो |
is_game_rule | true / false | domain में दिया game rule चालू हो |
random_chance | संख्या | random पासा लग जाए: 10 की value लगभग 10 में से 1 बार पास होती है |
एंटिटी properties
ये मॉब के description में declare की गई properties पढ़ते हैं। Property का नाम domain में जाता है:
| Test | Value |
|---|---|
bool_property | true / false |
int_property | पूर्ण संख्या |
float_property | दशमलव संख्या |
enum_property | values के शब्दों में से एक |
has_property | Property का नाम (value में, domain नहीं) |
{ "test": "enum_property", "domain": "wiki:mood", "value": "angry" }जब कुछ गड़बड़ हो
| आपको क्या दिखता है | सबसे संभावित कारण |
|---|---|
| Filter कभी पास नहीं होता | गलत subject। Damage sensor या targeting में आमतौर पर आपको self नहीं, other चाहिए। |
| Filter तब पास होता है जब नहीं होना चाहिए | किसी हाँ/ना test में "नहीं" के लिए "value": false छूट गया है, या किसी key की spelling गलत है (जैसे allof)। Content Log देखें। |
| Family test fail होता है | वह family target की minecraft:type_family list में नहीं है |
| Property test fail होता है | domain में दिया property नाम description.properties वाले नाम से मेल नहीं खाता |
| संख्या वाला test अजीब बर्ताव करता है | Operator छूट गया है, इसलिए यह बिल्कुल सटीक मेल जाँचता है |
और मदद समस्या निवारण में है।