redstone იშვიათად არის მიზეზი, რის გამოც ჩვეულებრივი survival სერვერი ლაგავს, და თითქმის ყოველთვის არის მიზეზი, რის გამოც ტექნიკური სერვერი ლაგავს. ხარჯები კონკრეტული და პროგნოზირებადია: hopper-ები, რომლებიც ნივთებს ყოველ tick-ზე ამოწმებს, საათები, რომლებიც არასოდეს ჩერდება, დგუშები, რომლებიც ბლოკებს აადგილებს და განათებისა და მეზობლების განახლებებს იწვევს, და მტვრის გრძელი ხაზები, რომლებიც თითო იმპულსზე ათასობით პოზიციას აახლებს. Paper-ზე უარესის გაიაფება შეგიძლია misc.redstone-implementation: alternate-current-ით, hopper-ის პარამეტრებით spigot.yml-სა და paper-world-defaults.yml-ში და vanilla-ს max-chained-neighbor-updates ზღვრით. ამის მიღმა საქმე იმ ერთი მექანიზმის პოვნაა, რომელიც tick-ზე ათი მილიწამი ჯდება, და ისეთი წესების ქონაა, რომლებიც მის გამორთვას ჩხუბის გარეშე გაძლევს.
ეს გზამკვლევი იმაზეა, რას უშვრება redstone tick-ს და როგორ გააკონტროლო ის. Paper-ის ზოგადი მორგება Paper-ის ოპტიმიზაციაშია, ხოლო ფერმების მხარე - სოფლელები და მობები - სოფლელებისა და მობების ფერმების ლაგშია.
რა უჯდება სინამდვილეში redstone#
სასარგებლოა redstone-ის დაყოფა იმ ნაწილებად, რომლებიც რაღაც ჯდება, რადგან ისინი სხვადასხვაგვარად სწორდება.
| კომპონენტი | რატომ ჯდება | რასთან ერთად იზრდება |
|---|---|---|
| redstone მტვერი | ყოველი ცვლილება მეზობლებს ატყობინებს, ისინი კი თავისას | მტვრის ხაზების სიგრძე, იმპულსების სიხშირე |
| hopper-ები | თითოეული ტაიმერით ამოწმებს ნივთებს ამოსაღებად და გასაგზავნად | hopper-ების რაოდენობა, უსაქმოდ არიან თუ არა |
| დგუშები | მოძრავი ბლოკები block entity-ებად იქცევა, შემდეგ კი სინათლისა და ფორმის განახლებებს იწვევს | თითო იმპულსზე გადაადგილებული ბლოკები |
| observer-ები | ირთვება ყოველ ბლოკის ცვლილებაზე, რასაც ხედავს | საათის სიჩქარე, ჯაჭვად დაკავშირებული observer-ები |
| comparator-ები | კონტეინერების შიგთავსს კითხულობს | თვალთვალის ქვეშ მყოფი კონტეინერები, განახლების სიხშირე |
| ნათურები და განათება | სინათლის ხელახალი გამოთვლა გადართვისას | ერთდროულად გადართული რაოდენობა |
| item entity-ები | მიწაზე ან წყლის ნაკადებში დაყრილი ნადავლი | ფერმის პროდუქცია შეგროვების გარეშე |
რეალურ სერვერებზე ორი დომინირებს: hopper-ები და საათები. hopper-ები ძვირია, რადგან უსაქმოდ ყოფნისასაც მუშაობს; საათები ძვირია, რადგან არასოდეს ჩერდება, ასე რომ მექანიზმი, რომელიც ათ წამს კარგად იქნებოდა, ათ საათს მუშაობს. დგუშებით დატვირთული ნაგებობები - მფრინავი მანქანები, ხეების ფერმები, კედლის კარები - უფრო ნახტომისებურია, ვიდრე მუდმივი: იმპულსის დროს ბევრი ჯდება და შუალედში არაფერი.
აქ ყველაფერი მხოლოდ მოთამაშის simulation distance-ის შიგნით მუშაობს, ან chunk-ებში, რომლებიც სხვა მიზეზით რჩება ჩატვირთული. მექანიზმი ბაზაში, რომლის ახლოსაც არავინაა, არაფერი ჯდება. ეს დიაგნოსტიკისთვის მნიშვნელოვანია: ლაგის ნახტომი, რომელიც კონკრეტული მოთამაშის შემოსვლისას ჩნდება, ჩვეულებრივ ნიშნავს, რომ წყარო მისი ბაზაა.
hopper-ები: ყველაზე დიდი ცალკეული ბერკეტი#
vanilla-ს hopper ორ საქმეს აკეთებს: ცდილობს ნივთი გადაიტანოს კონტეინერში, რომლისკენაც მიმართულია, და ცდილობს ნივთი ამოიღოს მის ზემოთ მყოფი კონტეინერიდან ან მიწიდან. მეორე საქმე სრულდება, იქ რამე არის თუ არა, ყოველ tick-ზე, ყოველი hopper-ისთვის ყოველ tick-ის მქონე chunk-ში. ნივთების სორტერები ორასი hopper-ით ამას tick-ზე ორასჯერ აკეთებს.
ticks-per: hopper-transfer: 8 hopper-check: 1hopper-amount: 1hopper-transfer არის vanilla-ს რვა tick-იანი შესვენება გადატანებს შორის. hopper-check არის, რამდენად ხშირად ეძებს უსაქმო hopper სამუშაოს; 1-ზე ის ყოველ tick-ზე ეძებს. hopper-check-ის 8-მდე აწევა hopper-ებით დატვირთულ სერვერზე ერთ-ერთი ყველაზე დიდი მოგებაა. კომპრომისი ოდნავ უფრო ზარმაცი აკრეფაა - უსაქმო hopper-ზე დავარდნილი ნივთი შეიძლება რამდენიმე tick-ს დაელოდოს ამოღებამდე - რასაც თითქმის არცერთი დიზაინი არ ამჩნევს.
hopper-amount არის, რამდენი ნივთი გადადის თითო გადატანაზე. მისი აწევა hopper-ებს vanilla-ზე სწრაფს ხდის, რაც ნივთების სორტერებსა და დროის სქემებს აფუჭებს, რომლებიც vanilla-ს სიჩქარეზეა გათვლილი. დატოვე 1-ზე, თუ განზრახ არ ცვლი თამაშის მექანიკას.
Paper config/paper-world-defaults.yml-ში კიდევ სამს ამატებს:
hopper: cooldown-when-full: true disable-move-event: false ignore-occluding-blocks: falseეს ნაგულისხმევი მნიშვნელობებია და თითოეულს თავისი ხაფანგი აქვს:
cooldown-when-full: trueსავსე hopper-ს შესვენებაზე აყენებს, ნაცვლად იმისა, რომ ყოველ tick-ზე ხელახლა სცადოს. დატოვე ჩართული.disable-move-event: truehopper-ის გადატანებისთვის Bukkit-ის inventory move event-ს გამოტოვებს. ბევრი hopper-ის დროს ეს დიდი დანაზოგია და აფუჭებს ყველა plugin-ს, რომელიც ამ event-ს უსმენს: ზოგიერთი დაცვის plugin მას იყენებს, რომ hopper-ებმა ჩაკეტილი სკივრებიდან არ მოიპარონ, ზოგიერთი ლოგირების plugin - გადატანების ჩასაწერად, ზოგიერთი მაღაზიის plugin კი მასზეა დამოკიდებული. ჩართვამდე წაიკითხე შენი plugin-ების სია და კონკრეტულად შენი დაცვის plugin-ით გამოსცადე.ignore-occluding-blocks: truehopper-ებს უკრძალავს ნივთების კონტეინერების შემოწმებას მათ ზემოთ მყოფი მყარი ბლოკების გავლით. მცირე დანაზოგი უცნაური კიდური შემთხვევებით; სერვერების უმეტესობა ამას ტოვებს.
hopper-ვაგონები ცალკე ხსენებას იმსახურებს: ისინი entity-ებია, ნივთებს უფრო დიდ ზონაში აგროვებს, და hopper-ვაგონების ჯაჭვი ფერმის ქვეშ სწრაფი და შედარებით ძვირია. წყლის ნაკადები, რომლებიც მცირე რაოდენობის hopper-ს კვებავს, ყოველი ბლოკის ქვეშ hopper-ების გრძელ ხაზზე იაფია.
საათები, observer-ები და რაც არასოდეს ჩერდება#
redstone საათი იმპულსებს სამუდამოდ აწარმოებს. observer-ის საათები (ორი observer, რომლებიც ერთმანეთს უყურებს) ყოველ ორ თამაშის tick-ში იძლევა იმპულსს; comparator-ისა და hopper-ის საათები უფრო ნელა მუშაობს. ღირებულება დამოკიდებულია იმაზე, რას აკეთებს თითოეული იმპულსი: საათი, რომელიც ერთ ნათურას მართავს, იაფია, საათი, რომელიც ქვიშის მიმწოლი დგუშების რიგს მართავს - არა.
პრობლემა თავად საათები არ არის. პრობლემა საათებია, რომლებიც მუშაობას აგრძელებს, როცა იმას, რასაც ამოძრავებენ, არავინ იყენებს. შაქრის ლერწმის ფერმა, რომელიც ყოველ ორ წუთში ირთვება, თითქმის არაფერი ჯდება; observer-ის საათზე აშენებული, რომელიც ყოველ ორ tick-ში ირთვება, თითო იმპულსზე ცოტა ჯდება - საათში სამოცი ათასჯერ.
ნიმუშები, რომლებიც უნდა შეაფერხო ან აკრძალო:
- საათები გამორთვის გარეშე. ყველა საათს უნდა ჰქონდეს ბერკეტი ან ჩამკეტი. "საათი გამორთვის საშუალებით" გონივრული სერვერის წესია.
- observer-ის საათები, რომლებიც დგუშებს ამოძრავებს. სწრაფი, უწყვეტი დგუშის მოძრაობა წამში რამდენჯერმე იწვევს ბლოკების განახლებებს, განათების სამუშაოს და მოძრავ block entity-ებს.
- ლაგის მანქანები. მექანიზმები, რომლებიც სპეციალურად განახლებების გამოსაწვევად აშენდა - დგუშების მასიური მწკრივები, სწრაფი TNT, ბლოკის განახლების დეტექტორები ციკლებში. საჯარო სერვერზე ეს grief-ია და ასეც უნდა მოეპყრო.
საჯარო სერვერზე plugin, რომელიც პოულობს და ამტვრევს redstone-ს, რომელიც ზღვარზე სწრაფად იძლევა იმპულსს, გავრცელებული დამცავი ბადეა (AntiRedstoneClock ყველაზე ცნობილი სახელია). ის მუშაობს და ლეგიტიმურ სწრაფ ფერმებსაც დაამტვრევს, ამიტომ მისი ზღვარი იმაზე მოარგე, რასაც შენი წესები უშვებს, და ცნობილი ნაგებობები whitelist-ში შეიტანე. ეს სარეზერვო დაცვაა და არა წესების შემცვლელი.
redstone-ის იმპლემენტაციის პარამეტრი#
vanilla-ში redstone მტვერი მეზობლებს ისეთი თანმიმდევრობით აახლებს, რომ ბევრ ზედმეტ განახლებას აწარმოებს. მტვრის გრძელმა ხაზმა მდგომარეობის ერთი ცვლილებისთვის ათობით ათასი ბლოკის განახლება შეიძლება გამოიწვიოს. Paper ალტერნატიულ ალგორითმებს გთავაზობს:
misc: redstone-implementation: vanilla| მნიშვნელობა | რა არის | როდის გამოიყენო |
|---|---|---|
vanilla | თამაშის საკუთარი მტვრის ქცევა | პურისტები, სერვერები ძალიან ზუსტი ტექნიკური ნაგებობებით |
eigencraft | მტვრის ძველი ოპტიმიზებული ალგორითმი | ძირითადად ჩანაცვლებულია |
alternate-current | მტვრის გადაწერილი ალგორითმი გაცილებით ნაკლები ზედმეტი განახლებით | თითქმის ყველა სერვერი მნიშვნელოვანი redstone-ით |
Alternate Current მტვრის დიდ სქემებზე მკვეთრად სწრაფია და პრაქტიკაში vanilla-ს იგივე შედეგს იძლევა. განსხვავება განახლებების თანმიმდევრობაშია, რაც მნიშვნელოვანია მხოლოდ იმ ნაგებობებისთვის, რომლებიც მტვრის განახლებების ზუსტ თანმიმდევრობაზეა დამოკიდებული - quasi-connectivity-ისა და განახლების თანმიმდევრობის ზოგიერთი ხრიკი, რომელსაც ტექნიკური მოთამაშეები იყენებენ. თუ შენს საზოგადოებაში არიან ადამიანები, ვინც ასეთ რამეებს აშენებს, ჰკითხე; სხვა შემთხვევაში ეს თითქმის უფასო გაუმჯობესებაა.
server.properties-ში vanilla-ს უსაფრთხოების ლიმიტიც არის:
max-chained-neighbor-updates=1000000ის ზღუდავს, რამდენი ჯაჭვური მეზობლის განახლება შეიძლება მოხდეს ერთბაშად, სანამ დანარჩენი გამოიტოვება. ის არსებობს იმისთვის, რომ მექანიზმმა სერვერი დაუსრულებელი კასკადით არ გაყინოს. მისი შემცირება ლაგის მანქანებისგან გიცავს, მაგრამ ძალიან დიდი ლეგიტიმური ნაგებობების გაფუჭების რისკით; სერვერების უმეტესობას შეუძლია ნაგულისხმევი დატოვოს, ხოლო სერვერს, რომელსაც განახლების კასკადის მანქანებით შეუტიეს, შეუძლია შეამციროს, გამოსცადოს და მოარგოს. იმ ფაილის ყველა სხვა გასაღები განხილულია server.properties-ის ახსნაში.
დგუშები, დუბლირება და Paper-ის exploit-ის პარამეტრები#
დგუშებთან წარმადობა და სამართლიანობა ერთმანეთს კვეთს. vanilla რამდენიმე დუბლირების ხრიკს უშვებს - TNT-ის, ხალიჩისა და ლიანდაგის დუბლირებას დგუშებით - რომლებსაც ტექნიკური მოთამაშეები TNT-ზე მომუშავე გვირაბის საბურღებსა და world eater-ებში იყენებენ. Paper მათ ნაგულისხმევად თიშავს, განყოფილებაში, რომელსაც სახელი განზრახ გაფრთხილებისთვის აქვს:
unsupported-settings: allow-headless-pistons: false allow-piston-duplication: false allow-permanent-block-break-exploits: falseallow-piston-duplication: true-ის დაყენება TNT-ის, ხალიჩისა და ლიანდაგის დუბლირებას აბრუნებს. ეს უპირველესად გეიმფლეის გადაწყვეტილებაა: TNT დუპერები bedrock-ის დონემდე კარიერების თხრასა და world eater-ებს შესაძლებელს ხდის და ასევე სხვისი ნაგებობების მიწასთან გასწორებას ტრივიალურს ხდის, თუ შენი დაცვის plugin აფეთქებებს არ აჩერებს. ეს წარმადობის გადაწყვეტილებაც არის: საათზე მომუშავე TNT დუპერი უწყვეტად ქმნის აფეთქებებს, ვარდნილ ბლოკებსა და item entity-ებს. თუ ჩართავ, მოითხოვე, რომ დუპერები უყურადღებოდ დატოვებისას გამოირთოს და claim-ების შიგნით იყოს.
allow-headless-pistons და allow-permanent-block-break-exploits bedrock-ისა და end-ის პორტალის ჩარჩოს მტვრევას ხელახლა რთავს. survival სერვერზე world border-ით და Nether-ის სახურავის წესით დატოვე გამორთული.
Paper ასევე ასუსტებს vanilla-ს ზოგიერთ მექანიკას, რომელზეც ტექნიკური ნაგებობებია დამოკიდებული - მაგალითად, ქვიშის დუბლირების ზოგიერთი მეთოდი სხვაგან კონტროლდება და ვერსიების მიხედვით განსხვავდება. სანამ ტექნიკურ საზოგადოებას დაჰპირდები, რომ კონკრეტული ფერმა იმუშავებს, გამოსცადე ის შენს ზუსტ Paper build-ზე. Paper-ის დოკუმენტაცია მიმდინარე ქცევას ჩამოთვლის; ის იცვლება.
ნახტომის მიღმა მდგომი მექანიზმის პოვნა#
როცა /mspt ხტება, ადგილი გინდა და არა თეორია.
/spark profiler start --only-ticks-over 100/spark profiler stop/paper chunkinfo/paper entity list--only-ticks-over 100 მხოლოდ იმ tick-ებს იწერს, რომლებსაც 100 ms-ზე მეტი დასჭირდა, რაც ნახტომებს ჩვეულებრივი ფონისგან გამოყოფს. რეპორტში world tick-ის ქვეშ მოძებნე block entity-ების tick-ი (hopper-ები აქ ჩანს), ბლოკებისა და მეზობლების განახლებები (მტვერი და observer-ები) და დგუშების მოძრაობა. spark-ის რეპორტის წაკითხვა ხედებს ნაბიჯ-ნაბიჯ გაივლის.
spark გეუბნება, რა სახის სამუშაოა, და არა სად. სად - რომ იპოვო:
- შეამოწმე, ვინ არის online ნახტომის დროს. ლაგი, რომელიც მოთამაშეს მისდევს, მისი ბაზა ან ფერმაა. სთხოვე spark-ს პროფაილი, სანამ ახლოს მხოლოდ ის მოთამაშეა.
- გამოიყენე
/paper chunkinfo, რომ ნახო, რამდენი chunk და block entity არის ჩატვირთული თითო სამყაროში, და შეადარე იმ მოთამაშით და მის გარეშე. - გადაუფრინე ზონას. საათები ისმის - დგუშებისა და observer-ების მუდმივი ხმები მათ აცემს.
- თუ ბლოკების ლოგირების plugin გაქვს, მოძებნე, ვინ დადგა ბოლო დროს observer-ები, დგუშები და hopper-ები იმ ზონაში. WorldEdit-ის
//countმონიშნულზე ნაგებობის hopper-ების ან observer-ების რაოდენობას გაძლევს.
ლიმიტები და წესები, რომლებიც ამას კონტროლის ქვეშ ინახავს#
ტექნიკურ სერვერსა და ჩვეულებრივ survival სერვერს სხვადასხვა წესები სჭირდება, მაგრამ ორივეს წერილობითი სჭირდება.
ჩვეულებრივი survival სერვერისთვის:
- საათებს უნდა ჰქონდეს გამორთვის საშუალება და უყურადღებოდ დატოვებისას გამორთული უნდა იყოს.
- დადგენილ ინტერვალზე სწრაფი observer-ის საათები არ შეიძლება სტაფის თანხმობის გარეშე.
- ნივთების სორტერები გონივრულ ზომამდეა შეზღუდული და წახალისებულია წყლის ნაკადებისა და ნაკლები hopper-ის გამოყენება.
- ლაგის მანქანები აკრძალულია; მისი აშენება grief-ია.
- სტაფს შეუძლია გამორთოს ნებისმიერი მექანიზმი, რომელიც ლაგს იწვევს, და მფლობელს შეატყობინებს.
ტექნიკური სერვერისთვის ლიმიტები ისეთ რიცხვებში დააწესე, რომლებზეც ხალხს შეუძლია დაპროექტება: hopper-ების ბიუჯეტი თითო ბაზაზე, წესი, რომ world eater-ები და TNT დუპერები მხოლოდ მფლობელის თანდასწრებით მუშაობს, და გამოქვეყნებული simulation-distance და redstone-ის იმპლემენტაცია. ტექნიკური მოთამაშეები ჩვეულებრივ გონივრულად ეკიდებიან ლიმიტებს, რომლებსაც ხედავენ; ისინი ეწინააღმდეგებიან ლიმიტებს, რომლებსაც ნაგებობის გაფუჭებით აღმოაჩენენ.
hopper-ებზე ან სხვა block entity-ებზე chunk-ის ლიმიტები plugin-ებით შესაძლებელია (Insights კარგად ცნობილია). ისინი სასარგებლოა საჯარო სერვერებზე, სადაც ყველა მშენებელს ვერ ელაპარაკები, და გამაღიზიანებელია პატარებზე, სადაც შეგიძლია. სადაც შესაძლებელია, საუბარი ამჯობინე.
თუ სერვერზე ერთი ტექნიკური ბაზა დომინირებს, სტრუქტურული პასუხი არსებობს: ტექნიკური თამაში საკუთარ სერვერზე გადაიტანე, ან საკუთარ სამყაროში საკუთარი პარამეტრებით. სამყაროს მიხედვით გადაფარვა - <world>/paper-world.yml და world-settings.<name> spigot.yml-ში - creative ან სატესტო სამყაროს survival სამყაროზე უფრო თავისუფალი წესებით მუშაობის საშუალებას აძლევს. სრული მრავალსერვერიანი კონფიგურაცია აღწერილია Velocity proxy-ის ქსელში.
RE:NODE-ზე პანელის კონსოლი /spark-სა და /mspt-ს ისტორიითა და tab-ით შევსებით იღებს, ასე რომ შეგიძლია პროფაილი გაუშვა და შედეგი გვერდიდან გაუსვლელად წაიკითხო, CPU-ს გრაფიკი კი ნახტომს შენი გეგმის ლიმიტის მიმართ აჩვენებს. CPU მკაცრად იზღუდება შენ მიერ ნაყიდ წილამდე: სერვერი 100%-ზე ნელია და არა გაფუჭებული, და ამის გამო არასოდეს შეჩერდება. თუ ერთ მექანიზმს შეუძლია მისი მიჭედვა, პასუხი ჯერ ზემოთ მოცემული პარამეტრები და წესებია და მერე უფრო დიდი გეგმა.
FAQ#
უსაფრთხოა თუ არა Alternate Current-ის ჩართვა არსებულ სამყაროზე?
კი. ის ცვლის, როგორ ითვლება მტვრის განახლებები, და არა იმას, რაც სამყაროში ინახება, ამიტომ შეგიძლია ჩართო და გამორთო. ნაგებობები, რომლებიც vanilla-ს განახლებების ზუსტ თანმიმდევრობაზეა დამოკიდებული, შეიძლება სხვანაირად მოიქცეს; გამოსცადე და, თუ რამე გაფუჭდა, უკან დააბრუნე.
რატომ ლაგავს ჩემი სერვერი, როცა ერთი მოთამაშე შემოდის?
რადგან მისი ბაზა tick-ს იწყებს. ყველაფერი მის simulation distance-ში - საათები, hopper-ები, ფერმები, სოფლელები - მხოლოდ მაშინ მუშაობს, როცა ის ახლოსაა. გააკეთე პროფაილი spark-ით, სანამ ის online-ია და ახლოს მხოლოდ ისაა, და რეპორტი ჩვეულებრივ სამუშაოს სახეობას დაასახელებს.
ლაგავს თუ არა hopper-ები, როცა ცარიელია?
კი, ეს მთავარი მიზეზია, რის გამოც ისინი ძვირია. უსაქმო hopper მაინც ამოწმებს ნივთებს ამოსაღებად. spigot.yml-ში hopper-check-ის აწევა უსაქმო hopper-ებს უფრო იშვიათ შემოწმებას აიძულებს, რაც ამ ხარჯს მკვეთრად ამცირებს.
სრულად უნდა ავკრძალო redstone საათები?
არა. საათები ლეგიტიმურ ფერმებსა და კარებს ამუშავებს. აკრძალე საათები გამორთვის გარეშე და გამოქვეყნებულ ინტერვალზე სწრაფი საათები, და მოითხოვე გამორთვის საშუალება. ასე სასარგებლო ნაგებობები რჩება და ქრება ის, რაც სამუდამოდ და ტყუილად მუშაობს.
შემიძლია TNT-ის დუბლირების დაშვება Paper-ზე?
კი, paper-global.yml-ში unsupported-settings.allow-piston-duplication: true-ით. მოეპყარი ამას როგორც გეიმფლეისა და grief-ის, ისე წარმადობის გადაწყვეტილებას და დარწმუნდი, რომ შენი დაცვის plugin სხვა მოთამაშეების claim-ებში აფეთქებებს აჩერებს.




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