Jump to content

Paradox

Members
  • Posts

    23
  • Joined

  • Last visited

Posts posted by Paradox

  1. So it looks like you want to read and export custom block IDs rather than setting them. Then you can hack the viewer to read in a data file (e.g. XML or JSON) that associates each non-vanilla ID with a meaningful RGB value to display on the map.

     

    If exporting IDs is troublesome, then just hack the viewer to assign a "random" RGB value to each non-vanilla block ID that it discovers. The colors won't correspond to in-game terrain color, but at least they can be unique.

     

    What kinds of blocks are we talking about, and what scale is the map? For many custom blocks, mapping is irrelevant because they're singleton devices that would only show at the finest detail level, or they're ore deep underground where they're never mapped etc. For most maps, only the common surface blocks matter (water, ice, grass, sand, stone and leaves).

     

    Well my mod spawn structures in the surface of my world using custom blocks. I wanted this structures to rendered in a map viewer so I could have browser viewing support for my world. I managed to find the block IDs of my blocks and with a little testing I saw that blocks IDs are not changing if you create world. I guess the only gonna change if you install another mod, which is fine by me because I am not planning to do that. With the help of the map viewer's author I managed to add them and make them render as they supposed. So, I guess my problem solved, thanks everyone for your help :)

  2. If you load your World with the same set of mods as the last time you loaded it, the Block IDs will probably be the same as the last time. I don't see any harm in trying it out in a 3rd party piece of software, since it sounds like it is not actually interacting with Minecraft while it is running.

     

    However, there is no guarantee that the block IDs for that world will match a new world, even with the exact same mods.

     

    Well, I dont need the block IDs to be the same to a new world. I just need to know if once a world created the IDs will be the same in this world all time. And there is not a chance IDs will be changed some time randomly.

  3. If something is using fixed IDs that something is broken and needs to be fixed. Don't try to hack around the fact that IDs are dynamic, you will just cause yourself and others a lot of harm.

     

    Well, it is a map viewer written in C++. You pass a world save as input and you get an webpage with your map. It only supports vanilla blocks that's why I think it uses ID and not be broken. Are the custom block are the all the time for a world? Because if this is true I could just use the IDs for that world and render only this world.

  4. Everything is possible, but that doesn't mean it will work. Any outside ID manipulation will backfire hard on you.

    IDs are handled internally and are PER WORLD. Some cusomBlock can have different IDs in different worlds.

     

    Why do you need it?

     

    Oh I see. I need to "hack" a map viewer so it can render my blocks as well. The thing is that this map viewer uses block's IDs in order to render them. So, I cant have fixed IDs for my blocks no matter the world? And if I need to know what are my mod's block IDs are for a specific world where can I find them.

  5. Hello everyone,

     

    while I was searching on the internet on how to set id of a custom block I read that since 1.7 version you cant set the ID anymore and all this is handled internally. Although, I really need to have fixed IDs for my blocks, is there any way to set a fixed ID?

  6. Mods are loaded into Minecraft, not external map viewers, so I don't think we can help you. However, if you find the right viewer, then you may be able to add pixel colors for custom block IDs. Look for a viewer that is customizable. If you can't find one, then start writing to the viewers' authors (or poke around in the viewers' files looking for a config file or xml file to edit).

     

    Good luck.

     

    Hello,

    thanks for your answer. I was trying to find a view map that by default renders custom blocks so I can avoid messing with any code by myself. That would be my last choice. :)

  7. Is it possible to pack an extrenal jar with your mods jar the end user doesnt have to download 2 jar files?

    I use mysql-connector's jar file because my mod connects to a database. I finally got it to work on my windows machine by adding the mysql jar and my mod's jar in the mods folder. But when I am trying the same on a linux operating system the server crashes. Is there any fix for this?

  8. I only store an integer which is the ID of the last block builded in the world, then when a player log in to the world I will compare the locally stored ID value with the value of the latest block there is in the database and they are not the same I will spawn the remaing block than need to be spawned.

    Thank you everyone for help :)

     

    Keep in mind that IDs for modded block/items are automatically assigned and will likely be different for every world, they're not a very reliable way to store persistent data.

     

    Registry names are a much more reliable identifier for blocks/items.

    RegistryNamespaced#getNameForObject

    can be called on

    Block.blockRegistry

    or

    Item.itemRegistry

    to get the registry name of a

    Block

    /

    Item

    respectively.

    I dont mean blocks IDs. By ID I mean a row in my database name ID :)

     

    in the dedicated server every player are in only one world. The one that the server hosting. In singleplayer this is not the case, every single player has a different world hosted by his integrated server.

    Yes, there are many singleplayer worlds active because every player playing has their own integrated server.

    But it's not like there is only one dedicated server out there? :o There are many servers active as well...

     

    Oh I see your point. I was thinking that my database only would accessed by my server, but if another server administrator wants my mod to his server then I got more worlds accessing my database. You are totally right. Thank you very much for pointing this out. :)

  9. I still do not see how this is an issue of server vs. Singleplayer. A singleplayer game runs one world at a time (with multiple dimensions). A server also runs one world at a time (with multiple dimensions).

    There is not much difference between playing singleplayer and playing on a dedicated server, it is merely that in singleplayer the server runs on your own computer.

    Hello,

    in the dedicated server every player are in only one world. The one that the server hosting. In singleplayer this is not the case, every single player has a different world hosted by his integrated server.

     

    Thanks for answer.

     

    Question 3 is very important, so i will try to explain it to you:

    When you explore a world, new chunks are generated. When you exit the world, they are stored. When you load world back up, it loads chunks from drive, but it does not generate them.

    So, question 3 is asking: if one day you change your database, and add coordinates that for "the given player" are in already generated chunk (chunk stored on drive), do you want to place (from code) blocks you just added in this chunk?

     

    I want the blocks to be spawned in the world no matter what. I am using world.setBlock() to spawn the blocks and I got no problem with blocks spawning or dissapearing after a player exits the world. The only problem I got was how I could sync the new coordinates added to my table with the world since I cant know where the last block was builded. I searched over the internet and saw that I can save custom data with the WorldSavedData but I cant impement it.

     

    Thanks for taking the time to try helping me :)

    Ok. That clarifies a lot of things.

     

    I suppose that you already have a class that connects to your database and reads blocks.

     

    Now, you have 3 things to do:

    1) Considering you are in 1.7.10, create BlockPos (holding x, y, z), read and write to nbt methods and with your IDE generate

    hashCode

    and

    equals

    methods.

    2) Create your WorldSavedData class, following tutorial, including

    get(World)

    method to get data instance. You can use

    perMapStorage

    , I suppose you already have one. In there, add

    Set<BlockPos>

    field. This set will hold all blocks that were already generated. To save and load

    Set

    to/from nbt, use NBTTagList.

    3) Use world generator and chunk load events to generate blocks.

     

    Do first 2 steps, and try to do 3rd yourself. If you have any problems, ask them here, we will help.

     

    EDIT: Official

    WorldSavedData

    tutorial: https://mcforge.readthedocs.org/en/latest/datastorage/worldsaveddata/.

     

    Thanks for your answer,

    I just finished tryint to figured our how WorldSavedData works and I did :)

    I only store an integer which is the ID of the last block builded in the world, then when a player log in to the world I will compare the locally stored ID value with the value of the latest block there is in the database and they are not the same I will spawn the remaing block than need to be spawned.

    Thank you everyone for help :)

  10. Thanks for answer.

     

    Question 3 is very important, so i will try to explain it to you:

    When you explore a world, new chunks are generated. When you exit the world, they are stored. When you load world back up, it loads chunks from drive, but it does not generate them.

    So, question 3 is asking: if one day you change your database, and add coordinates that for "the given player" are in already generated chunk (chunk stored on drive), do you want to place (from code) blocks you just added in this chunk?

     

    I want the blocks to be spawned in the world no matter what. I am using world.setBlock() to spawn the blocks and I got no problem with blocks spawning or dissapearing after a player exits the world. The only problem I got was how I could sync the new coordinates added to my table with the world since I cant know where the last block was builded. I searched over the internet and saw that I can save custom data with the WorldSavedData but I cant impement it.

     

    Thanks for taking the time to try helping me :)

  11. Well guys, I figured something out. I need to store an integer that will hold the ID value of the last block builded on the world. Then I will query my database and fetch the coordinates past the stored ID and then updated with the latest value. I am searching over the internet and I found I can use WorldSavedData to achieve that but I really dont know how to do it. Can anyone guide me through it. This is my class:

    
    public class BlockIDWorldData extends WorldSavedData{
    
    private final static String ident = "LatestBlockIDWorldData";
    public int blockID ;
    
    public BlockIDWorldData() {
    	super(ident);
    
    }
    
    @Override
    public void readFromNBT(NBTTagCompound p_76184_1_) {
    
    }
    
    @Override
    public void writeToNBT(NBTTagCompound p_76187_1_) {
    
    }
    
    }
    

  12. I will repeate questions that have already been asked. Please answer all of them precisely and we will be able to help you:

    -You want to generate blocks in worlds from remote database, right?

    -Database can be changed by you at any time?

    -Blocks, should they be generated in already generated chunks?

    -How many dimensions do you want to affect (only overworld, all vanilla or you can configure for any dimension from database)?

     

    If you do not understand a question please ask us to say it in different way.

     

    Hello,

    I will happily answer all the questions the best I can.

     

    -You want to generate blocks in worlds from remote database, right?

      Yes, I got a remote MySQL database that holds coordinates of Blocks. This is the structure of my table:

     

      ID  |  posX  |  posY  |  posX

     

      posX, posY and posZ is the block should be in the world.

     

    -Database can be changed by you at any time?

      Yes. I got a script running that affects the table I mention above. It is not changing the table, it is just adds more and more coordinates to the database.

     

    -Blocks, should they be generated in already generated chunks?

      Well, I am not sure I understand this question.

     

    -How many dimensions do you want to affect (only overworld, all vanilla or you can configure for any dimension from database)?

      The only dimension I want to affect is the overworld.

  13. It is not the same. In a deticated server you have only one world to spawn the blocks and then the server do its job and send this world to the connected clients. But if the players play singlepalyer their worlds will be random. My problem is that I couldnt sync (Spawn all the blocks that need to be spawned) my db with all these different worlds.

     

    Is there any way to store an integer for every world a player creates?

  14. Forget about the Dedicated Server. I 've gotten off topic to discuss how I can make my mod work on singleplayer too.

     

    Lets take the case I wanted my mod to work on single player worlds. 2 players download my mod and the start playing and by their first log in I spawn all the blocks available in the db. After that I got a thousand more blocks to my db and I need them spawned to both players world as well. In this point I could not possible know where the last block was builded so I am not able to identify where the new entries of block should start.

     

    Sorry for confusing you guys. This is an academic project and I am neither Java veteran or very experienced in Minecraft moding.

  15. Yeah I understand. It is kinda hard to explain. So, I got a database table with 3 fields that are X,Y and Z. This are coordinates of a block and I got plenty of entries, each entrie represent the position the block should have in the world, and by time I add more and more entries so there are more blocks represented by the coordinates. I want to spawn these blocks to the signleplayer worlds, but I couldnt be sure which are the worlds that blocks need to be spawned. My idea was to check every entrie with observe if they are spawned in the world. But with 10000 entries that would be extremely inefficient.

     

    By executing my code (that spawns the blocks) only my multiplayer server will solve the problem because there is only one world to worry about.

     

    I hope I explained better this time.

  16. Thanks diesieben07 I tested and this is what I was looking for. :)

    I dont want to work single player because I couldnt be sure in which singleplayer worlds the blocks are spawned or need to be spawned. The number of blocks that my database will have is not fixed. So I want to spawn the blocks on the world of the singleplayer clients and if there is new blocks I need to add them too. The only way I can think of doing this is too check if there is a block placed in every block's coordinates I have in my database. But if I got 10.000 (thousand) blocks I think this wouldnt be efficient at all, it may cause lag etc.

     

    I would really appreciate if anyone got any ideas to offer. :)

  17. Well, the main Idea is to mine block coordinates out of a database and then spawn them to my servers's world. I need though work only if the player is connected to my server. I want to avoid single player worlds spawning the blocks. If I use world.isRemote and use setBlock here will only work on server? Will it spawn the block to client side? And when a player use it in singleplayer wont get any blocks spawned?

×
×
  • Create New...

Important Information

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