Home
» 🎮 E-sport
»
Minecraft-opdrachtfouten in versie 1.21: Onverwachte uitvoeringsresultaten oplossen
Minecraft-opdrachtfouten in versie 1.21: Onverwachte uitvoeringsresultaten oplossen
Minecraft-opdrachtfouten in versie 1.21: Onverwachte uitvoeringsresultaten oplossen
Als een commando in Minecraft Java Edition 1.21 mislukt, niets lijkt te doen of zich anders gedraagt in de chat, een commandoblok of een datapack, debug het dan in een consistente volgorde: leg de exacte feedback vast, test het kortste commando, controleer de uitvoerder en de positie ervan, en controleer vervolgens selectors, scores en datapackbestanden. Deze workflow helpt bij het isoleren van veelvoorkomende Minecraft-commandofouten zonder meerdere dingen tegelijk te hoeven wijzigen.
Toepassingsgebied: De onderstaande voorbeelden zijn voor de Java-editie. De Bedrock-editie gebruikt ander commando- en add-on-gedrag. Minecraft 1.21.x-patchreleases en latere versies kunnen ook verschillen, dus controleer de exacte spelversie voordat je de syntax naar een andere wereld kopieert.
Leg de opdracht en de volledige feedback vast voordat je deze bewerkt; de eerste parserfout is vaak een nuttige aanwijzing.
Koppel het symptoom aan de waarschijnlijke oorzaak.
Wat je ziet
Controleer eerst
Onbekend of onvolledig commando
Spelling, volgorde van argumenten, haakjes, komma's en aanhalingstekens
Geen entiteit gevonden of geen zichtbare verandering
Selectiefilters, uitvoeringspositie, dimensie en geladen chunks
Een aandoening gaat nooit over.
Of het scoreborddoel en de bijbehorende score bestaan voor de geselecteerde houder.
Er kan geen functie worden gevonden.
Datapack ingeschakelde status, naamruimte, bestandspad, JSON-validiteit en herlaaduitvoer
Een langdurige functie stopt voortijdig.
Recursieve aanroepen, te veel uitvoeringscontexten en beperkingen voor het aantal opdrachten
Stap 1: Lees de exacte foutmelding en test één commando.
Kopieer de volledige opdracht en foutmelding voordat je iets wijzigt. Een rode syntaxfoutmelding betekent meestal dat Minecraft de opdracht niet kon verwerken. Een opdracht die wel verwerkt wordt, maar geen doelen rapporteert, heeft meestal een probleem met de selector of de context. Een succesvolle opdracht zonder duidelijke veranderingen in de wereld kan op een ander doel, positie of onder een andere voorwaarde zijn uitgevoerd dan de bedoeling was.
In de Java-editie kunt u chatfeedback weergeven met /gamerule sendCommandFeedback true. Als de uitvoer van een opdrachtblok verborgen is, kunt u deze inschakelen met /gamerule commandBlockOutput true. Deze regels tonen feedback; ze schakelen geen aparte, uitgebreide opdrachtlogger in. Test de opdracht indien mogelijk eerst in de chat en verplaats deze pas naar een blok of functie nadat deze werkt.
Voor een lange /executeketen kun je deze het beste stap voor stap opsplitsen: bevestig de asuitvoerder, voeg atalleen iets toe als de locatie ertoe doet, voeg de if'of'- unlessvoorwaarde toe en eindig met één runcommando. In de Java-syntaxis runintroduceert het het uit te voeren commando; het is geen commando op hetzelfde niveau dat herhaald kan worden om extra commando's toe te voegen.
Test een entiteitsselector eerst met één doelwit in de buurt voordat je meerdere filters of een groot bereik toevoegt.
Stap 2: Controleer wie het commando uitvoert en waar.
De uitvoeringscontext is een veelvoorkomende oorzaak van onverwachte resultaten bij Minecraft-commando's. /execute aswijzigt de uitvoerder van het commando. /execute atwijzigt de positie-, rotatie- en dimensiecontext. Deze subcommando's hebben verschillende functies.
Deze Java-opdracht controleert bijvoorbeeld of er een zombie binnen een straal van acht blokken van elke speler aanwezig is en voert de actie vervolgens uit sayals die speler:
/execute as @a at @s if entity @e[type=minecraft:zombie,distance=..8,limit=1] run say Zombie nearby
Als een soortgelijke selector vanuit de serverconsole wordt uitgevoerd, is de startpositie mogelijk niet de locatie van een speler. Een commandoblok gebruikt de positie van het blok zelf, en een functie erft de context van de aanroeper. Gebruik deze selector at @swanneer de huidige uitvoerder een entiteit is en de locatie van die entiteit het beoogde referentiepunt is. Controleer ook de dimensie en of het doel zich in geladen chunks bevindt; een entiteitselector kan een niet-beschikbaar doel niet vinden.
Relatieve coördinaten en controles op nabijgelegen entiteiten zijn afhankelijk van de actieve uitvoeringspositie en -afmeting.
Stap 3: Selectiecriteria verfijnen en de scorebordcondities controleren
Begin met één bekende entiteit en voeg vervolgens één voor één selectorargumenten toe. Een selector zoals @e[type=minecraft:zombie,limit=1,sort=nearest]is gemakkelijker te begrijpen dan een brede selector @e. Voeg een brede selector toe distancewanneer bereik belangrijk is en gebruik een specifieke selector limitwanneer slechts één of enkele overeenkomsten nodig zijn. Een brede selector is niet automatisch een fout, maar elke overeenkomende entiteit kan een nieuwe uitvoeringscontext creëren; grote of geneste selecties kunnen complexe functies kostbaar maken of de limieten van commando's overschrijden.
Voor een scorevoorwaarde creëer je de doelstelling eenmaal en geef je een testspeler een bekende waarde voordat je de voorwaarde toevoegt aan een grotere keten:
/scoreboard objectives add debug dummyHet doel wordt hiermee gecreëerd. Als het al bestaat, blijf het dan gebruiken in plaats van die melding te beschouwen als een reden om het opnieuw te creëren.
/scoreboard players set @s debug 1Geeft de speler die het commando uitvoert een testwaarde.
/execute if score @s debug matches 1 run say Score check passedbevestigt dat het doel, de houder en de vergelijking samenwerken.
Als de controle nog steeds mislukt, controleer dan de spelling en hoofdlettergebruik van het doel, de scorehouder en of het commando wordt uitgevoerd door de speler die je verwacht. Vanuit een commandoblok of console @skan het zijn dat er naar dezelfde speler wordt verwezen als in de chat.
Stap 4: Controleer de paden van het Java 1.21-datapakket en de herlaadstatus.
Java Edition 1.21 heeft de namen van verschillende datapack-directory's gewijzigd van meervoudsvormen naar enkelvoudsvormen. Zo hoort een functiebestand bijvoorbeeld thuis in data/<namespace>/function/<path>.mcfunction, en gebruiken functietags data/minecraft/tags/function/. Een datapack dat is gekopieerd van een oudere versie kan nog steeds functionsof bevatten tags/functions, waardoor een correct geschreven functie mogelijk niet lijkt te bestaan.
Bijvoorbeeld, data/example/function/start.mcfunctionwordt aangeroepen met /function example:start. Na het bewerken van het pakket, voert u uit /reloaden vervolgens /datapack list enabled. Controleer of het pakket wordt weergegeven, of de naamruimte overeenkomt met de functieaanroep en of elke map- en bestandsnaam overeenkomt met het pad. Valideer pack.mcmetaals JSON en gebruik het pakketformaat dat wordt ondersteund door de specifieke 1.21.x-release in plaats van een nummer uit een ouder pakket te kopiëren.
Zorg ervoor dat het functiepad en de opdracht die deze aanroept, overeenkomen, laad vervolgens opnieuw en controleer of het pakket is ingeschakeld.
Twee compatibiliteitscontroles die misleidende oplossingen voorkomen.
Oude NBT-voorbeelden werken mogelijk niet meer in versie 1.21.
Java-editie 1.20.5 verplaatste item-stack-gegevens van veel verouderde NBT-velden naar gestructureerde data-componenten, en 1.21 erft die syntaxis. Oude voorbeelden van /give, /item, loot-table of predicaten kunnen daarom anders worden geparseerd of een foutmelding geven wanneer ze ongewijzigd worden gekopieerd. Gebruik de component-syntaxis voor ondersteunde itemeigenschappen; gebruik custom_datavoor aangepaste itemgegevens in plaats van aan te nemen dat elke oude itemtag geldig blijft.
De uitvoering van een functie kan worden uitgebreid of stoppen bij bepaalde limieten.
Geneste selectors kunnen het aantal contexten vermenigvuldigen: het uitvoeren execute as @e at @evan bijvoorbeeld kan veel combinaties creëren. Recursieve functies of herhalende logica in commandoblokken kunnen ook de limieten voor commando-uitvoering overschrijden. Maak de selector zo specifiek mogelijk, splits grote logica op in kleinere functies en voeg een voorwaarde toe die uiteindelijk voorkomt dat het werk wordt herhaald. Ga er niet van uit dat een gedeeltelijk resultaat betekent dat het spel de rest van een syntactisch geldig commando heeft genegeerd.
Voordat je het commando terug in een wereld plaatst
Test destructieve commando's opnieuw in een gekopieerde of wegwerpomgeving.
Wijzig één variabele tegelijk en behoud het eerste foutbericht.
Gebruik een onschadelijk, zichtbaar commando om sayde uitvoerder en locatie te verifiëren voordat je blokken of entiteiten wijzigt.
Controleer het machtigingsniveau wanneer een commando als operator in de chat werkt, maar niet vanuit een serverfunctie of commandoblok.
Vergelijk de exacte game-editie en -versie met de bron van het commando dat je hebt gekopieerd.