HorseNuggets / TerminatorPlus

the epic plugin
Eclipse Public License 2.0
148 stars 53 forks source link

[Bug]: Unable Join while bot is online #61

Closed nicermak closed 1 year ago

nicermak commented 1 year ago

What happened?

i create a bot, and i rejoin server. i get kicked.

Plugin Version

4.2.0-BETA

Server Version

Paper 1.19.3

Relevant log output

java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because "trackedValues" is null
    at net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket.pack(ClientboundSetEntityDataPacket.java:17) ~[?:?]
    at net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket.write(ClientboundSetEntityDataPacket.java:38) ~[?:?]
    at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:41) ~[paper-1.19.3.jar:git-Paper-431]
    at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:14) ~[paper-1.19.3.jar:git-Paper-431]
    at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[netty-codec-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:881) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:863) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:968) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:856) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:120) ~[netty-codec-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:881) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:940) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:966) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:934) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1020) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:311) ~[netty-transport-4.1.87.Final.jar:4.1.87.Final]
    at com.comphenix.protocol.injector.netty.channel.NettyChannelProxy.writeAndFlush(NettyChannelProxy.java:227) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.netty.channel.NettyChannelProxy.writeAndFlush(NettyChannelProxy.java:233) ~[ProtocolLib.jar:?]
    at net.minecraft.network.Connection.doSendPacket(Connection.java:459) ~[?:?]
    at net.minecraft.network.Connection.lambda$sendPacket$11(Connection.java:433) ~[?:?]
    at com.comphenix.protocol.injector.netty.channel.NettyEventLoopProxy.lambda$proxyRunnable$2(NettyEventLoopProxy.java:48) ~[ProtocolLib.jar:?]
    at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:403) ~[netty-transport-classes-epoll-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.87.Final.jar:4.1.87.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.87.Final.jar:4.1.87.Final]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]

Additional Context

No response

Checklist

wendellmeset commented 1 year ago

Delete bots from console 😆

LoliColleen commented 1 year ago

i find a way to fix it

// modify getRenderPackest method in TerminatorPlus-master\TerminatorPlus-Plugin\src\main\java\net\nuggetmc\tplus\bot\Bot.java

private Packet<?>[] getRenderPackets() { Int2ObjectMap<SynchedEntityData.DataItem<?>> itemsById = (Int2ObjectMap<SynchedEntityData.DataItem<?>>) TerminatorPlusAPI.getValue(this.getEntityData(), "e"); // itemsById List<SynchedEntityData.DataValue<?>> entityData = new ArrayList<>(); for (SynchedEntityData.DataItem<?> dataItem : itemsById.values()) { entityData.add(dataItem.value()); } return new Packet[]{ new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, this), new ClientboundAddPlayerPacket(this), //new ClientboundSetEntityDataPacket(this.getId(), this.entityData, true), new ClientboundSetEntityDataPacket(this.getId(), entityData), new ClientboundRotateHeadPacket(this, (byte) ((this.yHeadRot * 256f) / 360f)) }; }

// add this getValue method to TerminatorPlus-master\TerminatorPlus-API\src\main\java\net\nuggetmc\tplus\api\TerminatorPlusAPI.java

public static Object getValue(Object instance, String name) { Object result = null;

    try {
        Field field = instance.getClass().getDeclaredField(name);

        field.setAccessible(true);
        result = field.get(instance);
        field.setAccessible(false);

    } catch (Exception e) {
        e.printStackTrace();
    }

    return result;
}
Badbird5907 commented 1 year ago

i find a way to fix it

// modify getRenderPackest method in TerminatorPlus-master\TerminatorPlus-Plugin\src\main\java\net\nuggetmc\tplus\bot\Bot.java

private Packet[] getRenderPackets() { Int2ObjectMap> itemsById = (Int2ObjectMap) TerminatorPlusAPI.getValue(this.getEntityData(), "e"); // itemsById List> entityData = new ArrayList<>(); for (SynchedEntityData.DataItem<?> dataItem : itemsById.values()) { entityData.add(dataItem.value()); } return new Packet[]{ new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, this), new ClientboundAddPlayerPacket(this), //new ClientboundSetEntityDataPacket(this.getId(), this.entityData, true), new ClientboundSetEntityDataPacket(this.getId(), entityData), new ClientboundRotateHeadPacket(this, (byte) ((this.yHeadRot * 256f) / 360f)) }; }

// add this getValue method to TerminatorPlus-master\TerminatorPlus-API\src\main\java\net\nuggetmc\tplus\api\TerminatorPlusAPI.java

public static Object getValue(Object instance, String name) { Object result = null;

    try {
        Field field = instance.getClass().getDeclaredField(name);

        field.setAccessible(true);
        result = field.get(instance);
        field.setAccessible(false);

    } catch (Exception e) {
        e.printStackTrace();
    }

    return result;
}

Thanks, fixed in e0744cb7360c4874e42c6b1f375487da3b40c5c6