Minecraft სერვერზე სამყაროს საკუთარი გენერაცია ძირითადად datapack-ებია: Terralith ახალი ბიომებისთვის, Tectonic უფრო დიდი რელიეფისთვის და Incendium-ისა და Nullscape-ის მსგავსი პაკეტები Nether-ისა და End-ისთვის. ისინი world/datapacks/-ში მიდის, სანამ სამყარო პირველად დაგენერირდება, მხოლოდ vanilla-ს ბლოკებს იყენებენ, ასე რომ, მოთამაშეებს არაფრის დაყენება არ სჭირდებათ, და Paper-ზე, Fabric-სა და vanilla-ზე ერთნაირად მუშაობენ. ორი ფაქტი ყველაფერ დანარჩენს განსაზღვრავს. სამყაროს გენერაცია თითოეულ chunk-ზე ერთხელ ეშვება, ასე რომ, არსებულ სამყაროში დამატებული პაკეტი მხოლოდ იმ რელიეფზე მოქმედებს, სადაც ჯერ არავინ ყოფილა. და საკუთარი რელიეფის გენერაცია vanilla-ზე ძვირია, ამიტომ სათამაშო უბნის წინასწარი გენერაცია გაშვებამდე საერთო CPU-ზე არჩევითი არ არის. ეს პოსტი განიხილავს seed-ებს და level-type-ს, worldgen პაკეტების დაყენებას სერვერზე, plugin-ის გენერატორებს Paper-ზე და რეალურ ფასს საათებსა და გიგაბაიტებში.
როგორ მუშაობს სამყაროს გენერაცია და როდის ეშვება#
Minecraft რელიეფს აგენერირებს, როცა chunk პირველად დასჭირდება - როცა მოთამაშე მის სიახლოვეს გაივლის, როცა წინასწარი გენერაციის ინსტრუმენტი მას ითხოვს, ან როცა სხვა რამ აიძულებს ჩატვირთვას. შედეგი სამყაროს region ფაილებში იწერება და აღარასოდეს გენერირდება. ამის შემდეგ ეს chunk მონაცემია და არა ფორმულა.
რელიეფი, რომელსაც chunk იღებს, სამ შემავალზეა დამოკიდებული:
- seed, 64-ბიტიანი რიცხვი, რომელიც
level.dat-ში ინახება. - თამაშის ვერსია, რადგან Mojang გენერატორს ცვლის - 1.18-მა რელიეფი მთლიანად შეცვალა, უფრო მცირე ცვლილებები კი დიდი განახლებების უმეტესობას მოჰყვება.
- worldgen მონაცემები: ჩაშენებული გენერატორის პარამეტრები, პლუს ნებისმიერი datapack ან mod, რომელიც მათ ცვლის.
შეცვალე ამ სამიდან ნებისმიერი და ახალი chunk-ები სხვანაირად გამოვა, ძველები კი ისეთივე დარჩება, როგორიც იყო. ასე მიიღებ ნაკერს: კლდის კიდეს, სადაც Terralith-ის რელიეფი vanilla-ს რელიეფს ხვდება, ან სადაც 1.20-ის ბორცვები 1.21-ის მთებს ხვდება. ნაკერების თავიდან აცილების ერთადერთი გზაა სამივეზე გადაწყვეტილების მიღება, სანამ რამეს დააგენერირებ, რისი შენახვაც გინდა.
seed-ები, level-type და generator-settings#
server.properties-ში ოთხი key ახალი სამყაროს გენერაციას მართავს. ისინი მხოლოდ სამყაროს შექმნისას მოქმედებს; მათი მოგვიანებით შეცვლა არსებულ სამყაროზე არაფერს აკეთებს.
level-name=worldlevel-seed=level-type=minecraft\:normalgenerate-structures=truegenerator-settings={}| key | ნაგულისხმევი | რას აკეთებს |
|---|---|---|
level-seed | ცარიელი (შემთხვევითი) | seed; რიცხვი ან ტექსტი, რომელიც რიცხვად ჰეშირდება |
level-type | minecraft:normal | სამყაროს preset |
generate-structures | true | სოფლები, stronghold-ები, ტაძრები და დანარჩენი |
generator-settings | {} | JSON ოფციები, რომლებსაც flat preset იყენებს |
level-type-ში ორწერტილი ფაილში \:-ით არის ეკრანირებული, რადგან server.properties Java-ს properties ფაილია; სერვერი მას თავადაც ასე წერს. preset-ებია:
- `minecraft:normal` - სტანდარტული რელიეფი.
- `minecraft:large_biomes` - იგივე გენერატორი რამდენჯერმე უფრო დიდი ბიომებით. კარგია დიდი სერვერებისთვის, სადაც მოთამაშეებს სივრცე უნდათ; ზოგიერთი ბიომის პოვნას ძალიან ართულებს.
- `minecraft:amplified` - ექსტრემალური ვერტიკალური რელიეფი. შთამბეჭდავი, ნელა გენერირდება და მასზე სიარული რთულია.
- `minecraft:flat` - სუპერბრტყელი სამყარო, რომელსაც
generator-settingsაყალიბებს. - `minecraft:single_biome_surface` - ერთი ბიომი ყველგან.
ბრტყელი სამყარო შემოქმედებითი მშენებლობისთვის, როგორც ერთი ხაზი server.properties-ში:
level-type=minecraft\:flatgenerator-settings={"layers":[{"block":"minecraft:bedrock","height":1},{"block":"minecraft:dirt","height":2},{"block":"minecraft:grass_block","height":1}],"biome":"minecraft:plains"}seed-ების შეგნებულად არჩევა ღირს სერვერისთვის, რომელიც დიდხანს იარსებებს. seed-ების რუკის ინსტრუმენტი, როგორიცაა Chunkbase, საშუალებას გაძლევს, seed-ის ბიომებსა და სტრუქტურებს შენი ვერსიისთვის შეხედო, სანამ გადაწყვეტ, ასე რომ, შეგიძლია აირჩიო ისეთი, რომელსაც კარგი spawn და ახლოს სოფელი აქვს. ვერსია გახსოვდეს: seed, რომელიც 1.20-ში მოგეწონა, 1.21-ზე სხვა რელიეფს აგენერირებს ყველგან, სადაც გენერატორი შეიცვალა. როცა სერვერი მუშაობს, კონსოლში seed მიმდინარეს ბეჭდავს.
ტექსტური seed-ები რიცხვად ჰეშირდება, ასე რომ, level-seed=autumn-smp სრულიად ვალიდურია. vanilla-ს სამყაროს seed მხოლოდ საწყისი წერტილია, თუ worldgen datapack-ებს დაამატებ: იგივე seed Terralith-ით სრულიად განსხვავებულ რუკას იძლევა.
worldgen datapack-ები: რას ცვლიან#
worldgen datapack ცვლის ან ამატებს JSON ფაილებს data/<namespace>/worldgen/-ში - ბიომები, noise-ის პარამეტრები, density ფუნქციები, feature-ები, სტრუქტურები - და ზოგჯერ data/minecraft/dimension/-ს, მთელი განზომილების გენერატორის ჩასანაცვლებლად. რადგან ყველაფერი მონაცემია, worldgen datapack-ს არც კოდი სჭირდება და არც კლიენტის mod-ი, თუ ის მხოლოდ vanilla-ს ბლოკებს იყენებს.
დამკვიდრებული პაკეტები:
| პაკეტი | რას ცვლის | შენიშვნები |
|---|---|---|
| Terralith | Overworld-ის ბიომებს: ბევრი ახალი, vanilla-ს ბლოკებით | ყველაზე ფართოდ გამოყენებული worldgen პაკეტი |
| Tectonic | Overworld-ის რელიეფის ფორმას: უფრო მაღალი მთები, გადაკეთებული კონტინენტები | შექმნილია Terralith-თან ერთად სამუშაოდ |
| Incendium | Nether-ს: ახალი ბიომები და სტრუქტურები | Terralith-ის იმავე გუნდისგან |
| Nullscape | End-ს: გადაკეთებული გარე კუნძულები | იგივე გუნდი |
| Structory | დამატებითი სტრუქტურები განზომილებებში | მსუბუქი, იგივე გუნდი |
მათი უმეტესობა გამოქვეყნებულია როგორც datapack-ად, ისე mod-ად Fabric-ისა და NeoForge-ისთვის. Paper-ზე ან vanilla-ზე datapack გამოიყენე; mod-იან სერვერზე ორივე მუშაობს, და mod-ის ვერსიას ზოგჯერ ამჯობინებენ, რადგან ის სამყარომდე იტვირთება. mod-ის build-ების ზოგიერთი ვერსია პატარა ბიბლიოთეკის mod-ზეა დამოკიდებული; mod-ის გვერდი მას ჩამოთვლის.
პაკეტების კომბინირება ხშირია - Terralith, Tectonic, Incendium და Nullscape პოპულარული ნაკრებია - მაგრამ სწორედ კომბინაციებში ჩნდება პრობლემები. პაკეტები, რომლებიც ერთსა და იმავე ფაილებს ცვლიან, კონფლიქტში შედიან, და ჩატვირთვის რიგში ბოლო იმარჯვებს. ერთად დაპროექტებული პაკეტები, როგორიც ზემოთაა, თავიანთ თავსებადობას აღწერენ; სხვადასხვა ავტორის პაკეტები შეიძლება არა. სანამ სერვერს მასზე დააფუძნებ, შენი ზუსტი კომბინაციით ლოკალურად სატესტო სამყარო დააგენერირე.
worldgen პაკეტების დაყენება სერვერზე#
გამოყოფილ სერვერს სამყაროს შექმნის ეკრანი არ აქვს, ამიტომ მოქმედებების თანმიმდევრობა მნიშვნელოვანია:
- გააჩერე სერვერი. თუ სამყარო უკვე არსებობს, გადაწყვიტე, რა მოუვა: backup გაუკეთო, სახელი გადაარქვა თუ წაშალო.
- შექმენი სამყაროს საქაღალდე და მისი datapack-ების საქაღალდე, სანამ სამყარო იარსებებს:
world/datapacks/. - ატვირთე პაკეტები მასში zip-ებად. თითოეულ zip-ს ზედა დონეზე
pack.mcmetaუნდა ჰქონდეს. ნუ გახსნი მათ ცალკეულ ფაილებად. - დააყენე `level-seed` და `level-type`, თუ შემთხვევითი ჩვეულებრივი სამყაროს გარდა სხვა რამ გინდა.
- გაუშვი სერვერი. ის პაკეტებს პოულობს, რთავს და ახალ სამყაროს მათით აგენერირებს.
- შეამოწმე log-ი datapack-ის შეცდომებზე, მერე კონსოლში გაუშვი
datapack list, რომ დარწმუნდე, ყველა პაკეტი ჩართულია.
თუ პაკეტი თამაშის სხვა ვერსიისთვისაა აწყობილი, სერვერმა შეიძლება გაგაფრთხილოს და ჩატვირთოს, ან საერთოდ უარი თქვას სამყაროს ჩატვირთვაზე datapack-ის შეცდომით. worldgen პაკეტები თამაშის ვერსიაზე მჭიდროდაა მიბმული; ყოველთვის ჩამოტვირთე build ზუსტად იმ ვერსიისთვის, რომელსაც უშვებ. datapack-ების გზამკვლევი pack.mcmeta-ს, pack_format-სა და ჩატვირთვის რიგს დეტალურად განიხილავს.
RE:NODE-ზე Minecraft სერვერები უკვე დაგენერირებული სამყაროთი მოდის, ასე რომ, worldgen პაკეტების დაყენება ნიშნავს სერვერის გაჩერებას, დაგენერირებული სამყაროს საქაღალდეების წაშლას ან სახელის გადარქმევას file manager-ში, world/datapacks/-ის შექმნას, zip-ების ატვირთვას და ხელახლა გაშვებას. Paper-ზე world_nether და world_the_end-იც წაშალე, თორემ Nether და End vanilla-ს რელიეფს შეინარჩუნებენ, სანამ Overworld იცვლება.
plugin-ის გენერატორები Paper-ზე#
Paper ასევე იღებს სამყაროს გენერატორებს plugin-ებიდან, რომლებსაც შეუძლიათ ის, რაც datapack-ებს არ შეუძლიათ, მაგალითად გაშვების დროს კოდით გენერაცია. ორი ყველაზე ცნობილია Terra, ღია კოდის გენერატორი კონფიგურირებადი პაკეტებით, რომელიც Paper-სა და Fabric-ზე მუშაობს, და Iris, კომერციული გენერატორი საკუთარი პაკეტების სისტემით.
plugin-ის გენერატორი სამყაროს bukkit.yml-ში ებმება, სანამ ეს სამყარო დაგენერირდება:
worlds: world: generator: Terra:OVERWORLDgenerator:-ის შემდეგ მნიშვნელობა plugin-ის სახელი და გენერატორის ID-ა; Terra-ს დოკუმენტაცია ამ ფორმას იყენებს, სხვა plugin-ები კი საკუთარ ID-ებს აღწერენ. როგორც datapack-ების შემთხვევაში, გენერატორი მხოლოდ იმ chunk-ებზე მოქმედებს, რომლებიც მისი დაყენების შემდეგ გენერირდება.
plugin-ის გენერატორები პორტატულობას ძალაში ცვლიან. plugin-ის მიერ დაგენერირებულ სამყაროს იდენტურად მხოლოდ იგივე plugin-ი იმავე ვერსიაზე აგენერირებს, ასე რომ, მასზე აგებული სერვერი მასზეა მიბმული მანამ, სანამ ახალი რელიეფი გენერირდება. ისინი ასევე შეიძლება ძვირი იყოს: plugin-ის კოდში რელიეფის გენერაცია იმავე CPU-სთვის ეჯიბრება თამაშს. სანამ რომელიმეს აირჩევ, გენერაციის სიჩქარე გატესტე.
მთავარის გვერდით დამატებითი სამყაროებისთვის - რესურსების სამყარო, შემოქმედებითი სამყარო, ცალკე amplified სამყარო - Multiverse-Core-ს შეუძლია სამყაროს შექმნა ნებისმიერი დაყენებული გენერატორით. რამდენიმე სამყაროს გაშვება Multiverse-ით ამას განიხილავს, მათ შორის იმას, თუ რა ჯდება თითოეული დამატებითი სამყარო.
რა ჯდება pre-generation#
საკუთარი რელიეფი ყველაზე ძვირ რამეს, რასაც სერვერი აკეთებს, კიდევ უფრო აძვირებს. დიდი ბიომების პაკეტები თითოეულ chunk-ზე უფრო მრავალფეროვან feature-ებს ამატებს, Tectonic-ის რელიეფი უფრო მაღალია, amplified კი ცნობილად ნელია. თუ მოთამაშეები ამ რელიეფს კვლევით აგენერირებენ, სერვერი ამას თამაშის დროს ლაგის ნახტომებით იხდის. სამყაროს საზღვრის შიგნით უბნის წინასწარი გენერაცია ხარჯს წყნარ დროზე გადააქვს და პროგნოზირებადს ხდის.
არითმეტიკა კვადრატული უბნისთვის, რომელიც Chunky-ით წინასწარ დაგენერირდა, რომლის ნაგულისხმევი რადიუსი კვადრატის გვერდის ნახევარს ნიშნავს:
| Chunky-ის რადიუსი | ფართობი | chunk-ები | region ფაილები |
|---|---|---|---|
| 2,000 ბლოკი | 4,000 x 4,000 | 62,500 | დაახლოებით 61 |
| 5,000 ბლოკი | 10,000 x 10,000 | 390,625 | დაახლოებით 381 |
| 10,000 ბლოკი | 20,000 x 20,000 | 1,562,500 | დაახლოებით 1,526 |
დრო დამოკიდებულია chunk-ებზე წამში, რაც თავის მხრივ დამოკიდებულია CPU-ს გამოყოფაზე, worldgen პაკეტებსა და სერვერულ პროგრამაზე. წამში 100 chunk-ზე 5,000-ბლოკიან რადიუსს დაახლოებით 65 წუთი სჭირდება; წამში 30 chunk-ზე - დაახლოებით სამნახევარი საათი. გაზომე საკუთარი სიჩქარე გაშვების პირველ რამდენიმე წუთში, მერე კი გაყავი. თითოეული განზომილება ცალკე გაშვებაა, Nether და End კი, როგორც წესი, უფრო პატარაა.
დისკის მოხმარება ზედმეტად იცვლება, რომ რიცხვი დავასახელოთ - ის რელიეფზე, სტრუქტურებსა და შეკუმშვაზეა დამოკიდებული - ამიტომ ჯერ პატარა რადიუსი დააგენერირე, შეამოწმე region საქაღალდის ზომა და მერე გაზარდე. დიდმა წინასწარ დაგენერირებულმა სამყარომ შეიძლება რამდენიმე გიგაბაიტი დაიკავოს, რაც მნიშვნელოვანია ფიქსირებული დისკის მქონე გეგმაზე. RE:NODE-ზე Minecraft-ის გეგმებს დონის მიხედვით 15-დან 100 GB-მდე დისკი აქვს, და დისკის გრაფიკი კონსოლის გვერდით აჩვენებს, როგორ იზრდება მოხმარება გაშვების დროს.
CPU-ს მხარეზე მსჯელობა უფრო მარტივია. pre-generation სერვერს მთელი გაშვების განმავლობაში მისი CPU-გამოყოფის 100%-ზე დაიჭერს. RE:NODE-ზე ეს ნაყიდი წილით მკაცრი შეზღუდვაა, შეჩერების საფუძველი არასოდესაა, და გაშვება უბრალოდ იმდენ ხანს გრძელდება, რამდენსაც შენი წილი უშვებს. გაუშვი ღამით განრიგიდან, მეხსიერებას თვალი ადევნე და Chunky-ის ბრძანებებისთვის და გაშვების შეჩერებისა და გაგრძელებისთვის წაიკითხე სამყაროს საზღვრები და pre-generation.
worldgen-ის შეცვლა არსებულ სამყაროზე#
ზოგჯერ გადაწყვეტილება გვიან მოდის: სერვერი vanilla-ს რელიეფზე გაეშვა, ახლა კი ყველას Terralith უნდა. ვარიანტები, ყველაზე სუფთიდან ყველაზე არეულამდე:
- ახალი სამყარო, ძველის შენარჩუნებით. დაიწყე ახალი სეზონი ახალ გენერატორზე. ძველი სამყარო ჩამოსატვირთად შესთავაზე.
- ახალი სამყარო ძველის გვერდით. შექმენი მეორე სამყარო ახალი რელიეფით და დააკავშირე ისინი Multiverse-ით ან proxy-ით. ბაზები იქ რჩება, სადაც არიან; ახალი კვლევა ახალ რელიეფზე ხდება.
- დაუთვალიერებელი უბნების ხელახალი გენერაცია. გამოიყენე MCA Selector სამყაროს ასლზე, რომ წაშალო chunk-ები ძალიან დაბალი inhabited time-ით - chunk-ები, რომლებზეც ხალხმა გაიარა, მაგრამ არასოდეს უცხოვრია - და ახალ გენერატორს მიეცი მათი შევსების საშუალება. ნაკერები გარეთ, ხალხის ბაზების კიდეებისკენ გადაინაცვლებს. ეს ნამდვილი ტექნიკაა, მაგრამ წვრილმანებით სავსეა და ასლზე უნდა გააკეთო.
- მიიღე ნაკერი. დააყენე სამყაროს საზღვარი, რომელიც ძველ უბანს და ახალი რელიეფის რგოლს მოიცავს, წინასწარ დააგენერირე რგოლი და ნაკერი რუკის თავისებურებად აქციე.
worldgen პაკეტის ახალ ვერსიაზე განახლება არსებულ სამყაროზე იგივე პრობლემის უფრო მცირე ვერსიაა: ახალმა ვერსიამ შეიძლება სხვა რელიეფი დააგენერიროს, ასე რომ, ახალი chunk-ები შეიძლება ძველებს არ დაემთხვეს. განახლებამდე პაკეტის changelog-ი წაიკითხე, და worldgen პაკეტის დიდ ვერსიას თამაშის ვერსიის ცვლილებასავით მოეპყარი. Minecraft-ის ვერსიის განახლებები ზოგად დისციპლინას შეიცავს.
პრობლემების მოგვარება#
სამყარო vanilla-დ დაგენერირდა. პაკეტები world/datapacks/-ში არ იყო სამყაროს შექმნისას, ან ერთი საქაღალდით ზედმეტად ღრმად იყო ჩადებული. გააჩერე, გაასწორე საქაღალდე, წაშალე დაგენერირებული სამყარო და ისევ გაუშვი.
Overworld შეიცვალა, Nether კი არა. Paper-ზე Nether და End სამყაროს ცალკე საქაღალდეებია; თუ ისინი უკვე არსებობდა, vanilla-ს რელიეფი შეინარჩუნეს. ხელახალ გენერაციამდე ისინიც წაშალე, მას შემდეგ, რაც საჭირო ყველაფრის backup-ს გააკეთებ.
სერვერი პაკეტის დამატების შემდეგ არ ეშვება. პაკეტი თამაშის სხვა ვერსიისთვისაა, ან ორი პაკეტი კონფლიქტშია. log-ი პაკეტს და, როგორც წესი, ფაილს ასახელებს. დამნაშავის საპოვნელად პაკეტები სათითაოდ ამოიღე.
ლაგის ნახტომები, როცა ვინმე იკვლევს. საკუთარი რელიეფით მოსალოდნელია. წინასწარ დააგენერირე და სამყაროს საზღვარი დააყენე; ნახტომები ჩერდება, როგორც კი გასაგენერირებელი აღარაფერი დარჩება.
მოთამაშეები ბიომების უცნაურ სახელებს ხედავენ. საკუთარ ბიომებს საკუთარი ID-ები აქვთ, რომლებსაც კლიენტი debug ეკრანზე აჩვენებს. არაფერია არასწორი.
FAQ#
სჭირდებათ მოთამაშეებს Terralith-ის დაყენება შემოსასვლელად?
არა. Terralith-ის datapack-ის ვერსია მხოლოდ vanilla-ს ბლოკებს იყენებს, ასე რომ, სერვერი რელიეფს შეუცვლელ კლიენტებს უგზავნის. იგივე ეხება Tectonic-ს, Incendium-ს, Nullscape-სა და Structory-ს datapack-ების სახით.
შემიძლია Terralith არსებულ სამყაროს დავუმატო?
შეგიძლია, მაგრამ Terralith-ის რელიეფს მხოლოდ ის chunk-ები მიიღებს, რომლებიც მისი დამატების შემდეგ დაგენერირდება. გამოკვლეული უბნები ისეთივე რჩება, როგორიც იყო, ხილული ნაკერით იქ, სადაც გენერატორები ხვდებიან. სერვერების უმეტესობა ამის ნაცვლად ახალ სამყაროს იწყებს ან მეორე სამყაროს ამატებს.
როგორ დავაყენო seed Minecraft სერვერზე?
ჩაწერე ის level-seed-ში server.properties-ში, სანამ სამყარო დაგენერირდება. ეს შეიძლება იყოს რიცხვი ან ტექსტი. მისი მოგვიანებით შეცვლა არსებულ სამყაროზე ეფექტს არ ახდენს; ახალი seed-ისთვის ახალი სამყარო უნდა დააგენერირო.
საკუთარი რელიეფი მეტ RAM-ს იყენებს?
გენერაციის დროს ცოტა მეტს, ძირითადად იმიტომ, რომ გენერაცია უფრო დატვირთულია. უფრო დიდი ხარჯებია CPU გენერაციისას და დისკი შემდეგ. საზღვრის შიგნით წინასწარი გენერაცია ორივეს ერთ პროგნოზირებად სამუშაოდ აქცევს გაშვებამდე.
შემიძლია ერთ სერვერზე სხვადასხვა სამყაროში სხვადასხვა რელიეფი გამოვიყენო?
კი. Paper-ზე Multiverse-Core-ს შეუძლია plugin-ის გენერატორით დამატებითი სამყაროების შექმნა, და თითოეულ სამყაროს საკუთარი პარამეტრები აქვს. Paper-ზე datapack-ები მხოლოდ მთავარი სამყაროს საქაღალდიდან იტვირთება და მთელ სერვერზე მოქმედებს, ასე რომ, Terralith-ის დაყენება ასევე აყალიბებს ნებისმიერ ახალ ჩვეულებრივ სამყაროს, რომელსაც Multiverse შექმნის. დაგეგმე, რომელი რელიეფი სად ეკუთვნის, სანამ დააგენერირებ.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.