Feestblokjes nu anders opgeslagen

Bij elke feestdag op de server (Sinterklaas, Kerst, Pasen, Halloween en soms een extra) brengen wij een feestblokje uit. Vanaf nu hebben de blokjes een nieuw opslagformaat, waardoor de oude niet meer kunnen stacken met de nieuwe. De oude blijven wel gewoon werken. Dit is nodig omdat de code achter de blokjes inmiddels ernstig verouderd was.

Als je een geplaatst miniblokje hebt, dan wordt deze automatisch omgezet zodra je erop klikt met links of rechts. Als je een oud miniblokje als item hebt (dus niet geplaatst in de wereld), dan kun je hem omzetten door hem te plaatsen. De oude items kunnen niet stacken met de nieuwe. Ze zien er wel hetzelfde uit.

Technische informatie

Ooit werden die opgeslagen aan de hand van een spelernaam, bijvoorbeeld AllTheDiamond, wiens skin een diamanten blokje was. Later werd de skin ook in het blokje opgeslagen. De code die ik ooit daarvoor had geschreven was een beetje hacky. 2zqa en ik maakten eerst een blokje in singleplayer, en kopiëerde vervolgens de NBT-data van dat blok. In de NBT-data veranderde ik de gebruikersnaam naar iets in de trant van “Easter_2024”, maar liet de UUID van de speler staan. De NBT-data voegde ik vervolgens toe aan de plugin, zodat die de miniblokjes kon uitreiken. De code gebruikte nog steeds de gebruikersnaam om te herkennen om welk miniblokje het gaat: AllTheDiamond hoort bij de 1 aprilgrap van 2014, en Easter_2024 bij Pasen van dit jaar.

Ik kan nu al zien aankomen dat de code niet meer gaat werken als Mojang binnenkort het opslagformaat van items gaat aanpassen. Als de plugin dan nog gaat proberen om miniblokjes uit te reiken, werkt het niet meer. Dat zou direct tot problemen leiden: elke keer als je een eerder geplaatst miniblokje sloopt, zou je een Steve-hoofdje krijgen.

Op zich zou ik de code wel kunnen updaten, maar de miniblokjes identificeren aan de hand van een (al dan niet) bestaande gebruikersnaam is sowieso niet zo netjes. Ik heb de oude code herschreven met moderne Paper-APIs, zodat alle miniblokjes nu met een custom tag opgeslagen worden. (Dat kon vroeger nog niet.) Dus een blokje krijgt onzichtbaar iets als "onzeserverplugin:holiday_item": "APRIL_FOOLS_2014" mee. De oude blokjes blijven gewoon werken, maar als je er eentje hakt, dan krijg je er eentje in het nieuwe formaat.

Geef een reactie