Jump to content

Recommended Posts

Posted

Hey, I am currently trying to implement a basic Teleporter into my mod. Everything works great on single player, however I noticed that on my server running  my mod players using the Teleporter item could not teleport. After further looking into things I found that the reason it did not work was because the Teleporter item information did not update on the server.

 

How it works:

Basically, there is a personal Teleporter item that when right clicked on a block stores the coords of that block in an NBT tag. When the player shift+clicks(uses item) they get teleported to the position stored in the NBT tag.

 

I was following the tutorial by Mr. Crayfish on his 1.8 modding series on youtube, unfortunately he stopped posting videos on the series so I had to improvise how the Teleporter worked. Keep in mind, again, it works completely fine on single player, just not for people connected to a server.

 

Now, as I said, everything works great on single player, but not on my server. It would appear as though the NBT tag is not being updated to the server. I implemented a packet sender in an attempt to update the info to the server:

https://gist.github.com/CatDany/4a3df7fcb3c8270cf70b

 

I am stuck on trying to get the packet through. In single player, on the host server it would appear that when sending a packet it goes through, but repeats endlessly. (I have a print statement for debugging when the server receives a packet). When connected through lan, when attempting to send the packet to the server it still never goes through.

 

Here is the simplified code in my project:

http://pastebin.com/aftBriwL

Also, at the bottom of the pastebin I added the code that I modified from the "Packets are Easy" post.

 

I am using Forge 1.8-11.14.3.1450

 

Any help including, but not limited to sending packets would be appreciated. I am not entirely sure in the end how to update the NBT tag on the server side to have the info the local player just stored on it either... I am sure I could figure that out eventually though.

 

I apologize in advance, I am new here so if this post crosses any posting guidelines that I am unaware of just message me and I will change the post as directed or remove it.

 

Thank you very much - Ne0n

 

 

.|\| E0 |\|.      /\ Fr0

Posted

Are you storing NBT in an itemstack? Itemstack NBT is updated by vanilla Minecraft (synced) with the server and the client automatically. You could try using IEEP (IExtendedEntityProperties) to save teleporting coords to the player when right clicking with your item and then syncing your data on the EntityJoinWorldEvent. Look it up on google if you choose to do it that way. As for the itemstack NBT I do not see why that wouldn't sync.

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Posted

Yes, the NBT tag is stored in an itemstack. I would have thought that it would update itself, but it appears to not be doing anything. It would seem that the server is deleting the user changed itemstack data rather than the client side updating the servers version. I am not quite sure what is wrong here? I will post the full class for my teleporter here:

http://pastebin.com/TjcvBNMV

 

P.S.

I have commented out any packet sending stuff for the time being.

 

P.P.S.

I am sorry, I hate to post the sort of "where's Waldo", what is wrong with my code. I am new to Minecraft modding so I really appreciate your help. Thanks for your time!

.|\| E0 |\|.      /\ Fr0

Posted

You already checked if the player is sneaking, so why also check the Keyboard input? Keyboard and all other input is CLIENT-side only, so not only should it NOT work on the server, it should generally crash it.

 

Code like this:

if (!world.isRemote) { // on the server
   if (Keyboard or Mouse or any other client-side code) {
      // will epically fail
   }
}

Just get rid of the Keyboard check and you should be fine without needing any packets at all. ItemStack NBT is generally sent automatically to the client, but you wouldn't need it there anyway unless you wanted to display the coordinates in the tooltip or something.

Posted

Oh my goodness! Thank you. It works now, I had't realized that "is control pressed" was client side only. Thanks! Is there any way to check if control is pressed serverside? Because that sounds like I need to use packets for that xD

 

Otherwise my problem is solved! Thanks for the help.

.|\| E0 |\|.      /\ Fr0

Posted

Unless it is something that Minecraft handles for you, like sneaking, then no, there is no way to check if a key is pressed on the server side without sending packets.

 

You're going to have to learn how to use packets someday anyway, most likely, so may as well start now. It's really not that hard once you wrap your head around it.

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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.