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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Add the crash-report or latest.log (logs-folder) with sites like https://mclo.gs/ and paste the link to it here  
    • Cracked Launchers are not supported
    • Hi, I have a problem in minecraft java (only in forge 1.20.1), When I start the game after a moment the game crashed with code 1 this only in forge 1.20.1 , I tried to reinstall java, Upgrade java to 17, update the drivers to the latest version, downgrade the drivers to the pervious version, deleting .minecraft and reinstall it , but none of these ways working.   here is the log:   [Launcher] Launching Minecraft... I'm hiding! mods after C:\Users\Windows\AppData\Roaming\.minecraft\mods\tl_skin_cape_forge_1.20_1.20.1-1.32.jar [InnerMinecraftServersImpl]  search changers of the servers read servers from servers.dat [] [InnerMinecraftServersImpl]  prepare inner servers save servers to servers.dat [Launcher] Game skin type: TLAUNCHER [Launcher] Starting Minecraft Forge 1.20.1... [Launcher] Launching in: C:\Users\Windows\AppData\Roaming\.minecraft Starting garbage collector: 96 / 227 MB Garbage collector completed: 60 / 214 MB [Launcher] Processing post-launch actions. Assist launch: true =============================================================================================== [05:29:03] [main/INFO]: ModLauncher running: args [--username, *********, --version, Forge 1.20.1, --gameDir, C:\Users\Windows\AppData\Roaming\.minecraft, --assetsDir, C:\Users\Windows\AppData\Roaming\.minecraft\assets, --assetIndex, 5, --uuid, *************************************, --accessToken, вќ„вќ„вќ„вќ„вќ„вќ„вќ„вќ„, --clientId, null, --xuid, null, --userType, mojang, --versionType, modified, --width, 925, --height, 530, --launchTarget, forgeclient, --fml.forgeVersion, 47.3.22, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] [05:29:04] [main/INFO]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.12 by Oracle Corporation; OS Windows 10 arch amd64 version 10.0 [05:29:15] [main/INFO]: Loading ImmediateWindowProvider fmlearlywindow [05:29:24] [main/INFO]: Trying GL version 4.6 [05:29:60] [main/INFO]: Requested GL version 4.6 got version 4.6 [05:29:67] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/Windows/AppData/Roaming/.minecraft/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%23100!/ Service=ModLauncher Env=CLIENT FATAL ERROR in native method: Thread[pool-2-thread-1,5,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution.     at org.lwjgl.opengl.GL11C.nglGetString(org.lwjgl.opengl@3.3.1+7/Native Method)     at org.lwjgl.opengl.GL11C.glGetString(org.lwjgl.opengl@3.3.1+7/GL11C.java:978)     at net.minecraftforge.fml.earlydisplay.DisplayWindow.initRender(fmlearlydisplay@1.20.1-47.3.22/DisplayWindow.java:209)     at net.minecraftforge.fml.earlydisplay.DisplayWindow.lambda$start$5(fmlearlydisplay@1.20.1-47.3.22/DisplayWindow.java:292)     at net.minecraftforge.fml.earlydisplay.DisplayWindow$$Lambda$437/0x000001fab120a618.run(fmlearlydisplay@1.20.1-47.3.22/Unknown Source)     at java.util.concurrent.Executors$RunnableAdapter.call(java.base@17.0.12/Executors.java:539)     at java.util.concurrent.FutureTask.run(java.base@17.0.12/FutureTask.java:264)     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(java.base@17.0.12/ScheduledThreadPoolExecutor.java:304)     at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.12/ThreadPoolExecutor.java:1136)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.12/ThreadPoolExecutor.java:635)     at java.lang.Thread.run(java.base@17.0.12/Thread.java:842) Here I am! [VersionManager] Refreshing versions locally... [VersionManager] Versions has been refreshed (6 ms) [Launcher] Launcher exited. [Launcher] Minecraft closed with exit code: 1 flush now [Launcher] [Crash] Signature "Bad video drivers" matches! [Crash] Signature "Bad video drivers" matches! [Launcher] [Crash] Crash has been recognized! [Crash] Crash has been recognized! flush now
  • Topics

×
×
  • Create New...

Important Information

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