ज़मीन को सजाने वाली हर चीज़ एक feature है: ore की नसें, पेड़, फूल, घास, बड़े पत्थर, झरने, coral। अगर कोई चीज़ बुनियादी terrain नहीं है और मॉब भी नहीं है, तो शायद वह feature है।
किसी feature को दुनिया में लाने के लिए आपको दो फ़ाइलें चाहिए:
- feature बताता है कि क्या रखना है: ore की एक नस, एक पेड़, एक अकेला ब्लॉक।
- feature rule बताता है कि कहाँ और कितनी बार: कौन से biomes, हर chunk में कितनी बार, किस ऊँचाई पर।
इस गाइड में आप ruby ore को हर overworld biome में ज़मीन के नीचे दिखाएँगे।
फ़ाइलें
BP/
blocks/
ruby_ore.json
features/
ruby_ore_feature.json
feature_rules/
ruby_ore_rule.jsonस्टेप 1: ore ब्लॉक
पहले आपको रखने के लिए एक ब्लॉक चाहिए। wiki:ruby_ore नाम का एक सामान्य कस्टम ब्लॉक बनाएँ, texture और loot table के साथ। अगर आपने अभी तक ब्लॉक नहीं बनाया है, तो आपका पहला कस्टम ब्लॉक फ़ॉलो करें।
स्टेप 2: feature
{
"format_version": "1.13.0",
"minecraft:ore_feature": {
"description": {
"identifier": "wiki:ruby_ore_feature"
},
"count": 6,
"replace_rules": [
{
"places_block": "wiki:ruby_ore",
"may_replace": [
"minecraft:stone",
"minecraft:granite",
"minecraft:diorite",
"minecraft:andesite"
]
}
]
}
}- root key, यहाँ
minecraft:ore_feature, feature type है। हर फ़ाइल में ठीक एक होता है। इस पेज के नीचे वाली टेबल में सब दिए गए हैं। countबताता है कि एक नस कितने ब्लॉक रखने की कोशिश करती है। Diamonds छोटी नसें इस्तेमाल करते हैं, coal बड़ी।replace_rulesबताता है कि कौन सा ब्लॉक कहाँ जाएगा। ore सिर्फ़may_replaceमें लिखे ब्लॉक को बदलता है, इसलिए यह कभी गुफाओं में हवा में नहीं लटकता और न ही dirt को खाता है।
deepslate वाला version
replace_rules में "places_block": "wiki:deepslate_ruby_ore" और "may_replace": ["minecraft:deepslate"] के साथ दूसरी एंट्री जोड़ें। तब एक ही नस दोनों layers में सही लुक इस्तेमाल करती है, बिल्कुल vanilla ores की तरह।
नाम रखने के नियम
- हर फ़ाइल में एक feature।
- फ़ाइल का नाम identifier के नाम वाले हिस्से से मैच होना चाहिए।
wiki:ruby_ore_featureruby_ore_feature.jsonमें जाता है। namespace मैच का हिस्सा नहीं है। - अगर दो पैक बिल्कुल एक ही identifier इस्तेमाल करते हैं, तो लिस्ट में ऊपर वाला पैक जीतता है। इसी तरह आप किसी vanilla feature को बदल सकते हैं।
स्टेप 3: feature rule
जब तक कोई feature rule उसे biomes से नहीं जोड़ता, feature कुछ नहीं करता:
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:ruby_ore_rule",
"places_feature": "wiki:ruby_ore_feature"
},
"conditions": {
"placement_pass": "underground_pass",
"minecraft:biome_filter": [
{
"test": "has_biome_tag",
"operator": "==",
"value": "overworld"
}
]
},
"distribution": {
"iterations": 4,
"coordinate_eval_order": "zyx",
"x": {
"distribution": "uniform",
"extent": [0, 16]
},
"y": {
"distribution": "triangle",
"extent": [-48, 16]
},
"z": {
"distribution": "uniform",
"extent": [0, 16]
}
}
}
}rule के तीन हिस्से हैं।
description
identifierrule का नाम है। features की तरह, नाम वाला हिस्सा फ़ाइल के नाम से मैच होना चाहिए।places_featureवह feature है जिसे यह rule रखता है। एक rule एक feature को नियंत्रित करता है।
conditions
minecraft:biome_filter biomes चुनता है। यह filter tests की लिस्ट है, और जो आप लगभग हर बार इस्तेमाल करेंगे वह है has_biome_tag। हर biome filter जाँचता है: जो पास होते हैं उन्हें feature मिलता है।
आप all_of और any_of से tests को जोड़ सकते हैं। यह वाला गर्म overworld biomes चुनता है जो समुद्र नहीं हैं:
"minecraft:biome_filter": [
{ "test": "has_biome_tag", "operator": "==", "value": "overworld" },
{
"any_of": [
{ "test": "has_biome_tag", "operator": "==", "value": "desert" },
{ "test": "has_biome_tag", "operator": "==", "value": "mesa" }
]
},
{ "test": "has_biome_tag", "operator": "!=", "value": "ocean" }
]ruby ore को सिर्फ़ Ruby Grove में रखने के लिए, उसके अपने tag से जाँचें: "value": "ruby_grove"।
placement_pass बताता है कि दूसरों की तुलना में feature कब रखा जाता है। Passes इस क्रम में चलते हैं:
| Pass | किसके लिए अच्छा |
|---|---|
first_pass | वे चीज़ें जिन पर बाकी सब बनना चाहिए। |
before_underground_pass, underground_pass, after_underground_pass | Ores, dirt या gravel के ढेले, गुफा की सजावट। |
before_surface_pass, surface_pass, after_surface_pass | पेड़, फूल, घास, बड़े पत्थर। |
before_sky_pass, sky_pass, after_sky_pass | हवा में ऊपर की चीज़ें। |
final_pass | आख़िरी टच, बाकी सब के बाद। |
pregeneration_pass | सिर्फ़ cave carvers। |
एक ही pass के features के बीच कोई तय क्रम नहीं होता।
distribution
यह तय करता है कि हर chunk में कितनी कॉपियाँ बनने की कोशिश करें और कहाँ।
| फ़ील्ड | यह क्या करता है |
|---|---|
iterations | हर chunk में कितनी बार कोशिश करनी है। यहाँ, 4 नसें। |
x, y, z | हर कोशिश कहाँ पड़ती है। एक तय नंबर, एक range, या एक Molang expression। |
scatter_chance | पूरे chunk के लिए optional संभावना, जैसे 4 में से 1 chunk के लिए { "numerator": 1, "denominator": 4 }। अगर यह फ़ेल हो, तो कोई कोशिश नहीं चलती। |
coordinate_eval_order | coordinates किस क्रम में निकाले जाते हैं, जैसे "xzy" (default) या "zyx"। तब मायने रखता है जब एक coordinate दूसरे को इस्तेमाल करता है। |
feature rule में, x और z chunk के कोने से गिने जाते हैं, इसलिए [0, 16] पूरे chunk को कवर करता है। y दुनिया की ऊँचाई है।
हर range का एक distribution type होता है जो तय करता है कि values कहाँ पड़ें:
| Type | नतीजा |
|---|---|
uniform | हर value की बराबर संभावना। |
triangle | ज़्यादातर values range के बीच के पास, किनारों पर कम। ores के लिए बढ़िया। |
gaussian | घंटी की तरह, बीच के आसपास इकट्ठा। |
inverse_gaussian | दोनों किनारों पर इकट्ठा, बीच में कम। |
fixed_grid | बराबर दूरी वाले कदम, step_size और grid_offset से सेट होते हैं। |
jittered_grid | एक grid जिसमें हर point को थोड़ा random खिसकाया जाता है। |
ज़मीन पर रहने वाली चीज़ों के लिए, जैसे पौधे, y को Molang से सेट करें ताकि वह सतह पर पड़े:
"y": "query.heightmap(variable.worldx, variable.worldz)"Ore सिर्फ़ नए chunks में
Features एक बार बनते हैं, जब कोई chunk पहली बार बनता है। अपना ore देखने के लिए दूर तक घूमें या नई world बनाएँ। पहले से घूमी हुई ज़मीन में यह कभी नहीं आता।
टेस्टिंग
- नई world में पैक चालू करें।
/gamemode spectatorसे spectator mode में जाएँ और Y 0 के पास ज़मीन के नीचे उड़ें।- पत्थर में ruby texture ढूँढें। बहुत कम है?
iterationsयाcountबढ़ाएँ।
अगर कुछ नहीं दिखता, तो Content Log खोलें। आम कारण हैं: फ़ाइल का नाम identifier से मैच नहीं करता, places_feature का नाम गलत है, या places_block में ब्लॉक के नाम में typo है।
हर feature type
हर feature फ़ाइल इनमें से ठीक एक को अपनी root key के रूप में इस्तेमाल करती है। कुछ ब्लॉक रखते हैं, बाकी सिर्फ़ दूसरे features के बीच चुनते हैं, उन्हें खिसकाते हैं या दोहराते हैं। ज़्यादातर vanilla सजावटें कई को एक साथ जोड़ती हैं: उदाहरण के लिए एक scatter feature जो एक search feature चलाता है जो एक पेड़ चलाता है।
| Type | यह क्या करता है |
|---|---|
minecraft:aggregate_feature | features की लिस्ट को एक ही जगह रखता है, बिना तय क्रम के। |
minecraft:beards_and_shavers | किसी दूसरे feature, आमतौर पर structure, के लिए समतल और साफ़ जगह बनाने के लिए terrain को भरता या काटता है। |
minecraft:cave_carver_feature | इस chunk और उसके पड़ोसियों में overworld गुफाएँ खोदता है। pregeneration_pass चाहिए। |
minecraft:conditional_list | features की लिस्ट को क्रम से जाँचता है और पहला वह रखता है जिसकी condition पास हो। |
minecraft:fossil_feature | bone blocks और आपके चुने एक ore ब्लॉक से दबा हुआ कंकाल बनाता है। |
minecraft:geode_feature | परतदार खोल और बदली जा सकने वाली अंदरूनी भराई के साथ एक गोल geode बनाता है। |
minecraft:growing_plant_feature | ज़मीन से ऊपर या छत से नीचे एक पौधे का कॉलम उगाता है, body और tip के साथ, जैसे cave vines। |
minecraft:height_difference_filter_feature | किसी दूसरे feature को तभी रखने देता है जब जगह के आसपास की ज़मीन ऊँचाई की जाँच पास करे। |
minecraft:horizontal_tree_decoration_feature | किसी चीज़ की साइड पर random दिशा में एक ब्लॉक चिपकाता है, जैसे log पर shelf mushrooms। |
minecraft:multi_block_feature | कई हिस्सों से बना एक ब्लॉक रखता है, चाहें तो random दिशा में घुमाकर। |
minecraft:multiface_feature | पतले ब्लॉक रखता है जो फ़र्श, दीवारों या छत से चिपकते हैं, जैसे glow lichen। |
minecraft:multipart_block_column_feature | ज़्यादा से ज़्यादा चार तरह के ब्लॉक (base, बीच वाला, पतला होता हिस्सा और tip) का कॉलम किसी भी दिशा में लगाता है। |
minecraft:nether_cave_carver_feature | Nether में गुफाएँ खोदता है। pregeneration_pass चाहिए। |
minecraft:ore_feature | ब्लॉक की एक नस रखता है जो सिर्फ़ आपके इजाज़त दिए ब्लॉक को बदलती है। हर ore के लिए इस्तेमाल होता है। |
minecraft:partially_exposed_blob_feature | किसी ब्लॉक का एक ढेला रखता है जो ज़्यादातर ज़मीन में दबा होता है, सिर्फ़ एक तरफ़ दिखती है। |
minecraft:rect_layout | chunk की सतह को क्षेत्रों के grid से भरता है, हर एक में एक feature, कुछ जगह खाली छोड़कर। |
minecraft:scan_surface | chunk की सतह के हर कॉलम पर चलता है और हर एक पर एक feature आज़माता है। |
minecraft:scatter_feature | किसी जगह के आसपास दूसरे feature को कई बार रखता है, feature rule जैसी x, y, z ranges के साथ। |
minecraft:sculk_patch_feature | sculk का एक टुकड़ा फैलाता है। गेम ने अभी तक इसे document नहीं किया है। |
minecraft:search_feature | जगह के एक बॉक्स में, layer दर layer, ऐसी जगह खोजता है जहाँ दूसरा feature फ़िट हो। |
minecraft:sequence_feature | features को एक के बाद एक रखता है, हर एक वहाँ से शुरू होता है जहाँ पिछला खत्म हुआ। |
minecraft:single_block_feature | एक ब्लॉक रखता है, या weighted लिस्ट से random चुना एक, इस नियम के साथ कि वह किस पर टिक सकता है। |
minecraft:snap_to_surface_feature | दूसरा feature रखने से पहले जगह को सबसे पास वाले फ़र्श, छत या दीवार पर ले जाता है। |
minecraft:structure_template_feature | बिहेवियर पैक के structures फ़ोल्डर से एक सेव किया हुआ .mcstructure रखता है। |
minecraft:surface_relative_threshold_feature | दूसरा feature तभी रखता है जब जगह सतह से काफ़ी नीचे हो। |
minecraft:tree_feature | तने, पत्तों के छत्र और optional जड़ों से पेड़ बनाता है, आकार के ढेरों विकल्पों के साथ। |
minecraft:underwater_cave_carver_feature | समुद्र तल से नीचे गुफाएँ खोदता है। pregeneration_pass चाहिए। |
minecraft:vegetation_patch_feature | ज़मीन के एक हिस्से को एक ब्लॉक से ढकता है, फिर उस पर पौधे उगाता है, जैसे moss के टुकड़े। |
minecraft:weighted_random_feature | लिस्ट से random एक feature चुनता है। बड़े weights ज़्यादा बार चुने जाते हैं। |
आगे के कदम
- अपने ore के लिए एक घर बनाएँ: Biome फ़ाइल।
- filter करने के लिए biome tags देखें: minecraft:tags।