Jump to content
  • Home
  • Files
  • Docs
  • Merch
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • What would be the best way to handle long-distance TileEntity information...
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 1
Flenix

What would be the best way to handle long-distance TileEntity information...

By Flenix, October 24, 2013 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

Flenix    21

Flenix

Flenix    21

  • Diamond Finder
  • Flenix
  • Members
  • 21
  • 440 posts
Posted October 24, 2013

Sorry for the confusing title, I wasn't exactly sure how to word it.

 

Basically, I want to make a TileEntity. Actually, it's two tileentities, effectively for "teleporation pads". So, all I need to do is for the sender pad to know where all the receiver pads in the world are located, then send the player there.

 

What I'm unsure about, is how can I make the receiver "tell" the sender where it's located, and when should I do that? I figured I could maybe save it's coordinates in a special NBT tag in the world, but when people use a lot of them that might get messy so what better ideas are there?

 

 

To be clear, there's no "channels" or anything. All senders should be able to send to any receiver, which will be selected in a GUI. The idea actually works a little differently but this is the easiest way to describe it :P

  • Quote

Share this post


Link to post
Share on other sites

TheGreyGhost    711

TheGreyGhost

TheGreyGhost    711

  • Reality Controller
  • TheGreyGhost
  • Members
  • 711
  • 2805 posts
Posted October 24, 2013

Hi

 

I suspect this might be a bit harder than it seems at first, because TileEntities are loaded in and out of memory as the player moves around.  Luckily, I reckon it's probably unnecessary to store this information in the TileEntities.

 

I think your best bet is to write some code which searches all the chunks within a certain radius of the player for Teleportation TileEntitys.  You would call this code when the user opens the "receiver selection" GUI.

 

-TGG

 

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14029 posts
Posted October 24, 2013

This is why...I feel like it was IC2, but it might've been an addon, had a "teleporter remote control" item.  You'd right click on one teleporter, then go to the second teleporter and right click again.  Now the second one could send to the first one.

 

(The item carried NBT data tags holding the relevant data!)

  • Quote

Share this post


Link to post
Share on other sites

hydroflame    208

hydroflame

hydroflame    208

  • World Shaper
  • hydroflame
  • Members
  • 208
  • 1511 posts
Posted October 24, 2013

you could technicly store EVERY location of that block in another place then in the "world" and in the "chunks"

 

obviously if you scale this in a List it wont be scalable so youll have to make some kind of spatial partitionning to keep search time lows...

 

just throwing ideas

  • Quote

Share this post


Link to post
Share on other sites

MineMaarten    48

MineMaarten

MineMaarten    48

  • Creeper Killer
  • MineMaarten
  • Members
  • 48
  • 169 posts
Posted October 25, 2013

If just getting a list of every loaded TileEntity in the world is enough for you, you can use the list in World:  world.loadedTileEntityList . And you could search for your own TileEntities in there.  However, teleportation often is about travelling far (and unloaded) distances so a loaded tile entity list probably doesn't suffice....

  • Quote

Share this post


Link to post
Share on other sites

Flenix    21

Flenix

Flenix    21

  • Diamond Finder
  • Flenix
  • Members
  • 21
  • 440 posts
Posted October 26, 2013

I've just thought; could I use something similar to how the enderchest works here?

 

I've not looked at the enderchest, but I could theoretically do a similar thing in the world NBT instead of the player one - with my "teleport locations" being the data stored instead of items, and the sender being the "physical chest" which can view those locations.

 

Am I on the right tracks with that? :P

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14029 posts
Posted October 26, 2013

You could.  Yes.

Whether or not its a good idea is the question though.

  • Quote

Share this post


Link to post
Share on other sites

TheGreyGhost    711

TheGreyGhost

TheGreyGhost    711

  • Reality Controller
  • TheGreyGhost
  • Members
  • 711
  • 2805 posts
Posted October 27, 2013

Hi

 

I think the EnderChest stores its information in the player, which is probably not what you want.

 

Although I've never used it, WorldInfo appears to have space for "additional properties":

WorldInfo.setAdditionalProperties

WorldInfo.getAdditionalProperties

 

