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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello, I have this same problem. Did you manage to find a solution? Any help would be appreciated. Thanks.
    • log: https://mclo.gs/QJg3wYX as stated in the title, my game freezes upon loading into the server after i used a far-away waystone in it. The modpack i'm using is better minecraft V18. Issue only comes up in this specific server, singleplayer and other servers are A-okay. i've already experimented with removing possible culprits like modernfix and various others to no effect. i've also attempted a full reinstall of the modpack profile. Issue occurs shortly after the 'cancel' button dissapears on the 'loading world' section of the loading screen.   thanks in advance.
    • You would have better results asking a more specific question. What have you done? What exactly do you need help with? Please also read the FAQ regarding posting logs.
    • Hi, this is my second post with the same content as no one answered this and it's been a long time since I made the last post, I want to make a client-only mod, everything is ok, but when I use shaders, none of the textures rendered in RenderLevelStageEvent nor the crow entity model are rendered, I want them to be visible, because it's a horror themed mod I've already tried it with different shaders, but it didn't work with any of them and I really want to add support for shaders Here is how i render the crow model in the CrowEntityRenderer<CrowEntity>, by the time i use this method, i know is not the right method but i don't think this is the cause of the problem, the renderType i'm using is entityCutout @Override public void render(CrowEntity p_entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { super.render(p_entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); ClientEventHandler.getClient().crow.renderToBuffer(poseStack, bufferSource.getBuffer(ClientEventHandler.getClient().crow .renderType(TEXTURE)), packedLight, OverlayTexture.NO_OVERLAY, Utils.rgb(255, 255, 255)); } Here renderLevelStage @Override public void renderWorld(RenderLevelStageEvent e) { horrorEvents.draw(e); } Here is how i render every event public void draw(RenderLevelStageEvent e) { for (HorrorEvent event : currentHorrorEvents) { event.tick(e.getPartialTick()); event.draw(e); } } Here is how i render the crow model on the event @Override public void draw(RenderLevelStageEvent e) { if(e.getStage() == RenderLevelStageEvent.Stage.AFTER_ENTITIES) { float arcProgress = getArcProgress(0.25f); int alpha = (int) Mth.lerp(arcProgress, 0, 255); int packedLight = LevelRenderer.getLightColor(Minecraft.getInstance().level, blockPos); VertexConsumer builder = ClientEventHandler.bufferSource.getBuffer(crow); Crow<CreepyBirdHorrorEvent> model = ClientEventHandler .getClient().crow; model.setupAnim(this); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, packedLight, OverlayTexture.NO_OVERLAY, alpha); builder = ClientEventHandler.bufferSource.getBuffer(eyes); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, 15728880, OverlayTexture.NO_OVERLAY, alpha); } } How i render the model public static void renderModelInWorld(Model model, Vector3f pos, Vector3f offset, Camera camera, PoseStack matrix, VertexConsumer builder, int light, int overlay, int alpha) { matrix.pushPose(); Vec3 cameraPos = camera.getPosition(); double finalX = pos.x - cameraPos.x + offset.x; double finalY = pos.y - cameraPos.y + offset.y; double finalZ = pos.z - cameraPos.z + offset.z; matrix.pushPose(); matrix.translate(finalX, finalY, finalZ); matrix.mulPose(Axis.XP.rotationDegrees(180f)); model.renderToBuffer(matrix, builder, light, overlay, Utils .rgba(255, 255, 255, alpha)); matrix.popPose(); matrix.popPose(); } Thanks in advance
  • Topics

×
×
  • Create New...

Important Information

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