Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Reliable check if on Server


Raycoms
 Share

Recommended Posts

This might be a stupid question, but where is the "scan" happening? Is there a way to determine a priori whether one is a source or recipient? Could mod versions contain the scans?

 

What I am suggesting is that there are many ways to skin such a cat, including custom resources located on external servers and fetched/updated at client load time. If you search these forums you should find similar file-distribution discussions within the past year.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

  • Replies 62
  • Created
  • Last Reply

Top Posters In This Topic

@jeffryfisher I didn't really understand what you're trying to ask. The scan happens when the player right clicks with a tool a block.

It will then be stored on his local pc. But to be stored we require server side elements like the serverWorld etc.

 

@diesieben07:

 

I did it like this now:

 

@Override
    public void fromBytes(@NotNull final ByteBuf buf)
    {
        PacketBuffer pb = new PacketBuffer(buf);
        ByteBufInputStream stream = new ByteBufInputStream(pb);

        try
        {
            nbttagcompound = CompressedStreamTools.read(stream, new NBTSizeTracker(200097152L));
        }
        catch (RuntimeException e)
        {
            Log.getLogger().info("Structure too big to be processed", e);
        }
        catch (IOException e)
        {
            Log.getLogger().info("Problem at retrieving structure on server.", e);
        }
        finally
        {
            try
            {
                stream.close();
            }
            catch (IOException e)
            {
                Log.getLogger().info("Problem at retrieving structure on server.", e);
            }
        }

        storeLocation = ByteBufUtils.readUTF8String(buf);
    }

 

and when it get's quite big this now happens:

 

Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
Jan 01, 2017 4:24:44 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@437402(success)
[16:24:44] [Netty Local Client IO #0/INFO] [Minecolonies:blockout]: Structure too big to be processed
java.lang.NullPointerException
at net.minecraft.nbt.NBTTagCompound.readNBT(NBTTagCompound.java:578) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.NBTTagCompound.read(NBTTagCompound.java:52) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.NBTTagList.read(NBTTagList.java:66) ~[NBTTagList.class:?]
at net.minecraft.nbt.NBTTagCompound.readNBT(NBTTagCompound.java:578) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.NBTTagCompound.read(NBTTagCompound.java:52) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.CompressedStreamTools.read(CompressedStreamTools.java:147) ~[CompressedStreamTools.class:?]
at net.minecraft.nbt.CompressedStreamTools.read(CompressedStreamTools.java:102) ~[CompressedStreamTools.class:?]
at com.minecolonies.coremod.network.messages.SaveScanMessage.fromBytes(SaveScanMessage.java:57) [saveScanMessage.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:36) [simpleIndexedCodec.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:26) [simpleIndexedCodec.class:?]
at net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:103) [FMLIndexedMessageToMessageCodec.class:?]
at net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:40) [FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) [MessageToMessageCodec$2.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) [MessageToMessageDecoder.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [MessageToMessageCodec.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:109) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:156) [NetworkManager.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:51) [NetworkManager.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [simpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleClientSideCustomPacket(NetworkDispatcher.java:413) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:278) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:73) [NetworkDispatcher.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [simpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:326) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:45) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:312) [LocalChannel$5.class:4.0.23.Final]
at io.netty.channel.local.LocalEventLoop.run(LocalEventLoop.java:33) [LocalEventLoop.class:4.0.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [singleThreadEventExecutor$2.class:4.0.23.Final]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112]

 

Using forge version:

 

forge_version=13.19.1.2189

 

 

 

Link to comment
Share on other sites

Why do you wrap the

ByteBuf

first in a

PacketBuffer

and then in a

ByteBufInputStream

?

ByteBufInputStream

will work just fine on just the

ByteBuf

.

Why are you closing the stream?

 

I don't know what you have on line 578 of

NBTTagCompound

. Put a breakpoint there and see what's null and why.

Link to comment
Share on other sites

There is:         

 

 nbtbase.read(input, depth, sizeTracker);

 

and nbtbase is empty.

 

He creates nbtbase previously with:

        NBTBase nbtbase = NBTBase.createNewByType(id);

 

with the id: 9

 

 

I also removed the PacketBuffer, didn't change anything.

And we're closing the stream because we like to clean it up.

Link to comment
Share on other sites

Exactly that line produces the nullpointer.
Well, it cannot, if NBTBase is not null. Did you step into the read method and see what it does? Because the NPE probably happens in there, not on that line.

 

I guessed because the nbtbase was empty.
Why would that produce a NPE? Please think about what an NPE is...

 

The IDE was upset about not closing =D
Just checked, closing the ByteBufInputStream doesn't actually do anything. But still, if you want to close it, at least use try-with-resources. Those try-finallys are so ugly :D
Link to comment
Share on other sites

