Jump to content

Recommended Posts

Posted

This thread is a continuation of my previous one but I felt a new thread would be better. I want to store all the items, recipes and other related stuff in a MySQL database for later use.

 

I'm storing the items' data in a table like so:

 

CREATE TABLE `items` (
  `unlocalized_name` varchar(192) NOT NULL,
  `sub_id` int(11) NOT NULL DEFAULT '0',
  `localized_name` varchar(256) DEFAULT NULL,
  `owning_mod` varchar(128) NOT NULL,
  PRIMARY KEY (`unlocalized_name`,`sub_id`),
  KEY `owning_mod_idx` (`owning_mod`),
  CONSTRAINT `owning_mod` FOREIGN KEY (`owning_mod`) REFERENCES `mods` (`mod`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

I plan on dropping the sub_id column once I get this issue sorted out. Some items in the game like records, mushrooms and pressure plates (stone and wood) have the same unlocalized name so I need to make custom ones.

 

In my mod's constructor I have this:

 

this.unlocalized_name_override = new HashMap<Object, String>();
this.unlocalized_name_override.put(Blocks.brown_mushroom, "tile.mushroom.brown");
this.unlocalized_name_override.put(Blocks.red_mushroom, "tile.mushroom.red");
this.unlocalized_name_override.put(Blocks.brown_mushroom_block, "tile.mushroomBlock.red");
this.unlocalized_name_override.put(Blocks.red_mushroom_block, "tile.mushroomBlock.red");

this.unlocalized_name_override.put(Blocks.stone_pressure_plate, "tile.pressurePlate.stone");
this.unlocalized_name_override.put(Blocks.wooden_pressure_plate, "tile.pressurePlate.wood");

this.unlocalized_name_override.put(Items.record_11, "item.record.11");
this.unlocalized_name_override.put(Items.record_13, "item.record.13");
this.unlocalized_name_override.put(Items.record_blocks, "item.record.blocks");
this.unlocalized_name_override.put(Items.record_cat, "item.record.cat");
this.unlocalized_name_override.put(Items.record_chirp, "item.record.chirp");
this.unlocalized_name_override.put(Items.record_far, "item.record.far");
this.unlocalized_name_override.put(Items.record_mall, "item.record.mall");
this.unlocalized_name_override.put(Items.record_mellohi, "item.record.mellohi");
this.unlocalized_name_override.put(Items.record_stal, "item.record.stal");
this.unlocalized_name_override.put(Items.record_strad, "item.record.strad");
this.unlocalized_name_override.put(Items.record_wait, "item.record.wait");
this.unlocalized_name_override.put(Items.record_ward, "item.record.ward");

 

When I run the '/dump' command through the chat this code is run:

 

ArrayList<ItemStack> items = new ArrayList<ItemStack>();

for (Object io : Item.itemRegistry)
{
    Item i = (Item)io;
    i.getSubItems(i, null, items);
}

ps = this.conn.prepareStatement("INSERT INTO items (`unlocalized_name`, `sub_id`, `localized_name`, `owning_mod`) VALUES (?, ?, ?, ?);");
for (ItemStack is : items)
{
    Item i = is.getItem();
    String unlocalized_name;
    String localized_name = is.getDisplayName();
    String mod_id = Util.getModId(is.getItem());

    if (this.unlocalized_name_override.containsKey(i))
        unlocalized_name = this.unlocalized_name_override.get(i);
    else
        unlocalized_name = i.getUnlocalizedName();

        ps.setString(1, unlocalized_name);
        ps.setInt(2, is.getItemDamage());
        ps.setString(3, localized_name);
        ps.setString(4, mod_id);
        ps.execute();
}
ps.close();

 

Now for the records, this works just fine:

 

SELECT unlocalized_name FROM mcrd.items WHERE unlocalized_name LIKE 'item.record%';

item.record.11
item.record.13
item.record.blocks
item.record.cat
item.record.chirp
item.record.far
item.record.mall
item.record.mellohi
item.record.stal
item.record.strad
item.record.wait
item.record.ward

 

But for mushrooms or pressure plates it doesn't work, no row with the unlocalized name of tile.mushroom.brown or tile.pressurePlate.stone exists. I suspect it has to do with the fact that the records are items while the pressure plates and mushrooms are blocks but I don't know what to do about it.

I like trains.

Posted

I figured out what I need to do. I need to wrap the Block bits with Item.getItemFromBlock:

 

        this.unlocalized_name_override.put(Item.getItemFromBlock(Blocks.brown_mushroom), "tile.mushroom.brown");
        this.unlocalized_name_override.put(Item.getItemFromBlock(Blocks.red_mushroom), "tile.mushroom.red");
        this.unlocalized_name_override.put(Item.getItemFromBlock(Blocks.brown_mushroom_block), "tile.mushroomBlock.brown");
        this.unlocalized_name_override.put(Item.getItemFromBlock(Blocks.red_mushroom_block), "tile.mushroomBlock.red");

I like trains.

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



×
×
  • Create New...

Important Information

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