Я пытаюсь отладить мод Minecraft под названием SimpleRadio, который дает сбой после некоторого времени работы на сервере, на котором одновременно работает много людей. Следующие фрагменты кода взяты из RadioManager.java, RadioManager.java и Wire.java соответственно в последней версии (версия 3.4.6 для Minecraft версии 1.20.1) мода: https://github.com/CodinGlitch/SimpleRadio/tree/1.20.1
Во всех случаях мы сталкивались с сбоями в духе исключений NullPointer, жалующихся, что переменная, которая только что была проверена на ненулевое значение непосредственно перед этим, теперь почему-то имеет нулевое значение.
Я совершенно уверен, что с модом происходит какая-то многопоточная ерунда; один из сбоев вызвал исключение ConcurrentModificationException либо для sourceQueue, либо для pendingSources (счет строк отключен, поэтому я не уверен, какая именно из них, исходя только из трассировки стека).
Я пытаюсь сказать, что Я совершенно уверен, что многопоточность без синхронизированных списков является основной причиной ошибок, которые я здесь вижу, но природа ошибки, которую я вижу, такова сумасшедшие, я хочу быть более чем уверен, прежде чем пробовать какое-либо исправление на сервере, на котором пытаются разместить более 15 человек, которые на самом деле просто хотят играть в игру без сбоев, связанных с радио.
(Обратите внимание, что я не имею в виду многопоточность с точки зрения некоторой многопоточности сервера Minecraft, а то, что сетевой поток, который принимает пакеты (?), и основной поток сервера мешают друг другу.)
Я хочу сказать следующее: что?! Как может возникнуть эта ошибка, если она уже настолько явно удостоверилась, что условия для ее возникновения вообще не могут произойти? Мне это кажется невозможным, даже ЕСЛИ происходит ерунда с многопоточностью. Помогите!
(Ниже приведен код со ВСЕМИ трассировками стека ошибок. Здесь ничего не оставлю!)
(Пример 1, в RadioManager.java)
@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;
Wiring wire = wires.get(0);
Router router = wire.transport(insulatorBlockEntity.getRouter());
if (router == null) continue;
BlockPos routerPos = router.getLocation().blockPos();
BlockState blockState = level.getBlockState(routerPos);
if (!(blockState.getBlock() instanceof InsulatorBlock)) continue;
Direction routerDirection = blockState.getValue(InsulatorBlock.FACING);
return routerPos.relative(routerDirection.getOpposite());
}
}
return pos;
}
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}
(Пример 2, в RadioManager.java)
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());
}
}
(Соответствующая проверка, например 3, в RadioManager.java)
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;
}
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}
Подробнее здесь: https://stackoverflow.com/questions/798 ... tely-after
Java (Minecraft Forge): каким-то образом возникают исключения NullPointerException сразу после проверки того, что рассма ⇐ JAVA
Программисты JAVA общаются здесь
1767678652
Anonymous
Я пытаюсь отладить мод Minecraft под названием SimpleRadio, который дает сбой после некоторого времени работы на сервере, на котором одновременно работает много людей. Следующие фрагменты кода взяты из RadioManager.java, RadioManager.java и Wire.java соответственно в последней версии (версия 3.4.6 для Minecraft версии 1.20.1) мода: https://github.com/CodinGlitch/SimpleRadio/tree/1.20.1
Во всех случаях мы сталкивались с сбоями в духе исключений NullPointer, жалующихся, что [b]переменная, которая только что была проверена на ненулевое значение непосредственно перед этим, теперь почему-то имеет нулевое значение.[/b]
Я совершенно уверен, что с модом происходит какая-то многопоточная ерунда; один из сбоев вызвал исключение ConcurrentModificationException либо для sourceQueue, либо для pendingSources (счет строк отключен, поэтому я не уверен, какая именно из них, исходя только из трассировки стека).
Я пытаюсь сказать, что [b]Я совершенно уверен, что многопоточность без синхронизированных списков является основной причиной ошибок, которые я здесь вижу,[/b] но природа ошибки, которую я вижу, такова сумасшедшие, я хочу быть более чем уверен, прежде чем пробовать какое-либо исправление на сервере, на котором пытаются разместить более 15 человек, которые на самом деле просто хотят играть в игру без сбоев, связанных с радио.
(Обратите внимание, что я не имею в виду многопоточность с точки зрения некоторой многопоточности сервера Minecraft, а то, что сетевой поток, который принимает пакеты (?), и основной поток сервера мешают друг другу.)
Я хочу сказать следующее: что?! Как может возникнуть эта ошибка, если она уже настолько явно удостоверилась, что условия для ее возникновения вообще не могут произойти? Мне это кажется невозможным, даже ЕСЛИ происходит ерунда с многопоточностью. Помогите!
(Ниже приведен код со ВСЕМИ трассировками стека ошибок. Здесь ничего не оставлю!)
(Пример 1, в RadioManager.java)
@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;
Wiring wire = wires.get(0);
Router router = wire.transport(insulatorBlockEntity.getRouter());
if (router == null) continue;
BlockPos routerPos = router.getLocation().blockPos();
BlockState blockState = level.getBlockState(routerPos);
if (!(blockState.getBlock() instanceof InsulatorBlock)) continue;
Direction routerDirection = blockState.getValue(InsulatorBlock.FACING);
return routerPos.relative(routerDirection.getOpposite());
}
}
return pos;
}
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}
(Пример 2, в RadioManager.java)
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());
}
}
(Соответствующая проверка, например 3, в RadioManager.java)
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;
}
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}
Подробнее здесь: [url]https://stackoverflow.com/questions/79861349/java-minecraft-forge-somehow-getting-nullpointerexceptions-immediately-after[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия