Polymer

Polymer

763k Downloads

Error translating block mappings when using Polymer mods with Geyser

eclipseisoffline opened this issue ยท 3 comments

commented

Hello, I'm using a Polymer mod (Universal Shops) on a private server with Geyser. This mod uses player heads to represent custom blocks, which seem a bit buggy when on Bedrock, especially when trying to break them.

Notably, when starting to break a block in survival mode (on a Bedrock client), this error pops up in the server logs:

[12:26:27] [Geyser player thread-5-1/ERROR]: Could not translate packet PlayerActionPacket
java.lang.NullPointerException: Cannot invoke "org.geysermc.geyser.registry.type.BlockMapping.getJavaBlockId()" because "blockMapping" is null
	at org.geysermc.geyser.session.cache.TagCache.isShearsEffective(TagCache.java:195) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.util.BlockUtils.getBreakTime(BlockUtils.java:138) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.util.BlockUtils.getSessionBreakTime(BlockUtils.java:180) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.translator.protocol.bedrock.entity.player.BedrockActionTranslator.translate(BedrockActionTranslator.java:166) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.translator.protocol.bedrock.entity.player.BedrockActionTranslator.translate(BedrockActionTranslator.java:61) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.registry.PacketTranslatorRegistry.translate0(PacketTranslatorRegistry.java:89) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.registry.PacketTranslatorRegistry.lambda$translate$0(PacketTranslatorRegistry.java:69) ~[Geyser-Fabric.jar:?]
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.97.Final.jar:?]
	at io.netty.channel.DefaultEventLoop.run(DefaultEventLoop.java:54) ~[netty-transport-4.1.97.Final.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.97.Final.jar:?]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.97.Final.jar:?]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.97.Final.jar:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]

And another error pops up when finishing breaking a block:

[12:26:27] [Geyser player thread-5-1/ERROR]: Could not translate packet ClientboundBlockDestructionPacket
java.lang.NullPointerException: Cannot invoke "org.geysermc.geyser.registry.type.BlockMapping.getJavaBlockId()" because "blockMapping" is null
	at org.geysermc.geyser.session.cache.TagCache.isShearsEffective(TagCache.java:195) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.util.BlockUtils.getBreakTime(BlockUtils.java:138) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.translator.protocol.java.level.JavaBlockDestructionTranslator.translate(JavaBlockDestructionTranslator.java:45) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.translator.protocol.java.level.JavaBlockDestructionTranslator.translate(JavaBlockDestructionTranslator.java:39) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.registry.PacketTranslatorRegistry.translate0(PacketTranslatorRegistry.java:89) ~[Geyser-Fabric.jar:?]
	at org.geysermc.geyser.registry.PacketTranslatorRegistry.lambda$translate$0(PacketTranslatorRegistry.java:69) ~[Geyser-Fabric.jar:?]
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.97.Final.jar:?]
	at io.netty.channel.DefaultEventLoop.run(DefaultEventLoop.java:54) ~[netty-transport-4.1.97.Final.jar:?]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.97.Final.jar:?]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.97.Final.jar:?]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.97.Final.jar:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]

In the end, Bedrock players are unable to destroy these blocks in survival mode (it leads to a desync). Notably, Bedrock players in creative mode can destroy them fine with no errors popping up in the logs.
I have tried setting the Geyser use-direct-connection to false to fix the issue, but with no success.

How should I fix this issue? Should I set any config option or create custom block mappings? Or should I report the issue to Geyser?

commented

You should also report it to geyser yes. After all vanilla client is compatible

commented

Alright, will do

commented

This issue was fixed as Geyser merged #4557 into master. Block breaking now works on Bedrock, although the breaking speed can deviate sometimes. To give the custom head blocks a better appearance, add the profile textures to custom-skulls.yml.