Flenix Posted October 24, 2013 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 Quote http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
TheGreyGhost Posted October 24, 2013 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
Draco18s Posted October 24, 2013 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 Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
hydroflame Posted October 24, 2013 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 how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
MineMaarten Posted October 25, 2013 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 Author of PneumaticCraft, MineChess, Minesweeper Mod and Sokoban Mod. Visit www.minemaarten.com to take a look at them.
Flenix Posted October 26, 2013 Author 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? Quote http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
Draco18s Posted October 26, 2013 Posted October 26, 2013 You could. Yes. Whether or not its a good idea is the question though. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
TheGreyGhost Posted October 27, 2013 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
MineMaarten Posted October 27, 2013 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 Author of PneumaticCraft, MineChess, Minesweeper Mod and Sokoban Mod. Visit www.minemaarten.com to take a look at them.
thebest108 Posted October 28, 2013 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 "you seem to be THE best modder I've seen imo." ~spynathan ლ(́◉◞౪◟◉‵ლ
Flenix Posted October 28, 2013 Author 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 http://s13.postimg.org/z9mlly2av/siglogo.png[/img] My mods (Links coming soon) Cities | Roads | Remula | SilvaniaMod | MoreStats
Draco18s Posted October 28, 2013 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 Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
Hirvio Posted October 28, 2013 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
TheGreyGhost Posted October 29, 2013 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
Recommended Posts
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.