You could perhaps store a list of all receivers in this property and make sure you keep it updated when the receivers are created and destroyed.  I'd suggest introducing some sort of game mechanic to keep the number of receivers under control otherwise your GUI for receiver selection will become unmanageable.

 

Best way to find out is to try it I reckon :-)

 

-TGG

  • Quote

Share this post


Link to post
Share on other sites

MineMaarten    48

MineMaarten

MineMaarten    48

  • Creeper Killer
  • MineMaarten
  • Members
  • 48
  • 169 posts
Posted October 27, 2013

This really makes me think of IC2's way to manage the powernet. When you want to add an IC2 machine to the powernet, you'll have to post an event when you load the TileEntity and a different event when the TileEntity gets unloaded or removed. Although IC2 is closed source, you could learn from their API :).

 

A bit of info you could use in your implementation, from IC2 API's usage.txt:

You can detect the loading by either using the 1st iteration of updateEntity() or by waiting for

the next world tick after TileEntity.validate(). The 2nd approach is obviously more sophisticated

and requires to use some tick queuing mechanism.

 

And about the unloading:

The event has to be posted as soon as the implementing tile entity is being unloaded, either by

unloading the containing chunk or by destroying the block containing it.

 

It's possible to detect the unloading by triggering on both the beginning of

TileEntity.invalidate() and the beginning of TileEntity.onChunkUnload().

The difference is they stop using the TileEntity when it's unloaded.

 

So they are using events, but that's with an API in mind, you could just add to a list and store it in WorldInfo like TheGreyGhost mentioned (I also never have used this).

 

Good luck!

  • Quote

Share this post


Link to post
Share on other sites

thebest108    0

thebest108

thebest108    0

  • Dragon Slayer
  • thebest108
  • Members
  • 0
  • 503 posts
Posted October 28, 2013

IC2 may be open source, but its not stopping me.

Get bearded octo nemesis and jdgui.

1st. Run bearded octo nemesis on ic2 (or any other mod)

2nd. Open your new file with jdgui

3rd. Click file-save all sources

4th. You now have a deobsfucated decompiled minecraft mod!

Have fun sirs!

  • Quote

Share this post


Link to post
Share on other sites

Flenix    21

Flenix

Flenix    21

  • Diamond Finder
  • Flenix
  • Members
  • 21
  • 440 posts
Posted October 28, 2013

Hi

 

I think the EnderChest stores its information in the player, which is probably not what you want.

 

Although I've never used it, WorldInfo appears to have space for "additional properties":

WorldInfo.setAdditionalProperties

WorldInfo.getAdditionalProperties

 

You could perhaps store a list of all receivers in this property and make sure you keep it updated when the receivers are created and destroyed.  I'd suggest introducing some sort of game mechanic to keep the number of receivers under control otherwise your GUI for receiver selection will become unmanageable.

 

Best way to find out is to try it I reckon :-)

 

-TGG

 

I'll look into that :) This is more of an admin thing anyway for setting up on a server/map. It's only going to be available in creative mode by default - I'll have a crafting recipe which can be enabled but it'll be endgame expensive even then.

 

It's for part of the mechanics of my Cities mod. What is actually happening is the receiver is the only "block" part of it, and will actually be hidden. The sender is really a mob, whom will teleport you to it after selecting your location and paying a fee with the built-in economy, as part of an airline fast-travel system I'm adding to the mod.

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14029 posts
Posted October 28, 2013

IC2 may be open source, but its not stopping me.

Get bearded octo nemesis and jdgui.

1st. Run bearded octo nemesis on ic2 (or any other mod)

2nd. Open your new file with jdgui

3rd. Click file-save all sources

4th. You now have a deobsfucated decompiled minecraft mod!

Have fun sirs!

 

JDGUI by itself is usually sufficient.  Most mods don't obfuscate themselves, so you're left with only the Minecraft obfuscated parameters, but most you can figure out just by the context, the rest you can lookup using MCP :)

 

I actually peeked inside Twilight Forest at the Anti-Builder to see if it had done anything special/clever to minimize get, save, check, and reset blocks (as I needed similar functionality).  It was just a standard 3 dimensional for loop.  I've also poked my nose into Mystcraft on occasion (notably when trying to figure out how to use XCompWiz's API, I'll get confused over the usage of one parameter, so I pull up base and take a look at how he was using it).

  • Quote