Ouch still forgetting that try with exists =D.

 

    @Override
    public void fromBytes(@NotNull final ByteBuf buf)
    {
        try(ByteBufInputStream stream = new ByteBufInputStream(buf)
        {
            nbttagcompound = CompressedStreamTools.read(stream, new NBTSizeTracker(200097152L));
        }
        catch (RuntimeException e)
        {
            Log.getLogger().info("Structure too big to be processed", e);
        }
        catch (IOException e)
        {
            Log.getLogger().info("Problem at retrieving structure on server.", e);
        }
        //storeLocation = ByteBufUtils.readUTF8String(buf);
    }

    @Override
    public void toBytes(@NotNull final ByteBuf buf)
    {
        ByteBufUtils.writeTag(buf, nbttagcompound);
        //ByteBufUtils.writeUTF8String(buf, storeLocation);
    }

 

I noticed that the problem is that I'm writing a string afterward. Therefore he is trying to create a tag out of the string during the execution and that's what nulls nbttag.

 

But how can I prevent that from happening?

Before isn't an option either.

 

The only option is sending two separate messages?

 

Link to comment
Share on other sites

@Override
    public void fromBytes(@NotNull final ByteBuf buf)
    {
        PacketBuffer buffer = new PacketBuffer(buf);
        int i =  buffer.readerIndex();
        byte b0 = buffer.readByte();
        if(b0 != 0)
        {
            buffer.readerIndex(i);
            try (ByteBufInputStream stream = new ByteBufInputStream(buffer)
            {
                nbttagcompound = CompressedStreamTools.read(stream, new NBTSizeTracker(200097152L));
            }
            catch (RuntimeException e)
            {
                Log.getLogger().info("Structure too big to be processed", e);
            }
            catch (IOException e)
            {
                Log.getLogger().info("Problem at retrieving structure on server.", e);
            }
        }
        storeLocation = ByteBufUtils.readUTF8String(buf);
    }

    @Override
    public void toBytes(@NotNull final ByteBuf buf)
    {
        ByteBufUtils.writeTag(buf, nbttagcompound);
        ByteBufUtils.writeUTF8String(buf, storeLocation);
    }

 

 

Did I forget anything? Still not working...

Link to comment
Share on other sites

You said I should do it like in the PacketBuffer, therefore, I moved everything whats happening there also into my method.

(I'd eventually rename these variables).

 

aand don't I have to create a big limit to make sure my structures are stored correctly? =D

 

2mb is the standard size but that wasn't enough obviously.

Link to comment
Share on other sites

You said I should do it like in the PacketBuffer, therefore, I moved everything whats happening there also into my method.

(I'd eventually rename these variables).

 

aand don't I have to create a big limit to make sure my structures are stored correctly? =D

 

2mb is the standard size but that wasn't enough obviously.

I want to say this imposes the limit.

NBTSizeTracker(200097152L))

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

As previously:

 

Jan 01, 2017 9:09:17 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@1995b069(success)
Jan 01, 2017 9:09:17 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@1995b069(success)
Jan 01, 2017 9:09:17 PM io.netty.channel.ChannelOutboundBuffer safeSuccess
WARNING: Failed to mark a promise as success because it is done already: DefaultChannelPromise@1995b069(success)
[21:09:17] [Netty Local Client IO #2/INFO] [minecolonies]: Structure too big to be processed
java.lang.NullPointerException
at net.minecraft.nbt.NBTTagCompound.readNBT(NBTTagCompound.java:578) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.NBTTagCompound.read(NBTTagCompound.java:52) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.NBTTagList.read(NBTTagList.java:66) ~[NBTTagList.class:?]
at net.minecraft.nbt.NBTTagCompound.readNBT(NBTTagCompound.java:578) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.NBTTagCompound.read(NBTTagCompound.java:52) ~[NBTTagCompound.class:?]
at net.minecraft.nbt.CompressedStreamTools.read(CompressedStreamTools.java:147) ~[CompressedStreamTools.class:?]
at net.minecraft.nbt.CompressedStreamTools.read(CompressedStreamTools.java:102) ~[CompressedStreamTools.class:?]
at com.minecolonies.coremod.network.messages.SaveScanMessage.fromBytes(SaveScanMessage.java:59) [saveScanMessage.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:36) [simpleIndexedCodec.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:26) [simpleIndexedCodec.class:?]
at net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:103) [FMLIndexedMessageToMessageCodec.class:?]
at net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:40) [FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) [MessageToMessageCodec$2.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) [MessageToMessageDecoder.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [MessageToMessageCodec.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:109) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:156) [NetworkManager.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:51) [NetworkManager.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [simpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleClientSideCustomPacket(NetworkDispatcher.java:413) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:278) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:73) [NetworkDispatcher.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [simpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:326) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:45) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:312) [LocalChannel$5.class:4.0.23.Final]
at io.netty.channel.local.LocalEventLoop.run(LocalEventLoop.java:33) [LocalEventLoop.class:4.0.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [singleThreadEventExecutor$2.class:4.0.23.Final]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share




×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.