Minecraft Java სერვერი ერთი ფაილია. server.jar-ს ათავსებ ცარიელ საქაღალდეში, უშვებ Java-ს იმ ვერსიით, რომელიც Minecraft-ის ვერსიას ემთხვევა, ეთანხმები EULA-ს იმ ტექსტურ ფაილში, რომელსაც ის ქმნის, ისევ უშვებ და გაქვს სამყარო, რომელიც TCP პორტ 25565-ს უსმენს. დანარჩენი - properties ფაილი, უფლებები, plugin-ები, backup-ები - ამ ოთხი ნაბიჯის დახვეწაა. ეს გზამკვლევი ოთხივე ნაბიჯს სწორად გადის, შემდეგ კი იმ გადაწყვეტილებებს განიხილავს, რომლებსაც მოგვიანებით ინანებ, თუ არასწორად მიიღებ: რომელი Java, რომელი სერვერის პროგრამა, რამდენი მეხსიერება და როგორ აღწევენ ადამიანები მისამართამდე სინამდვილეში.
თუ პანელზე დაფუძნებულ ჰოსტინგზე ხარ, პირველიდან მეხუთე ნაბიჯამდე ყველაფერი უკვე შენთვის გაკეთებულია და შეგიძლია server.properties-ის, პორტებისა და ოპერატორების თავებზე გადახვიდე. მექანიკის წაკითხვა მაინც ღირს, რადგან ის ყველა იმ შეცდომის შეტყობინებას განმარტავს, რომელსაც შეხვდები.
რას აყენებ სინამდვილეში#
არ არსებობს "Minecraft-ის სერვერი" როგორც ერთი პროდუქტი, ისე როგორც არსებობს Valheim-ის ან Counter-Strike-ის სერვერი. ადამიანებს ოთხი რამ აქვთ მხედველობაში:
- Vanilla სერვერის jar, რომელსაც Mojang ყოველი ვერსიისთვის აქვეყნებს. ეს თამაშის საკუთარი სერვერული კოდია, ზუსტად ისე იქცევა, როგორც ერთ მოთამაშიანი რეჟიმი, და plugin-ების მხარდაჭერა საერთოდ არ აქვს.
- Paper, vanilla სერვერის fork-ი, რომელშიც ცხელი კოდის გზები გადაწერილია და მიბმულია Bukkit/Spigot plugin API. იმავე სამყაროსა და იმავე მოთამაშეებზე რამდენჯერმე უფრო სწრაფია და თითქმის ყველა საჯარო სერვერი სწორედ მას უშვებს. რედსტოუნისა და mob-farm-ების რამდენიმე ეგზოტიკური ქცევა vanilla-სგან განსხვავდება, მიზანმიმართულად და დოკუმენტირებულად.
- Fabric, NeoForge ან Forge - mod loader-ები. ისინი თავად თამაშს ცვლიან, ამიტომ ყველა მოთამაშეს ერთი და იგივე mod-ები უნდა ჰქონდეს ერთი და იგივე ვერსიებით. არჩევანამდე ეს ზღვარი უნდა გაიგო: plugin-ები სერვერის მხარესაა და მოთამაშეები შეუცვლელი launcher-ით შემოდიან, mod-ები კი - არა.
- Bedrock-ის dedicated სერვერი, სრულიად ცალკე პროგრამა კონსოლისა და მობილურის გამოცემებისთვის. ის Java-ს სამყაროებს არ კითხულობს, Java-ს plugin-ებს არ უშვებს და Java კლიენტები მასზე ვერ შედიან. საპირისპირო მიმართულებით crossplay შესაძლებელია თარგმნის ფენით - იხილე Geyser და Floodgate Bedrock-ის crossplay-სთვის.
პირველი სერვერისთვის, რომელზეც მეგობრები მისამართის აკრეფით შემოდიან, გაუშვი Paper. მიიღებ vanilla ქცევას რამდენიმე განსაკუთრებული შემთხვევის გამოკლებით, ადგილს მოგვიანებით permissions plugin-სა და რუკისთვის და იმ წარმადობის მარაგს, რომელიც 2 GB-იან მანქანას სჭირდება. Paper, Fabric თუ vanilla ამ არგუმენტის უფრო გრძელი ვერსიაა. დანარჩენი გზამკვლევი Paper-ს ვგულისხმობთ და აღვნიშნავთ, სად განსხვავდება vanilla.
ჯერ Java-ს ვერსია აირჩიე#
ეს ყველაზე ხშირი მიზეზია, რის გამოც ახალი სერვერი არ ირთვება. Minecraft-ის სერვერი კონკრეტული Java-ს რელიზის წინააღმდეგაა კომპილირებული და უფრო ძველზე გაშვება მაშინვე class-file ვერსიის შეცდომით მთავრდება. უფრო ახალი Java ჩვეულებრივ კარგია; უფრო ძველი არასოდეს.
| Minecraft-ის ვერსია | მინიმალური Java | შენიშვნები |
|---|---|---|
| 1.8 - 1.16.5 | Java 8 | ამ დიაპაზონის უმეტესობაზე Java 11 მუშაობს |
| 1.17 - 1.17.1 | Java 16 | ერთადერთი ვერსია, რომელსაც ზუსტად 16 ან უფრო ახალი უნდა |
| 1.18 - 1.20.4 | Java 17 | ხანგრძლივი პლატო |
| 1.20.5 და უფრო ახალი | Java 21 | 1.21-ის ჩათვლით |
Paper იმავე მოთხოვნებს იცავს, რასაც Minecraft-ის ვერსია, რომელსაც ემსახურება, და თუ Java ძალიან ძველია, ცხადი შეტყობინებით უარს ამბობს გაშვებაზე. ყველაფერზე ადრე შეამოწმე, რა გაქვს:
$ java -versionopenjdk version "21.0.4" 2024-07-16 LTSJava აიღე Eclipse Temurin-ისგან adoptium.net-ზე ან Amazon Corretto-სგან. აიღე JDK ან JRE - ორივე უშვებს სერვერს - და აირჩიე ხანგრძლივი მხარდაჭერის რელიზი (8, 11, 17, 21) და არა მოკლე ხნის. Debian-ზე ან Ubuntu-ზე საკმარისია apt install openjdk-21-jre-headless; headless პაკეტი გამოტოვებს გრაფიკულ ბიბლიოთეკებს, რომლებსაც სერვერი არასოდეს გამოიყენებს.
RE:NODE-ზე Java-ს ვერსია სერვერის შექმნისას Minecraft-ის ვერსიის მიხედვით ირჩევა, ამიტომ ეს მთელი თავი უკვე მოგვარებულია. თუ მოგვიანებით Minecraft-ის ვერსიას თავად შეცვლი, შეამოწმე Startup ჩანართი - 1.21-ის jar Java 17-ის image-ზე არ ჩაირთვება.
მეხსიერება, CPU და დისკი#
Minecraft-ის სერვერი მეხსიერებაში ინახავს ჩატვირთულ chunk-ებს, entity-ებსა და block entity-ებს. ამიტომ მეხსიერება იზრდება იმის მიხედვით, რამდენი სამყაროა ერთდროულად ჩატვირთული, რაც დაახლოებით მოთამაშეთა რაოდენობა გამრავლებული view distance-ზეა, და თითქმის არ არის დამოკიდებული იმაზე, რამდენი ადგილი უკავია სამყაროს დისკზე. 40 GB-იანი სამყარო სამი მოთამაშით იაფია. 2 GB-იანი სამყარო ოცდაათი მოთამაშით, რომლებიც მასზე არიან გაფანტული, - არა.
| მოთამაშეები | მეხსიერება | CPU | სერვერის სახე |
|---|---|---|---|
| 1-5 | 2 GB | 1 core | Paper, vanilla გეიმფლეი, view-distance=8 |
| 5-15 | 4 GB | 1.5 core | რამდენიმე plugin, რუკა, უფლებები |
| 15-30 | 6 GB | 2 core | საჯარო SMP, view-distance=6, წინასწარ გენერირებული სამყარო |
| Modpack, 2-8 მოთამაშე | 6-8 GB | 2 core | 100+ mod, ხარჯის უმეტესობა mod-ების ინიციალიზაციაა |
| დიდი modpack, სრული სერვერი | 10-14 GB | 3+ core | წერტილი, სადაც ტიუნინგი ყიდვას სჯობს |
ამ ცხრილში ორი რამ ციფრებზე მნიშვნელოვანია.
პირველი ისაა, რომ Minecraft-ის მთავარი თამაშის ციკლი ფაქტობრივად ერთნაკადიანია. Chunk-ების ჩატვირთვა, სამყაროს გენერაციის ნაწილი და ქსელის I/O Paper-ზე მთავარი ნაკადის გარეთ მუშაობს, თავად tick კი - არა, ამიტომ ერთი სწრაფი core ბევრ ნელს სჯობს. თუ სერვერი ერთი core-ის 100%-ზეა და მეხსიერების გრაფიკი ბრტყელია, მეტი მეხსიერება არაფერს ცვლის. CPU თუ RAM გეიმ სერვერებისთვის სწორედ ამ დიაგნოსტიკას აღწერს.
მეორე ისაა, რომ უფრო დიდი heap უკეთესი არ არის. Java არ იყენებს მეხსიერებას, რომელიც არ მოუთხოვიათ, ხოლო უფრო დიდი heap ყოველ garbage collection-ის პაუზას უფრო მოკლეს კი არა, უფრო გრძელს ხდის. ოცმოთამაშიანი Paper სერვერი 16 GB-ით ჩვეულებრივ არაფრით უკეთ აკეთებს tick-ს, ვიდრე იგივე სერვერი 6 GB-ით და გონივრული flag-ებით, პაუზები კი უარესია. რამდენი RAM სჭირდება Minecraft-ის სერვერს მოთამაშეთა რაოდენობის მიხედვით დაშლას შეიცავს, ხოლო Minecraft-ის JVM flag-ები და Java-ს ვერსიები heap-ის ზომას container-ის ლიმიტთან მიმართებაში განიხილავს, სადაც ხალხი ყველაზე ხშირად ცდება.
დისკი მოკრძალებულია: სერვერის ფაილები Paper-ისთვის დაახლოებით 200 MB-ია, პლუს ის, რასაც jar ჩამოტვირთავს, სამყარო კი გამოკვლეული ტერიტორიის მიხედვით იზრდება - 100 MB-დან რამდენიმე გიგაბაიტამდე ჩვეულებრივი survival სერვერისთვის. NVMe ერთი კონკრეტული რამისთვის არის მნიშვნელოვანი: დიდ სამყაროზე ყოველ ხუთ წუთში autosave-ის ჩაკიდებისთვის.
დაყენება: jar, EULA, პირველი გაშვება#
შენს მანქანაზე, ცარიელ საქაღალდეში:
$ mkdir -p /srv/minecraft && cd /srv/minecraft$ wget -O server.jar "https://api.papermc.io/v2/projects/paper/versions/1.21.1/builds/132/downloads/paper-1.21.1-132.jar"$ java -Xms2G -Xmx2G -jar server.jar --noguiზუსტი build-ის URL აიღე papermc.io/downloads/paper-დან და build-ის ნომერს ნუ გამოიცნობ; გვერდი პირდაპირ ბმულს გაძლევს არჩეული ვერსიისთვის. Vanilla jar-ის ჩამოტვირთვა minecraft.net-ზეა და ბოლო არგუმენტი არის nogui ტირეების გარეშე.
ეს პირველი გაშვება სერვერს არ რთავს. ის ფაილს წერს და გამოდის:
[ServerMain/WARN]: Failed to load eula.txt[ServerMain/INFO]: You need to agree to the EULA in order to run the server.Go to eula.txt for more info.გახსენი eula.txt და შეცვალე ერთადერთი მნიშვნელოვანი ხაზი:
#By changing the setting below to TRUE you are indicating your agreement to our EULA.eula=trueეთანხმები Mojang-ის საბოლოო მომხმარებლის სალიცენზიო შეთანხმებას, და სერვერის მფლობელებს ყველაზე ხშირად კომერციული ნაწილი ებმებათ: არ შეგიძლია თამაშზე წვდომაში ფული აიღო ან გაყიდო რამე, რაც გეიმფლეიზე მოქმედებს. კოსმეტიკა და ranks, რომლებიც უპირატესობას არ იძლევა, მიღებული ზღვარია და ის უფრო ვიწროა, ვიდრე ბევრი donation მაღაზია ვარაუდობს. თუ ფული ჩაერთვება, წაიკითხე თავად EULA და არა შეჯამება ფორუმზე.
ახლა გაუშვი ნამდვილად. Paper-ის jar patcher-ია: პირველ გაშვებაზე ის Mojang-იდან ჩამოტვირთავს შესაბამის vanilla სერვერს, დაპატჩავს და შედეგს ქეშავს, ამიტომ მანქანას ერთხელ სჭირდება გამავალი ინტერნეტი. Vanilla-ს jar 1.18-დან bundler-ია, რომელიც იმავე გზით თავად იშლება. ორივე შემთხვევაში მიიღებ libraries/ და versions/ საქაღალდეებს, რომლებსაც არ უნდა შეეხო.
[Server thread/INFO]: Starting minecraft server version 1.21.1[Server thread/INFO]: Preparing level "world"[Server thread/INFO]: Preparing start region for dimension minecraft:overworld[Server thread/INFO]: Time elapsed: 6471 ms[Server thread/INFO]: Done (18.402s)! For help, type "help"Done არის ხაზი, რომელსაც ელოდები. ახალ სერვერზე სამყაროს გენერაცია თხუთმეტ წამიდან ორ წუთამდე გრძელდება, დისკისა და spawn რეგიონის ზომის მიხედვით. გააჩერე კონსოლში stop-ის აკრეფით და არასოდეს ფანჯრის დახურვით ან პროცესის მოკვლით - სამყარო autosave-ისას და სუფთა გაჩერებისას იწერება, kill კი ბოლო შენახვის შემდეგ ყველაფერს კარგავს.
RE:NODE-ზე ეს ნაბიჯი არ არსებობს. Minecraft-ის გეგმები უშვებენ Paper-ს შესაბამისი Java-ს ვერსიით, უკვე მიღებული EULA-თი და უკვე გენერირებული სამყაროთი, ამიტომ სერვერი ჩართულია მაშინ, როცა კონსოლს პირველად გახსნი. თუ სხვა jar გინდა - Fabric ან NeoForge სერვერი, Paper-ის fork-ი, modpack-ის საკუთარი launcher - ატვირთავ ფაილების მენეჯერით ან SFTP-ით და Startup ჩანართს მასზე მიუთითებ. დაშვებული mod-ებისა თუ plugin-ების სია არ არსებობს, ისევე როგორც modpack-ის ერთი დაწკაპუნებით დამყენებელი; ფაილებს შენ მოიტან.
ფაილები, რომლებსაც სერვერი ქმნის#
პირველი წარმატებული გაშვების შემდეგ საქაღალდე ასე გამოიყურება და იმის ცოდნა, რა რისთვისაა, მოგვიანებით საათს დაგიზოგავს.
| გზა | რა არის ეს |
|---|---|
server.properties | მთავარი კონფიგურაცია. იკითხება მხოლოდ გაშვებისას |
eula.txt | ხაზი, რომელიც ახლახან შეცვალე |
world/ | Overworld-ის region ფაილები, level.dat, მოთამაშეთა მონაცემები |
world/DIM-1, world/DIM1 | Nether და End, იმავე სამყაროს საქაღალდეში |
ops.json | ოპერატორები, თითოეულს უფლების დონით |
whitelist.json, banned-players.json, banned-ips.json | წვდომის სიები, UUID-ით |
usercache.json | სახელი-UUID ქეში. უსაფრთხოა წაშლა |
logs/latest.log, logs/*.log.gz | მიმდინარე ლოგი, შემდეგ თითო gzip ყოველ გადატვირთვაზე |
plugins/ | მხოლოდ Paper. თითო jar თითო plugin-ზე, კონფიგურაციის საქაღალდეები გვერდით |
bukkit.yml, spigot.yml | Paper-ის მემკვიდრეობით მიღებული Bukkit და Spigot კონფიგურაცია |
config/paper-global.yml | Paper-ის საკუთარი პარამეტრები, მთელი სერვერისთვის |
config/paper-world-defaults.yml | Paper-ის პარამეტრები თითო სამყაროზე, ყველა სამყაროზე გამოიყენება |
libraries/, versions/, cache/ | გახსნილი სერვერული კოდი. არ დაარედაქტირო |
crash-reports/ | იწერება, როცა JVM ცუდად მოკვდება |
სამი შენიშვნა ამ სიაზე. Paper-ის პარამეტრები ერთი paper.yml-იდან 1.19-ის ეპოქაში config/ საქაღალდეში გადავიდა, ამიტომ ნებისმიერი გზამკვლევი, რომელიც paper.yml-ის რედაქტირებას გირჩევს, მოძველებულია. Nether და End vanilla-სა და Paper-ზე world/-ის შიგნით ცხოვრობს, Spigot-ის ეპოქის კონფიგურაციებზე და ზოგიერთ ჰოსტზე კი - ცალკე ზედა დონის საქაღალდეებში, რაც სამყაროს ატვირთვისას Nether-ის დაკარგვის კლასიკური მიზეზია. და ops.json და whitelist.json UUID-ითაა ინდექსირებული და არა სახელით, ამიტომ ისინი გადარჩება, როცა მოთამაშე სახელს იცვლის, და ამიტომ არ მუშაობს საერთოდ offline-mode სერვერზე.
server.properties მთლიანად საკუთარ წაკითხვას იმსახურებს - სამოცზე მეტი key და დაახლოებით ათეული, რომელიც სერვერის შეგრძნებას ცვლის. server.properties-ის ყველა key განმარტებული მათ ნაგულისხმევი მნიშვნელობებით გადის.
პორტები, მისამართები და ხალხის შემოშვება#
| პორტი | პროტოკოლი | დანიშნულება |
|---|---|---|
25565 | TCP | თამაშის ტრაფიკი და სერვერების სიის ping |
25565 | UDP | Query პროტოკოლი, მხოლოდ თუ enable-query=true |
25575 | TCP | RCON, მხოლოდ თუ enable-rcon=true |
Java Edition TCP-ა და ამით ამბავი მთავრდება - უმეტესი survival თამაშისგან განსხვავებით, ცალკე UDP თამაშის პორტი არ არსებობს. საჭიროების შემთხვევაში შეცვალე server.properties-ში server-port-ით და გახსოვდეს, რომ მაშინ მოთამაშეებს პორტიც უნდა აკრიფონ, თუ SRV ჩანაწერს არ გამოიყენებ.
ადამიანები სამი გზით უკავშირდებიან:
- პირდაპირი მისამართი. Multiplayer, შემდეგ Add Server, შემდეგ
203.0.113.10, თუ ნაგულისხმევ პორტზე ხარ, ან203.0.113.10:25566, თუ არა. ყოველთვის ჯერ ეს გამოსცადე; ის DNS-ს განტოლებიდან ხსნის. - დომენი. მიუთითე
Aჩანაწერი მისამართზე და მოთამაშეები აკრეფენmc.example.com:25565-ს. აღწერილია დომენის მიბმა გეიმ სერვერზე-ში. - დომენი პორტის გარეშე.
SRVჩანაწერი_minecraft._tcp.mc.example.com-ზე პორტს ატარებს, ამიტომ მოთამაშეები აკრეფენmc.example.com-ს და სხვა არაფერს. ღირს ამ კონფიგურაციის გაკეთება, ხოლო SRV ჩანაწერები Minecraft-ისთვის ზუსტ ჩანაწერს შეიცავს.
server-ip server.properties-ში ცარიელი დატოვე, რომ სერვერმა ყველა ინტერფეისზე მოუსმინოს. მისი შევსება შენი საჯარო მისამართით პოპულარული ცუდი რჩევაა, რომელიც ლოკალურ კავშირებს არღვევს და არაფერში გამოგადგება. გეიმ სერვერის პორტები განმარტებული განმარტავს, რისთვისაა query პორტი და რატომ შეიძლება სერვერი მუშაობდეს და უხილავი იყოს.
RE:NODE-ის Minecraft-ის გეგმებს ერთი პორტის გამოყოფა მოჰყვება, ეს თამაშის პორტია; მეტის დამატება Network ჩანაწერში შეიძლება, query და RCON-ის გამოყოფებიც შედის, როცა გჭირდება. თუ RCON-ს მართლა გახსნი, ჯერ წაიკითხე RCON უსაფრთხოდ - ეს დაუშიფრავი პროტოკოლია ერთი საერთო პაროლით.
ოპერატორები, უფლების დონეები და whitelist#
ოპერატორი არის მოთამაშე, რომელიც ops.json-შია ჩამოთვლილი. პირველის შექმნის საიმედო გზა კონსოლიდანაა, რადგან კონსოლი უკვე მე-4 დონეზეა:
> op NotchMade Notch a server operator> deop NotchMade Notch no longer a server operatorშემდეგ ops.json თითო ოპერატორზე ჩანაწერს შეიცავს. საინტერესო ველი level-ია, რადგან op ერთი ჩამრთველი არ არის:
[ { "uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5", "name": "Notch", "level": 4, "bypassesPlayerLimit": false }]| დონე | რას იძლევა |
|---|---|
| 1 | Spawn-ის დაცვის გვერდის ავლა. სხვა არაფერი |
| 2 | /gamemode, /give, /tp, /setblock, /summon, /effect, /difficulty და command block-ები |
| 3 | მე-2 დონე პლუს /ban, /kick, /op, /deop, /whitelist |
| 4 | ყველაფერი, /stop და /save-all-ის ჩათვლით |
op-permission-level server.properties-ში ადგენს დონეს, რომელსაც /op გასცემს, და ნაგულისხმევად 4-ია. სერვერზე, სადაც ორზე მეტი თანამშრომელია, დაწიე 2-მდე და ვისაც ban-ები სჭირდება, მათ მესამე დონე მიეცი ფაილის რედაქტირებით. კიდევ უკეთესია, თანამშრომლის როლებისთვის op საერთოდ აღარ გამოიყენო და permissions plugin ჩართო, რომელიც ოთხი კალათის ნაცვლად თითო ბრძანებაზე გაცემას გაძლევს - LuckPerms-ის ჯგუფები და უფლებები სტანდარტული პასუხია, ხოლო whitelist-ები და უფლებები კომპრომისს განიხილავს.
Whitelist არის მეორე რამ, რომელიც უნდა დააყენო, სანამ ვინმეს მისამართს ეტყვი:
> whitelist add Notch> whitelist on> whitelist reloadეს წერს whitelist.json-ს და server.properties-ში white-list=true-ს ჩართავს. ორი დეტალი ხალხს ებმევა. ოპერატორები whitelist-ს უვლიან გვერდს, თუ enforce-whitelist=true არ არის, და whitelist-ის ჩართვა უკვე დაკავშირებულებს არ აგდებს, სანამ whitelist reload-ს არ გაუშვებ - ან, თანამედროვე ვერსიებზე, enforce-whitelist ამას შემდეგ შემოწმებაზე აკეთებს.
გადატვირთვები, backup-ები და განახლებები#
Minecraft-ის სერვერს ყოველდღიური გადატვირთვა ისე არ სჭირდება, როგორც მოდიფიცირებულს, მაგრამ სამი ჩვევა პირველივე დღიდან ღირს.
გააჩერე სუფთად. /stop კონსოლიდან ან პანელის Stop ღილაკი სამყაროს დისკზე წერს და გამოდის. Kill, ჰოსტის ავარია ან მეხსიერების ლიმიტამდე მისვლა ბოლო autosave-ის შემდეგ ყველაფერს კარგავს, ნაგულისხმევად ეს თამაშის ხუთ წუთამდეა. /save-all flush წერას მაშინვე აიძულებს და ნებისმიერ სარისკო ცვლილებამდე სწორედ ის უნდა გაუშვა.
გააკეთე backup მანქანის გარეთ. სამყარო region ფაილების საქაღალდეა და დაზიანებული level.dat ან არასწორად მიმართული წაშლა ყველაფერს იღებს. იმავე დისკზე ასლი backup არ არის. RE:NODE-ის ყოველი Minecraft-ის გეგმა backup-ის სლოტებს მოიცავს, რომლებიც იმ მანქანის გარეთ ინახება, რომელსაც იცავენ, ღილაკით აღდგება და rotation-ისგან დაბლოკვადია - Schedules ჩანართი კი cron გამოსახულებით ღამის backup-ს გაუშვებს, დალაგებული ამოცანების სიით, რომ თანმიმდევრობით შეინახო, backup გააკეთო და გადატვირთო. სერვერის წაშლა მის backup-ებსაც შლის, დაბლოკილებსაც, ამიტომ ყველაფერი, რაც ვერ აღდგება, ჩამოტვირთული შეინახე. Backup-ები, რომლებიც მართლა აღდგება გვიმტკიცებს, რომ ერთის გამოცდა საჭიროებამდე ღირს.
განაახლე გააზრებულად. Paper build-ებს განუწყვეტლად აქვეყნებს; ყოველის დევნის მიზეზი არ არსებობს. განაახლე, როცა ვერსია, რომელიც გაინტერესებს, გამოვა, როცა უსაფრთხოების გასწორება გამოცხადდება, ან როცა plugin-ს ეს სჭირდება. Minecraft-ის ვერსიის ნახტომი უფრო დიდი მოვლენაა: სამყაროები წინ განახლდება და არასოდეს უკან, plugin-ები ახალ Bukkit API-ებზე ტყდება, ხოლო 1.20-ის სამყარო, რომელიც 1.21-ის სერვერმა ერთხელ გახსნა, უკან ვეღარ დაბრუნდება. ყოველთვის ჯერ backup გააკეთე. Minecraft-ის ვერსიის განახლებები ამის ჩეკლისტია.
კიდევ ერთი რამ, რაც ხალხის მოსვლამდე ღირს: სამყარო წინასწარ დააგენერირე შენს განზრახულ საზღვრამდე. Chunk-ების გენერაცია სერვერის ყველაზე ძვირი ოპერაციაა და მისი წინასწარ ერთხელ გაკეთება პირველი კვირის გამოკვლევის lag-ს ერთჯერად სამუშაოდ აქცევს. სამყაროს საზღვრები და წინასწარი გენერაცია ინსტრუმენტებს განიხილავს, ხოლო SMP-ის გაშვების ჩეკლისტი გაშვებამდელი სიის დანარჩენს შეიცავს.
შეცდომები, რომლებსაც ნამდვილად შეხვდები#
`FAILED TO BIND TO PORT!` და შემდეგ java.net.BindException: Address already in use. 25565-ზე უკვე რაღაც ზის - ჩვეულებრივ სერვერის ის ასლი, რომელიც გგონია, რომ გააჩერე. იპოვე და გააჩერე, ან შეცვალე server-port.
`You need to agree to the EULA in order to run the server.` eula.txt ისევ false-ს ამბობს, ან სხვა საქაღალდეში არსებული ასლი დაარედაქტირე.
`java.lang.OutOfMemoryError: Java heap space`. Heap ნამდვილად სავსეა. აწიე -Xmx, თუ container-ის ან მანქანის ლიმიტის ქვეშ ადგილია, ხოლო თუ არ არის, იპოვე რა ჭამს მას - ჩვეულებრივ plugin, რომელიც chunk-ებს იჭერს, ან view distance, რომელიც იმ მეხსიერებისთვის ძალიან მაღალია, რომელიც იყიდე. გაარჩიე ეს იმისგან, როცა container ჩერდება მეხსიერების ლიმიტის გადაჭარბების გამო: პირველი Java-ა, რომელსაც მიცემული heap ამოეწურა, მეორე - kernel, რომელიც პროცესს აჩერებს. RE:NODE-ზე მეორე შემთხვევაში container ჩერდება და სუფთად ირთვება ხელახლა და არა swap-ში ტოვებს, რაც სწრაფია, მაგრამ ნიშნავს, რომ შეუნახავ სამყაროს ბოლო რამდენიმე წუთი ეკარგება.
`Can't keep up! Is the server overloaded? Running 2140ms behind, skipping 42 tick(s)`. სერვერმა tick-ის ბიუჯეტი მძიმედ გადააჭარბა. ერთჯერადი შემთხვევა სამყაროს გენერაციისას ან autosave-ისას ნორმალურია. განმეორებადი წარმადობის პრობლემაა - რატომ ეცემა TPS და რა ვქნათ და Paper-ის ოპტიმიზაციის გზამკვლევი ორივე ერთად მიზეზებს ფარავს.
`Internal Exception: io.netty.handler.timeout.ReadTimeoutException` კლიენტზე. სერვერმა ოცდაათი წამი პასუხი შეწყვიტა - გრძელი garbage collection-ის პაუზა, გაყინული tick ან ქსელის პრობლემა შენსა და მას შორის.
`io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused` კლიენტზე. ამ მისამართსა და პორტზე არავინ უსმენს. სერვერი არ მუშაობს, პორტი არასწორია ან firewall მას აგდებს.
`Outdated server! I'm still on 1.21.1` ან Outdated client!. Java Edition-ს ვერსიების ტოლერანტობა არ აქვს: კლიენტი და სერვერი ზუსტად, patch-ის სიზუსტით უნდა ემთხვეოდეს. Proxy-ს შეუძლია ეს მოთამაშეებისგან დამალოს, სხვას - არაფერს.
`Failed to verify username` ან `Failed to login: Invalid session`. Mojang-ის ავთენტიფიკაცია მიუწვდომელია ან მოთამაშის სესია ძველია. სთხოვე launcher-ის გადატვირთვა. თუ ეს ყველას ერთდროულად ემართება, შენ არ ხარ დამნაშავე.
სერვერი ირთვება, `Done` ჩნდება, ვერავინ შედის. გამოსცადე მისამართი შენი ქსელის გარედან. სერვერი, რომელიც LAN-ზე მუშაობს და ინტერნეტიდან - არა, ცხრა შემთხვევიდან ცხრაში firewall-ის ან port-forward-ის პრობლემაა, ხოლო კონსოლის კითხვა გაჩვენებს, ჩამოდის თუ არა კავშირის მცდელობა საერთოდ.
FAQ#
მჭირდება Minecraft-ის ყიდვა, რომ სერვერი გავუშვა?
სერვერის პროგრამა უფასოდ ჩამოიტვირთება და უშვება. მოთამაშეებს სჭირდებათ Minecraft-ის ლიცენზირებული ასლი, რომ online-mode=true სერვერზე შევიდნენ, რადგან ავთენტიფიკაცია სწორედ ამას ამოწმებს. სერვერის მანქანაზე ანგარიში არ გჭირდება.
შემიძლია სერვერის გაშვება სახლის კომპიუტერზე?
დიახ, და ეს გამოსაცდელად ყველაზე იაფი გზაა. პრობლემები Minecraft-ის გარეთაა: 25565 მანქანაზე უნდა გადამისამართო, როუტერს ეს საერთოდ უნდა შეეძლოს (მობილური და ოპტიკური კავშირების ბევრი ვარიანტი carrier-grade NAT-ის უკან გაყენებს, სადაც ეს შეუძლებელია), შენი upload სიჩქარე სახლში ყველასთანაა გაზიარებული და სამყარო მხოლოდ მაშინაა ონლაინ, როცა კომპიუტერია ჩართული. ორ მეგობართან საღამოსთვის კარგია, იმისთვის კი, რასაც ხალხი ხვალაც ელოდება, - ცუდი.
როგორ შევცვალო სამყაროს seed ან დავიწყო ახალი სამყარო?
დააყენე level-seed server.properties-ში და level-name შეცვალე საქაღალდეზე, რომელიც ჯერ არ არსებობს, შემდეგ გადატვირთე. ძველი სამყარო დისკზე თავისი სახელით რჩება, ამიტომ level-name-ის ხელახლა შეცვლით შეგიძლია დაბრუნდე. Seed-ის შეცვლა სახელის შეუცვლელად არაფერს აკეთებს, რადგან seed level.dat-ში ინახება, როგორც კი სამყარო არსებობს.
რატომ მაჩვენებს სერვერი მაქსიმუმ 20 მოთამაშეს, როცა მეტისთვის ადგილი მაქვს?
max-players=20 ნაგულისხმევია და ის მხოლოდ რიცხვია server.properties-ში. აწიე იმდენზე, რამდენსაც შენი მეხსიერება და CPU მართლა გაწვდება, რასაც ზემოთ ცხრილი აფასებს. ადგილების რაოდენობას ამ პარამეტრის გარდა არაფერი ზღუდავს.
Vanilla თუ Paper პატარა მეგობრების სერვერისთვის?
Paper, თუ vanilla რედსტოუნის ქცევა სპეციალურად არ გჭირდება. ის იმავე სამყაროს უშვებს, მოთამაშეები ჩვეულებრივი launcher-ით შემოდიან და permissions plugin-ის, ვებ რუკის ან backup plugin-ის მოგვიანებით დამატება არაფრის მიგრაციას არ მოითხოვს. Vanilla-დან Paper-ზე გადასვლა jar-ის გაცვლაა, რომელიც სამყაროს ინახავს; უკან დაბრუნებაც ასეა.
რომელი plugin უნდა დავაყენო პირველი?
Permissions plugin და პროფაილერი, რამე სახალისომდე. LuckPerms, რომ თანამშრომლის როლები ოთხი დონის op არ იყოს, და spark, რომ როცა სერვერი იჭედება, გამოცნობის ნაცვლად გაიგო, რამ გამოიწვია. Minecraft-ის plugin-ები, რომლებიც ღირს დაყენება მოკლე სიაა.




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