Share this post


Link to post
Share on other sites

Hirvio    0

Hirvio

Hirvio    0

  • Tree Puncher
  • Hirvio
  • Members
  • 0
  • 9 posts
Posted October 28, 2013

I'm gonna make a really stupid comment here. I don't fully yet understand how it works but wouldn't it be possible to make a static list and whenever a tileEntity is created it adds to the list and whenever it's gets destroyed it removes itself?

  • Quote

Share this post


Link to post
Share on other sites

TheGreyGhost    711

TheGreyGhost

TheGreyGhost    711

  • Reality Controller
  • TheGreyGhost
  • Members
  • 711
  • 2805 posts
Posted October 29, 2013

Hi

 

That idea would work, with the restriction that the information would be lost when you shut the server down.

Hence the suggestions for saving it somewhere permanent, like  WorldInfo.setAdditionalProperties or in a player's item.

There are other ways of course, for example saving/loading to your own configuration file somewhere.  Or you could search the entire world at startup to regenerate your static list.

 

-TGG

 

  • Quote

Share this post


Link to post
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

  • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 1
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • NoMercyPro
      Forge 1.12.2 Launcher Crash

      By NoMercyPro · Posted 1 minute ago

      Oh, I'm so sorry! I didn't know 9minecraft.net was a repost site. I won't use it anymore and I thank you for your help. A lot of people (including me) would be lost without you.
    • DavidM
      Forge server kicking players randomly, sometimes unable to join

      By DavidM · Posted 8 minutes ago

      Please post the server log of when someone got kicked.
    • DavidM
      pointing to MCP folder instead of MDK ???

      By DavidM · Posted 11 minutes ago

      No need to mess with MCP. Simply download the 1.14 mdk and copy the src from 1.12 to 1.14. Then fix all the mapping changes and other changes with your IDE.
    • DaemonUmbra
      pointing to MCP folder instead of MDK ???

      By DaemonUmbra · Posted 11 minutes ago

      At this time I have to say McJty's tutorial is the least bad. If you have an MCP folder you're doing something wrong because MCP is not longer really a thing
    • JMAS
      pointing to MCP folder instead of MDK ???

      By JMAS · Posted 19 minutes ago

      I'm updating code from 1.12.2 to 1.14.4 and learning the joys of trying to keep up with the changes.  If I was a master at JDK 7, then these adjustments would come much quicker.  But since I completed my first Java training series a week ago, I'm a bit to the noobier side.  I just solved the problem of trying to get 5 different pieces of software to cooperate after your push for me to abandon 1.7.10.  (Turns out that allowing IntelliJ to auto-update causes Gradle.build to cease functioning properly.)  Nobody helped with that one.  I figured it out by trial and error and dissecting the files until eliminating the problem. I have the MCP folder because a video tutorial recommended it.  If you have a better video tutorial series I'll happily watch it and learn accordingly. 
  • Topics

    • NoMercyPro
      3
      Forge 1.12.2 Launcher Crash

      By NoMercyPro
      Started 20 hours ago

    • Kull
      1
      Forge server kicking players randomly, sometimes unable to join

      By Kull
      Started 17 hours ago

    • JMAS
      8
      pointing to MCP folder instead of MDK ???

      By JMAS
      Started 2 hours ago

    • Professional Derp
      0
      Server frequently crashes

      By Professional Derp
      Started 31 minutes ago

    • lockedlol9
      5
      problema con el heap space

      By lockedlol9
      Started 1 hour ago

  • Who's Online (See full list)

    • geekles
    • NoMercyPro
    • Ronaldi2001
    • Frontear
    • DavidM
    • DaemonUmbra
    • Ormeo21
    • MarioAndWeegee3
    • Machinarose
    • ericgolde555
    • thevortex
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • What would be the best way to handle long-distance TileEntity information...
  • Theme
  • Contact Us
  • Discord

Copyright © 2019 ForgeDevelopment LLC · Ads by Curse Powered by Invision Community