Ich versuche, einen Minecraft-Mod namens SimpleRadio zu debuggen, der abstürzt, nachdem er eine Weile auf einem Server ausgeführt wurde, auf dem viele Leute gleichzeitig aktiv waren. Die folgenden Codeausschnitte stammen von RadioManager.java, RadioManager.java bzw. Wire.java in der neuesten Version (Version 3.4.6 für Minecraft Version 1.20.1) des Mods: https://github.com/CodinGlitch/SimpleRadio/tree/1.20.1
In allen Fällen kam es zu Abstürzen im Stil von NullPointer-Ausnahmen, die sich darüber beschwerten, dass eine Variable vorhanden war habe gerade überprüft, dass es nicht gleich null ist ist jetzt irgendwie null.
Ich bin mir ziemlich sicher, dass mit dem Mod irgendein Multithreading-Unsinn vor sich geht; Einer der Abstürze löste eine ConcurrentModificationException für entweder „sourceQueue“ oder „pendingSources“ aus (die Zeilenanzahlen stimmen nicht, daher bin ich nicht sicher, welche genau, allein aufgrund des Stack-Trace).
Was ich damit sagen will ist, dass ich mir ziemlich sicher bin, dass Multithreading ohne synchronisierte Listen die Hauptursache für die Fehler ist, die ich hier sehe, aber die Art des Fehlers, den ich daraus sehe, ist so Verrückt, dass ich mehr als sicher sein möchte, bevor ich irgendein Problem auf einem Server versuche, der versucht, 15+ Leute zu beherbergen, die das Spiel wirklich nur ohne Funkabstürze spielen wollen.
(Beachten Sie, dass ich Multithreading nicht im Sinne einer Art Multithreading des Minecraft-Server-Tickings meine, sondern dass der Netzwerk-Thread, der Pakete akzeptiert (?), und der Hauptserver-Thread miteinander in Konflikt geraten.)
Mein Punkt bei all dem ist nur: was?! Wie kann dieser Fehler auftreten, wenn bereits so offensichtlich sichergestellt ist, dass die Bedingung dafür gar nicht erst eintreten kann? Das erscheint mir so unmöglich, selbst WENN Multithreading-Unsinn auftritt. Hilfe!
(Unten folgt der Code mit ALLEN Fehler-Stack-Traces. Ich werde hier nichts weglassen!)
(Beispiel 1, in RadioManager.java)
java.lang.NullPointerException: Cannot read field "location" because "router" is null
at com.codinglitch.simpleradio.core.registry.blocks.InsulatorBlock.travelExtension(InsulatorBlock.java:74) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.api.central.Frequencing.getAntennaBase(Frequencing.java:63) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.api.central.Frequencing.calculateAntennaPower(Frequencing.java:46) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.core.registry.blocks.TransmitterBlockEntity.tick(TransmitterBlockEntity.java:102) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at net.minecraft.world.level.chunk.LevelChunk$BoundTickingBlockEntity.mixinextras$bridge$m_155252_$7(LevelChunk.java) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixin.tt20.json:world.LevelChunkMixin,pl:mixin:A}
at net.minecraft.world.level.chunk.LevelChunk$BoundTickingBlockEntity.wrapOperation$zhe000$onTick(LevelChunk.java:796) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixin.tt20.json:world.LevelChunkMixin,pl:mixin:A}
at net.minecraft.world.level.chunk.LevelChunk$BoundTickingBlockEntity.m_142224_(LevelChunk.java:689) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixin.tt20.json:world.LevelChunkMixin,pl:mixin:A}
at net.minecraft.world.level.chunk.LevelChunk$RebindableTickingBlockEntityWrapper.m_142224_(LevelChunk.java:782) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:classloading}
at net.minecraft.world.level.Level.redirect$zgd000$observable$redirectTick(Level.java:2040) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:botania_xplat.mixins.json:LevelAccessor,pl:mixin:APP:refurbished_furniture.common.mixins.json:LevelMixin,pl:mixin:APP:observable.common.json:LevelMixin,pl:mixin:APP:kubejs-common.mixins.json:LevelMixin,pl:mixin:APP:simpleradio.mixins.json:MixinLevel,pl:mixin:A}
at net.minecraft.world.level.Level.m_46463_(Level.java:468) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:botania_xplat.mixins.json:LevelAccessor,pl:mixin:APP:refurbished_furniture.common.mixins.json:LevelMixin,pl:mixin:APP:observable.common.json:LevelMixin,pl:mixin:APP:kubejs-common.mixins.json:LevelMixin,pl:mixin:APP:simpleradio.mixins.json:MixinLevel,pl:mixin:A}
at net.minecraft.server.level.ServerLevel.m_8793_(ServerLevel.java:351) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:botania_xplat.mixins.json:ServerLevelMixin,pl:mixin:APP:refurbished_furniture.common.mixins.json:ServerLevelMixin,pl:mixin:APP:observable.common.json:ServerLevelMixin,pl:mixin:APP:mixin.tt20.json:world.ServerLevelMixin,pl:mixin:APP:blueprint.mixins.json:ServerLevelMixin,pl:mixin:APP:moonlight-common.mixins.json:ServerLevelMixin,pl:mixin:APP:immersiveengineering.mixins.json:coremods.ServerWorldMixin,pl:mixin:APP:ksyxis.mixins.json:ServerLevelMixin,pl:mixin:APP:supplementaries-common.mixins.json:ServerLevelMixin,pl:mixin:APP:kubejs-common.mixins.json:ServerLevelMixin,pl:mixin:APP:simpleradio.mixins.json:MixinServerLevel,pl:mixin:APP:create.mixins.json:accessor.ServerLevelAccessor,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:893) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:283) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:blueprint.mixins.json:DedicatedServerMixin,pl:mixin:APP:mixins/common/nochatreports.mixins.json:server.MixinDedicatedServer,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:814) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at java.lang.Thread.run(Thread.java:833) ~[?:?] {re:mixin}
java.lang.NullPointerException: Cannot read field "source" because "queued" is null
at com.codinglitch.simpleradio.core.registry.entities.Wire.lambda$relay$0(Wire.java:158) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.radio.RadioManager.readQueue(RadioManager.java:425) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:mixin,re:classloading}
at com.codinglitch.simpleradio.core.registry.entities.Wire.relay(Wire.java:157) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.api.central.Socket.distribute(Socket.java:47) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.radio.RadioRouter.route(RadioRouter.java:231) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.radio.RadioRouter.route(RadioRouter.java:258) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.radio.RadioRouter.accept(RadioRouter.java:203) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading}
at com.codinglitch.simpleradio.radio.RadioManager.serverTick(RadioManager.java:400) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:mixin,re:classloading}
at net.minecraft.server.MinecraftServer.handler$bkb000$simpleradio$tickServer_radioTicking(MinecraftServer.java:5340) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:836) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
at java.lang.Thread.run(Thread.java:833) ~[?:?] {re:mixin}
Ich versuche, einen Minecraft-Mod namens SimpleRadio zu debuggen, der abstürzt, nachdem er eine Weile auf einem Server ausgeführt wurde, auf dem viele Leute gleichzeitig aktiv waren. Die folgenden Codeausschnitte stammen von RadioManager.java, RadioManager.java bzw. Wire.java in der neuesten Version (Version 3.4.6 für Minecraft Version 1.20.1) des Mods: https://github.com/CodinGlitch/SimpleRadio/tree/1.20.1 In allen Fällen kam es zu Abstürzen im Stil von NullPointer-Ausnahmen, die sich darüber beschwerten, dass [b]eine Variable vorhanden war habe gerade überprüft, dass es nicht gleich null ist ist jetzt irgendwie null.[/b] Ich bin mir ziemlich sicher, dass mit dem Mod irgendein Multithreading-Unsinn vor sich geht; Einer der Abstürze löste eine ConcurrentModificationException für entweder „sourceQueue“ oder „pendingSources“ aus (die Zeilenanzahlen stimmen nicht, daher bin ich nicht sicher, welche genau, allein aufgrund des Stack-Trace). Was ich damit sagen will ist, dass [b]ich mir ziemlich sicher bin, dass Multithreading ohne synchronisierte Listen die Hauptursache für die Fehler ist, die ich hier sehe,[/b] aber die Art des Fehlers, den ich daraus sehe, ist so Verrückt, dass ich mehr als sicher sein möchte, bevor ich irgendein [url=viewtopic.php?t=26065]Problem[/url] auf einem Server versuche, der versucht, 15+ Leute zu beherbergen, die das Spiel wirklich nur ohne Funkabstürze spielen wollen. (Beachten Sie, dass ich Multithreading nicht im Sinne einer Art Multithreading des Minecraft-Server-Tickings meine, sondern dass der Netzwerk-Thread, der Pakete akzeptiert (?), und der Hauptserver-Thread miteinander in Konflikt geraten.) Mein Punkt bei all dem ist nur: was?! Wie kann dieser Fehler auftreten, wenn bereits so offensichtlich sichergestellt ist, dass die Bedingung dafür gar nicht erst eintreten kann? Das erscheint mir so unmöglich, selbst WENN Multithreading-Unsinn auftritt. Hilfe! (Unten folgt der Code mit ALLEN Fehler-Stack-Traces. Ich werde hier nichts weglassen!) (Beispiel 1, in RadioManager.java) [code] @Override public BlockPos travelExtension(BlockPos pos, LevelAccessor level) { for (Direction direction : Direction.values()) { BlockPos offsetPos = pos.relative(direction); BlockEntity blockEntity = level.getBlockEntity(offsetPos);
if (blockEntity instanceof InsulatorBlockEntity insulatorBlockEntity) { List wires = insulatorBlockEntity.getWires(); if (wires.isEmpty()) continue;
BlockState blockState = level.getBlockState(routerPos); if (!(blockState.getBlock() instanceof InsulatorBlock)) continue;
Direction routerDirection = blockState.getValue(InsulatorBlock.FACING); return routerPos.relative(routerDirection.getOpposite()); } }
return pos; } [/code] [code]java.lang.NullPointerException: Cannot read field "location" because "router" is null at com.codinglitch.simpleradio.core.registry.blocks.InsulatorBlock.travelExtension(InsulatorBlock.java:74) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.api.central.Frequencing.getAntennaBase(Frequencing.java:63) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.api.central.Frequencing.calculateAntennaPower(Frequencing.java:46) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.core.registry.blocks.TransmitterBlockEntity.tick(TransmitterBlockEntity.java:102) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at net.minecraft.world.level.chunk.LevelChunk$BoundTickingBlockEntity.mixinextras$bridge$m_155252_$7(LevelChunk.java) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixin.tt20.json:world.LevelChunkMixin,pl:mixin:A} at net.minecraft.world.level.chunk.LevelChunk$BoundTickingBlockEntity.wrapOperation$zhe000$onTick(LevelChunk.java:796) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixin.tt20.json:world.LevelChunkMixin,pl:mixin:A} at net.minecraft.world.level.chunk.LevelChunk$BoundTickingBlockEntity.m_142224_(LevelChunk.java:689) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixin.tt20.json:world.LevelChunkMixin,pl:mixin:A} at net.minecraft.world.level.chunk.LevelChunk$RebindableTickingBlockEntityWrapper.m_142224_(LevelChunk.java:782) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:classloading} at net.minecraft.world.level.Level.redirect$zgd000$observable$redirectTick(Level.java:2040) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:botania_xplat.mixins.json:LevelAccessor,pl:mixin:APP:refurbished_furniture.common.mixins.json:LevelMixin,pl:mixin:APP:observable.common.json:LevelMixin,pl:mixin:APP:kubejs-common.mixins.json:LevelMixin,pl:mixin:APP:simpleradio.mixins.json:MixinLevel,pl:mixin:A} at net.minecraft.world.level.Level.m_46463_(Level.java:468) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:botania_xplat.mixins.json:LevelAccessor,pl:mixin:APP:refurbished_furniture.common.mixins.json:LevelMixin,pl:mixin:APP:observable.common.json:LevelMixin,pl:mixin:APP:kubejs-common.mixins.json:LevelMixin,pl:mixin:APP:simpleradio.mixins.json:MixinLevel,pl:mixin:A} at net.minecraft.server.level.ServerLevel.m_8793_(ServerLevel.java:351) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:botania_xplat.mixins.json:ServerLevelMixin,pl:mixin:APP:refurbished_furniture.common.mixins.json:ServerLevelMixin,pl:mixin:APP:observable.common.json:ServerLevelMixin,pl:mixin:APP:mixin.tt20.json:world.ServerLevelMixin,pl:mixin:APP:blueprint.mixins.json:ServerLevelMixin,pl:mixin:APP:moonlight-common.mixins.json:ServerLevelMixin,pl:mixin:APP:immersiveengineering.mixins.json:coremods.ServerWorldMixin,pl:mixin:APP:ksyxis.mixins.json:ServerLevelMixin,pl:mixin:APP:supplementaries-common.mixins.json:ServerLevelMixin,pl:mixin:APP:kubejs-common.mixins.json:ServerLevelMixin,pl:mixin:APP:simpleradio.mixins.json:MixinServerLevel,pl:mixin:APP:create.mixins.json:accessor.ServerLevelAccessor,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:893) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:283) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:blueprint.mixins.json:DedicatedServerMixin,pl:mixin:APP:mixins/common/nochatreports.mixins.json:server.MixinDedicatedServer,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:814) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at java.lang.Thread.run(Thread.java:833) ~[?:?] {re:mixin} [/code] (Beispiel 2, in RadioManager.java) [code] List acceptedSources = new ArrayList(); Iterator iterator = sourceQueue.iterator(); while (iterator.hasNext()) { QueuedSource source = iterator.next(); if (source == null) { iterator.remove(); continue; }
source.time--; if (source.time { if (queued.source.getWireMedium().equals(this) && queued.router.equals(origin)) { int maxProgress = Math.round(SimpleRadioLibrary.SERVER_CONFIG.wire.transmissionTime * this.getLength()); float progress = (float) queued.time / maxProgress;
timeUntilDemise.set((int) Math.ceil((float)queued.time / 2f)); if (isReversed) { placeOfDemise.set(1 - progress); } else { placeOfDemise.set(progress); } return true; } return false; })) { this.queueDemise(timeUntilDemise.get(), placeOfDemise.get()); } } [/code] (Entsprechende Prüfung für Beispiel 3, in RadioManager.java) [code]public boolean readQueue(Predicate filter) { for (QueuedSource source : sourceQueue) { if (source == null) continue; if (filter.test(source)) return true; } for (QueuedSource source : pendingSources) { if (source == null) continue; if (filter.test(source)) return true; }
return false; } [/code] [code]java.lang.NullPointerException: Cannot read field "source" because "queued" is null at com.codinglitch.simpleradio.core.registry.entities.Wire.lambda$relay$0(Wire.java:158) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.radio.RadioManager.readQueue(RadioManager.java:425) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:mixin,re:classloading} at com.codinglitch.simpleradio.core.registry.entities.Wire.relay(Wire.java:157) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.api.central.Socket.distribute(Socket.java:47) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.radio.RadioRouter.route(RadioRouter.java:231) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.radio.RadioRouter.route(RadioRouter.java:258) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.radio.RadioRouter.accept(RadioRouter.java:203) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:classloading} at com.codinglitch.simpleradio.radio.RadioManager.serverTick(RadioManager.java:400) ~[simpleradio-forge-1.20.1-3.4.6.jar%23401!/:3.4.6] {re:mixin,re:classloading} at net.minecraft.server.MinecraftServer.handler$bkb000$simpleradio$tickServer_radioTicking(MinecraftServer.java:5340) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:836) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23431!/:?] {re:mixin,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at java.lang.Thread.run(Thread.java:833) ~[?:?] {re:mixin} [/code]
Ich versuche, einen Block zu erstellen, der mich in eine neue Dimension sendet, aber wenn ich versuche, mit der rechten Maustaste darauf zu klicken, passiert nichts. Im Moment verwende ich:
public...
Zum ersten Mal mache ich einen Mod für Minecraft 1.21.1. Ich verwende Forge 52.1.1. Ich fügte eine Spitzhacke, einen Bartzahl und ein Stück Erz hinzu. Alles funktioniert, die Objekte sind sichtbar...
Zum ersten Mal mache ich einen Mod für Minecraft 1.21.1. Ich verwende Forge 52.1.1. Ich fügte eine Spitzhacke, einen Bartzahl und ein Stück Erz hinzu. Alles funktioniert, die Objekte sind sichtbar...
Angenommen, ich möchte mich mit einem gewissen Wert erholen, wenn ich eine bestimmte Ausnahme erhalte. Andernfalls geben Sie die fehlgeschlagene Zukunft mit der Ausnahme zurück. Ich würde so etwas...
Hier ist also zunächst mein Code:
%matplotlib ipympl
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button