სამი პატარა რამ წყვეტს, რას ხედავს მოთამაშე შემოსვლამდე და როგორ გამოიყურება სამყარო შემოსვლის შემდეგ: MOTD სტრიქონი server.properties-ში, server-icon.png, რომელიც ზუსტად 64 პიქსელი კვადრატია, და resource pack, რომელიც URL-იდან ემსახურება და SHA-1 ჰეშს ემთხვევა. არცერთი მათგანი რთული არ არის და სამივე ერთნაირად ჩუმად ვარდება - სერვერი ირთვება, არაფერი ჩნდება და შეცდომა აშკარა არ არის. ეს პოსტი აღწერს, საიდან მოდის თითოეული, ზუსტ სინტაქსს, იმ escape-ის ჩათვლით, რომელიც ფერის კოდებს სჭირდება, და კონკრეტულ მიზეზებს, რის გამოც pack ჩამოტვირთვაზე უარს ამბობს.
რისგან შედგება სერვერების სიის ჩანაწერი#
როცა მოთამაშის კლიენტს შენი მისამართი შენახული აქვს, ის მოკლე კავშირს ხსნის და სტატუსს ითხოვს. შენი სერვერი JSON-ის პატარა ბლოკით პასუხობს და შემდეგ ping-ით, დაყოვნების გასაზომად. სიის ჩანაწერში ყველაფერი ამ პასუხიდან მოდის:
- აღწერა, ანუ შენი MOTD, ფორმატირებული ტექსტური კომპონენტი ორ სტრიქონად.
- მოთამაშეთა რაოდენობა, ონლაინ და მაქსიმუმი, პლუს სახელების ნიმუში, რომელიც ჩანს, როცა კურსორს რაოდენობაზე მიაჩერებ.
- ვერსიის სახელი და პროტოკოლის ნომერი, რაც წითელ "Outdated client" ტექსტს წარმოქმნის, როცა ისინი არ ემთხვევა.
- Favicon, 64x64 PNG, თავად პასუხში ჩაწერილი.
მთელი გაცვლა ავთენტიფიკაციამდე ხდება, ამიტომ ჩანაწერი მუშაობს იმ სერვერისთვისაც, რომელსაც ვერ შეხვალ. სწორედ ამიტომ ხდის enable-status=false server.properties-ში მომუშავე სერვერს ყველასთვის გათიშულად გამოჩენას: სერვერი უბრალოდ უარს ამბობს კითხვაზე პასუხზე. ეს პარამეტრი ხანდახან კერძო სერვერისთვის გამოსადეგია და ხანდახან მიზეზია იმისა, რომ ვიღაც საათს ხარჯავს firewall-ის დებაგზე, რომელიც სწორადაა.
კიდევ ერთი რამ, რაც უნდა იცოდე რედაქტირებამდე: თუ proxy გაქვს, სტატუსის მოთხოვნას proxy პასუხობს და არა backend. MOTD, ხატულა და მოთამაშეთა რაოდენობა ყველა proxy-ის საკუთარი კონფიგურაციიდან მოდის, და ის, რასაც უკან მდგომ Paper სერვერზე დააყენებ, არასოდეს გამოჩნდება. ამას ხალხი იმ დღეს ეჯახება, როცა მომუშავე სერვერს Velocity proxy-ს უმატებს.
MOTD-ის წერა#
motd ცხოვრობს server.properties-ში სერვერის root-ში და ნაგულისხმევად არის A Minecraft Server. ფაილი Java properties ფაილია, რაც გაძლევს ორ სასარგებლო escape-ს და ერთ ხაფანგს.
motd=§6§lTHE MINE§r §7| §avanilla survival 1.21\n§8no whitelist §7- §fmc.example.com\n მეორე სტრიქონს იწყებს. § არის სექციის ნიშანი, სიმბოლო, რომელიც ფორმატირების კოდს იწყებს. ზოგჯერ შეგიძლია ფაილში პირდაპირი სექციის ნიშანი ჩააწერო და იმუშავებს, მაგრამ ის გადარჩება თუ არა, დამოკიდებულია კოდირებაზე, რომელშიც ფაილი შეინახა, და რედაქტორზე, რომელმაც შეინახა, ამიტომ escape ვერსიაა ის, რომელიც ყოველთვის მუშაობს. პანელის ფაილის რედაქტორი UTF-8-ს წერს; Windows-ზე ტექსტური რედაქტორი შეიძლება არა.
| კოდი | ეფექტი | კოდი | ეფექტი |
|---|---|---|---|
0 | შავი | 8 | მუქი ნაცრისფერი |
1 | მუქი ლურჯი | 9 | ლურჯი |
2 | მუქი მწვანე | a | მწვანე |
3 | მუქი aqua | b | aqua |
4 | მუქი წითელი | c | წითელი |
5 | მუქი იასამნისფერი | d | ღია იასამნისფერი |
6 | ოქროსფერი | e | ყვითელი |
7 | ნაცრისფერი | f | თეთრი |
l | გამუქებული | o | დახრილი |
n | ხაზგასმული | m | გადახაზული |
k | დაბინდული | r | გასუფთავება |
რამდენიმე წესი, რომელიც არსად წერია თვალსაჩინოდ. ფორმატირების კოდები ისე არ ეწყობა, როგორც ელი: ფერის კოდი ფორმატირებას ასუფთავებს, ამიტომ §l§a გამუქებული მწვანეა, ხოლო §a§l მწვანეა და შემდეგ გამუქებული, რაც იგივეა მხოლოდ რიგითობის შემთხვევითობით - ფერი პირველი დააყენე და სტილი მეორე და გაკვირვება აღარ გექნება. §r ორივეს ასუფთავებს. და კლიენტი ყოველ სტრიქონს სიის ჩანაწერის სიგანეზე ჭრის, რაც ჩვეულებრივი ტექსტის დაახლოებით 45 სიმბოლოა, გამუქებულით - ნაკლები. მეორე სტრიქონი მეორეხარისხოვნად დაწერე და მნიშვნელოვანი სიტყვა პირველი დააყენე.
თექვსმეტი კლასიკური ფერისგან განსხვავებული ყველაფრისთვის - გრადიენტები, თითო სიმბოლოზე RGB - გამოიყენე plugin, რომელიც MOTD-ს ping-ის დროს სრულ ტექსტურ კომპონენტად აწვდის. Paper ბევრ ადგილას Bungee-სტილის §x hex თანმიმდევრობას იგებს, მაგრამ MOTD სწორედ ის ადგილია, სადაც უნდა გამოსცადო და არა ივარაუდო, რადგან ჩავარდნის სახე საჯარო სიაში ხილული უაზრო სიმბოლოების სტრიქონია. MOTD plugin ასევე გზაა, რომ ping-ზე შემთხვევითი სტრიქონი, ტექნიკური სამუშაოების შეტყობინება ან მოძველებული კლიენტებისთვის განსხვავებული MOTD მიიღო.
დაბინდული ტექსტი (§k) MOTD-ში ყოველ კადრზე ანიმირდება და გატეხილ შრიფტს ჰგავს სიების საიტების ნახევარზე, რომლებიც მას აგროვებენ. გამოიყენე მაქსიმუმ ერთ სიტყვაზე, ან საერთოდ არ გამოიყენო.
server-icon.png#
ხატულა ფაილია, რომელსაც ზუსტად server-icon.png ჰქვია, სერვერის root დირექტორიაში - იმავე საქაღალდეში, სადაც server.properties და სამყაროს საქაღალდეა, და არა plugins/-ის შიგნით.
ის უნდა იყოს PNG, ზუსტად 64 პიქსელი 64-ზე. არა 128, არა 63, არა JPEG, რომელსაც .png დაარქვეს. გამჭვირვალობა მხარდაჭერილია და სიის მუქ ფონზე კარგად გამოიყურება. ყველაფერი სხვა და სერვერი გაშვებისას ერთ სტრიქონს ბეჭდავს და ხატულის გარეშე აგრძელებს:
[Server thread/WARN]: Couldn't load server iconფაილი ერთხელ იკითხება გაშვებისას და მეხსიერებაში ინახება, ამიტომ მისი შეცვლა გადატვირთვას მოითხოვს და არა reload-ს. პანელზე ატვირთე ის ფაილების მენეჯერით სერვერის root-ში, შემდეგ კონსოლიდან გადატვირთე. მოთამაშემ, რომლის კლიენტიც ისევ ძველ ხატულას აჩვენებს, მრავალმოთამაშიანი სია უნდა განაახლოს; თუ ის რჩება, სერვერის ჩანაწერის წაშლა და ხელახლა დამატება ყოველთვის წყვეტს.
თუ სურათი, რომელიც გინდა, კვადრატული არ არის, მოჭერი და არ დაჭყლიტო. სამოცდაოთხი პიქსელი იმდენად პატარაა, რომ წვრილი დეტალები ქრება, ამიტომ ერთი გამბედავი ფორმა გაცილებით უკეთ იკითხება, ვიდრე ლოგო ტექსტით.
მოთამაშეთა რაოდენობის სტრიქონი#
max-players server.properties-ში არის რიცხვი ჩანაწერის მარჯვნივ და ის არის რიცხვი, რომელსაც სერვერი რეალურად ახორციელებს. მისი გაზრდა სერვერს იმდენი ადამიანის ტევადობას არ აძლევს; ის მხოლოდ უარს აქრობს. რისი დატევაც შენს გეგმას მართლა შეუძლია, მეხსიერებისა და CPU-ს საკითხია და განხილულია აქ: რამდენი მოთამაშე ეტევა სერვერზე.
hide-online-players ნაგულისხმევად false-ია. true-ზე დაყენება hover-ის ტოლტიპიდან სახელების ნიმუშს აშორებს და რაოდენობებს ტოვებს. ეს გონივრული კონფიდენციალურობის პარამეტრია კერძო სერვერისთვის და საჯაროსთვის არაფერს აკეთებს.
plugin-ები, რომლებიც მოთამაშეთა რაოდენობას იგონებენ, არსებობს. მათ თავი აარიდე: რიცხვები query პორტთან ადვილად მოწმდება, სიების რამდენიმე საიტი ამას ამოშლის საფუძვლად თვლის, და სერვერი, რომელიც ორმოც მოთამაშეს აცხადებს და სამი ჰყავს, უარეს პირველ შთაბეჭდილებას ტოვებს, ვიდრე ის, რომელსაც გულწრფელად სამი ჰყავს.
Resource pack-ები: ოთხი პარამეტრი#
სერვერს შეუძლია ყოველი შემომსვლელი კლიენტისგან resource pack-ის ჩამოტვირთვა და გამოყენება მოითხოვოს. ამას server.properties-ში ოთხი გასაღები მართავს და ყველა ნაგულისხმევად ცარიელია.
| გასაღები | რას იღებს |
|---|---|
resource-pack | პირდაპირ URL-ს .zip-ზე |
resource-pack-sha1 | ზუსტად ამ ფაილის 40-სიმბოლოიან პატარა ასოებით SHA-1-ს |
require-resource-pack | true გამოთიშავს ყველას, ვინც უარს იტყვის. 1.17 და უფრო ახალი |
resource-pack-prompt | JSON ტექსტურ კომპონენტს, რომელიც მიღების ეკრანზე ჩანს. 1.17 და უფრო ახალი |
resource-pack=https://packs.example.com/themine-v7.zipresource-pack-sha1=2fd4e1c67a2d28fced849ee1bb76e7391b93eb12require-resource-pack=falseresource-pack-prompt={"text":"Our pack adds custom block sounds and item models."}1.20.3-ზე და უფრო ახალზე ასევე არსებობს resource-pack-id, UUID, რომელიც pack-ს ამოიცნობს და არსებობს იმიტომ, რომ ამ ვერსიამ რამდენიმე pack-ის ერთდროულად გამოყენების და მათი ცალ-ცალკე დამატების ან მოშორების შესაძლებლობა დაამატა. უფრო ძველ ვერსიებზე ერთი pack არსებობს და ის ყველაფერს ანაცვლებს, რაც მანამდე იყო.
თავად zip სწორად უნდა იყოს აწყობილი, თორემ კლიენტი მას არასწორ pack-ად უარყოფს. pack.mcmeta უნდა იყოს არქივის ზედა დონეზე, assets/-ის გვერდით. ყველაზე გავრცელებული შეცდომა მსოფლიოში არის pack-ის საქაღალდის მონიშვნა და შეკუმშვა, რაც MyPack/pack.mcmeta-ს ქმნის ერთი დონით ქვემოთ. მონიშნე შიგთავსი და არა საქაღალდე. pack.mcmeta-ს შიგნით pack_format არის რიცხვი, რომელიც თამაშის ვერსიაზეა მიბმული; როცა ის არ ემთხვევა, ვერსიების უმეტესობა pack-ს მაინც ტვირთავს გაფრთხილებით, რომ ის სხვა ვერსიისთვისაა შექმნილი, ზოგი ფუნქცია კი უხმოდ არ მოქმედებს.
zip-ის განთავსება და ჰეშის სწორად მიღება#
URL-ს კლიენტი იღებს და არა სერვერი. ის საჯაროდ მისაწვდომი უნდა იყოს HTTP-ით ან HTTPS-ით, ფაილი პირდაპირ დააბრუნოს 200-ით და HTML გვერდზე ჯერ არ გადაგზავნოს. ეს გამორიცხავს მომხმარებლისთვის განკუთვნილი ფაილების გაზიარების სერვისების ბმულებს, რომლებიც ფაილის ნაცვლად ჩამოტვირთვის ღილაკიან ვებ გვერდს გვიბრუნებენ. ის ასევე გამორიცხავს ყველაფერს, რაც ბოტებისგან დაცვის გამოწვევის უკანაა.
შეამოწმე ის მანქანიდან, რომელიც შენი სერვერი არ არის:
$ curl -IL https://packs.example.com/themine-v7.zipHTTP/2 200content-type: application/zipcontent-length: 4823914302, რომელიც .html-ით მთავრდება, 403 ან content-type text/html ყველა ნიშნავს, რომ კლიენტი ვერ ჩამოტვირთავს. ნებისმიერი პატარა სტატიკური ჰოსტი გამოდგება: ვებ ჰოსტინგის გეგმა, ობიექტების საცავი საჯარო ობიექტებით ან release asset კოდის ჰოსტზე. RE:NODE-ის ვებ გეგმები სტატიკურ ფაილებს თვეში $3-დან ემსახურებიან და reverse-proxy სლოტს შეიცავენ - მიუთითე A ჩანაწერი ნაჩვენებ მისამართზე და სერტიფიკატი შენთვის გაიცემა და განახლდება, ამიტომ pack-ის URL HTTPS-ია ყოველგვარი შრომის გარეშე. ამის სერტიფიკატის მხარე აღწერილია აქ: შენი დომენი და მისი სერტიფიკატი.
ახლა ჰეში. SHA-1 არის ის, რითაც კლიენტი იგებს, ახალია თუ არა ასლი, რომელიც უკვე აქვს:
$ sha1sum themine-v7.zip2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 themine-v7.zipWindows-ზე certutil -hashfile themine-v7.zip SHA1 ან PowerShell-ში Get-FileHash -Algorithm SHA1 themine-v7.zip. ჩასვი მნიშვნელობა პატარა ასოებით და შუალედების გარეშე.
აქ სამი რამ ტყდება და სამივე თავიდან ასაცილებელია:
- ჰეში საერთოდ არ არის. pack მაინც მუშაობს, მაგრამ კლიენტს არ შეუძლია გაარკვიოს, ემთხვევა თუ არა მისი ქეშირებული ასლი, ამიტომ ყოველ შემოსვლაზე ხელახლა ჩამოტვირთავს. 40 MB pack-ზე ეს ძალიან ნელი შესვლის ეკრანია.
- მოძველებული ჰეში. zip განაახლე და პარამეტრი - არა. კლიენტი ფაილს ჩამოტვირთავს, აღმოაჩენს, რომ ის არ ემთხვევა, და უარს ამბობს ან აფრთხილებს. განაახლე ორივე ერთად, ყოველთვის.
- ქეშირებული URL. ზოგი კლიენტი და შუალედური ქეშების უმეტესობა URL-ზეა დამოკიდებული. შეცვალე ფაილის სახელი ყოველ ჯერზე, როცა შიგთავსს ცვლი -
themine-v7.zip, შემდეგthemine-v8.zip- და პრობლემის მთელი კლასი ქრება.
pack პატარა შეინახე. კლიენტი ძალიან დიდ pack-ებს პირდაპირ უარყოფს - ზღვარი თანამედროვე ვერსიებზე დაახლოებით 100 MB-ია, ძველზე კი ნახევარი იყო - მაგრამ რიცხვი, რომელიც მნიშვნელოვანია, ლიმიტი კი არა, შესვლის დროა. მოთამაშე ნელ კავშირზე, რომელიც 60 MB ჩამოტვირთვას უყურებს, სანამ შენი spawn-ის დანახვა შეეძლება, ხშირად უბრალოდ წავა. 10 MB-ზე ნაკლები კარგი მიზანია და წონის უმეტესობა ჩვეულებრივ შეუკუმშავი ტექსტურებია იმ გარჩევადობით, რომელსაც ვერავინ ამჩნევს.
pack-ის იძულება და უნდა თუ არა#
require-resource-pack=true pack-ს შეთავაზებიდან პირობად გარდაქმნის: უარი თქვი და გამოგთიშავენ. resource-pack-prompt შენი ერთადერთი შანსია, ახსნა, რატომ, ამიტომ გამოიყენე ის გამამხნევებელი წინადადებისთვის და არა ლოზუნგისთვის.
ორი გულწრფელი მიზეზი, რის გამოც არ უნდა აიძულო. პირველი, მოთამაშე, რომლის კლიენტშიც ამ სერვერის ჩანაწერზე "Server Resource Packs" Disabled-ზეა, ავტომატურად უარს ამბობს, prompt-ს არასოდეს ნახავს და გამოთიშავენ შეტყობინებით, რომელსაც წაიკითხავს როგორც "ეს სერვერი გაფუჭებულია". მეორე, იძულება პირველი შემოსვლის კრიტიკულ გზაზე ჩამოტვირთვას ამატებს, რაც ახალი მოთამაშის შენს სერვერთან ურთიერთობის ყველაზე მყიფე მომენტია.
იძულება სწორია, როცა pack მასზე დაყრდნობილია - მორგებული ნივთები, რომელთა მოდელები არის თამაში, რუკა, რომელიც მორგებულ ხმებზეა დამოკიდებული. ყველაფერი სხვა უკეთესია არჩევითად, ან plugin-ით თითო მოთამაშეზე გადაცემული მას მერე, რაც შემოვიდნენ, რასაც pack-ის მართვის plugin-ების უმეტესობა იმავე მექანიზმით უჭერს მხარს, რასაც სერვერი იყენებს.
Bedrock მოთამაშეები, რომლებიც Geyser-ით შემოდიან, სრულიად ცალკე შემთხვევაა: მათ Java pack-ის წაკითხვა არ შეუძლიათ, რადგან Bedrock სხვა pack ფორმატს იყენებს. Geyser Bedrock pack-ებს თავისი packs/ საქაღალდიდან ემსახურება, ამიტომ crossplay სერვერი, რომელსაც გარეგნობა აინტერესებს, ორს ინახავს. ეს განხილულია აქ: Geyser და Floodgate.
პრობლემების მოგვარება#
სიაში MOTD ძველია. კლიენტი ჩანაწერს ქეშირებს, სანამ სია არ განახლდება. დააჭირე refresh-ს ან გამოდი და ისევ შედი მრავალმოთამაშიან ეკრანზე. თუ არასოდეს ახლდება, ping-ს proxy პასუხობს.
ფერის კოდები ბუკვალურ ტექსტად ჩანს. ან ფაილში ნამდვილი სექციის ნიშანი ჩაიწერა კოდირებით, რომელიც სერვერმა ასეთად არ წაიკითხა, ან კოდი &-ით აიკრიფა. & კოდები plugin-ის კონვენციაა; vanilla server.properties-ს სექციის ნიშანი სჭირდება, ყველაზე კარგად §-ად ჩაწერილი.
ხატულა არ ჩანს. თითქმის ყოველთვის ზომებია. გახსენი ფაილი და შეამოწმე, რომ 64x64-ია, და შეამოწმე გაშვების ლოგი გაფრთხილებისთვის. PNG, რომელიც 64x64-ზეა ექსპორტირებული ალფა არხით, არის ის, რაც მუშაობს.
კლიენტზე "Failed to download resource pack". URL თავად ჩამოტვირთე curl -IL-ით სხვა მანქანიდან. ალბათობის მიხედვით: ის HTML გვერდზე გადამისამართდება, სერტიფიკატი არასწორია ან ამოწურულია, ჰოსტი მოთხოვნას ბლოკავს ან ფაილი ძალიან დიდია.
pack ჩამოიტვირთა, მაგრამ არაფერი შეცვლილა. zip-ის სტრუქტურა. pack.mcmeta ზედა დონეზე უნდა იყოს. გახსენი შენივე ფაილი და შეხედე.
pack შენთვის განახლდა და სხვებისთვის არა. მათ კლიენტს ძველი ფაილი აქვს ქეშირებული იმავე URL-ითა და იმავე ჰეშით. გადაარქვი ფაილს სახელი და განაახლე ორივე პარამეტრი.
სერვერი სიაში საერთოდ არ ჩანს. ეს MOTD-ის პრობლემა არ არის. შეამოწმე, რომ სერვერი მუშაობს, რომ კლიენტის ჩანაწერში პორტი თამაშის პორტია და რომ enable-status არის true. ამის უფრო ფართო ვერსია აღწერილია აქ: server.properties განმარტებით.
FAQ#
რამდენი ხანი შეიძლება იყოს MOTD?
არ არსებობს მკაცრი ლიმიტი, რომელსაც შეეჯახები, მაგრამ კლიენტი ორივე სტრიქონს ჩვეულებრივი სიგანის ტექსტის დაახლოებით 45 სიმბოლოზე ჭრის, გამუქებული სიმბოლოები კი უფრო განიერია. დაწერე 40-ზე და შეამოწმე ნამდვილ კლიენტში და ნუ დაითვლი.
შემიძლია თუ არა MOTD-ის შეცვლა გადატვირთვის გარეშე?
server.properties-იდან - არა, რადგან ის გაშვებისას იკითხება. MOTD plugin-ს შეუძლია ის ცოცხლად შეცვალოს, Paper-ზე კი ამ კონკრეტული plugin-ის კონფიგურაციის reload ჩვეულებრივ საკმარისია. ფაილის შეცვლა და გადატვირთვა საიმედო გზაა.
სად ზუსტად მიდის server-icon.png?
სერვერის root დირექტორიაში, server.properties-ის, eula.txt-ისა და სამყაროს საქაღალდის გვერდით. არა plugins/-ში, არა სამყაროს საქაღალდეში. პანელზე ეს ფაილების მენეჯერის ზედა დონეა.
მჭირდება თუ არა SHA-1 ჰეში resource pack-ისთვის?
იმისთვის, რომ იმუშაოს - არა, მაგრამ პრაქტიკაში - დიახ. მის გარეშე ყოველი მოთამაშე pack-ს ყოველ შემოსვლაზე ხელახლა ჩამოტვირთავს. მასთან ჩამოტვირთვა ერთხელ ხდება და კლიენტი თავის ასლს იყენებს, სანამ ჰეში არ შეიცვლება.
რატომ შემოდიან ზოგი მოთამაშე pack-ის გარეშე?
იმიტომ, რომ მათ კლიენტის სერვერის ჩანაწერში resource pack-ები შენი სერვერისთვის გამორთული აქვთ, რაც prompt-ს ავტომატურად უარყოფს. თუ require-resource-pack არის false, ისინი მის გარეშე შემოდიან და არაფერი გატყობინებს; თუ true, გამოთიშავენ და სერვერს დაადანაშაულებენ.



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