Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

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.

  • Author

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.