Jump to content

[1.7.10] Adding Custom Villager trades to a new Villager


xchow

Recommended Posts

Recently in my mod I started working on a new villager and after doing so I could not figure out to assign new trades to this villager.

 

Registering the villager

VillagerRegistry.instance().registerVillageTradeHandler(i, new TradeHandler());}

        VillagerRegistry.instance().registerVillagerId(8);

        VillagerRegistry.instance().registerVillagerSkin(8, new ResourceLocation("chow", "textures/dealer.png"));

        VillagerRegistry.instance().getRegisteredVillagers();

 

In my trade handler for vanilla villagers it goes off case 0 for instance being the farmer. I thought that it being case 8 would represent the id 8 for the custom villager but it still doesn't work. Could anyone help me out with this please?

Link to comment
Share on other sites

First, you'll need to make a new class that extends IVillageTradeHandler.

In the constructor, add ItemStacks of the items you want it to trade to an ArrayList, then in the manipulateTradesForVillager method, have it make sure the villager is yours by using villager.getProfession() and your villager ID, then in a for loop use recipeList.addToListWithCheck to add new instances of MerchantRecipe to your villager's trade list.

 

Then, in your mod's main class, register the trade handler with VillageRegistry.instance().registerVillagerTradeHandler(villagerId, instanceOfTradeHandler);

Link to comment
Share on other sites

First, you'll need to make a new class that extends IVillageTradeHandler.

In the constructor, add ItemStacks of the items you want it to trade to an ArrayList, then in the manipulateTradesForVillager method, have it make sure the villager is yours by using villager.getProfession() and your villager ID, then in a for loop use recipeList.addToListWithCheck to add new instances of MerchantRecipe to your villager's trade list.

 

Then, in your mod's main class, register the trade handler with VillageRegistry.instance().registerVillagerTradeHandler(villagerId, instanceOfTradeHandler);

 

Thanks it worked. do you know how to make it spawn default in the village?

Link to comment
Share on other sites

Thanks it worked. do you know how to make it spawn default in the village?

 

To spawn in the Village, as far as I know, you can only do it with a custom house. If you already have a custom house, override the getVillagerType method in your house's class and make it return the id of your villager. if you don't, I suggest you look at some open source mods that add villager houses to get a feel of how to do it. (TConstruct helped me get mine)

Link to comment
Share on other sites

 

To spawn in the Village, as far as I know, you can only do it with a custom house. If you already have a custom house, override the getVillagerType method in your house's class and make it return the id of your villager. if you don't, I suggest you look at some open source mods that add villager houses to get a feel of how to do it. (TConstruct helped me get mine)

 

Could I make it spawn in a premade village building for example the normal house?

Link to comment
Share on other sites

If you don't want to add a custom structure to the village, an alternate (and pretty hacky) way of doing it is to hitch a ride on the regular villagers using EntityJoinWorldEvent.

 

Check if the event.entity.getClass().isAssignableFrom(EntityVillager.class) to make sure you only target vanilla villagers (and not every subclass thereof), then you could cast to EntityVillager and make sure the profession was vanilla as well, if that's important to you.

 

Then, so you don't spawn with every single villager, do a rand check like "if (event.entity.worldObj.rand.nextFloat() < 0.1F)" for 1 of your villagers per 10 regular, on average, and spawn one in at the same location as the other villager.

Link to comment
Share on other sites

If you don't want to add a custom structure to the village, an alternate (and pretty hacky) way of doing it is to hitch a ride on the regular villagers using EntityJoinWorldEvent.

 

Check if the event.entity.getClass().isAssignableFrom(EntityVillager.class) to make sure you only target vanilla villagers (and not every subclass thereof), then you could cast to EntityVillager and make sure the profession was vanilla as well, if that's important to you.

 

Then, so you don't spawn with every single villager, do a rand check like "if (event.entity.worldObj.rand.nextFloat() < 0.1F)" for 1 of your villagers per 10 regular, on average, and spawn one in at the same location as the other villager.

 

Well there was no entity class in it.

 

            VillagerRegistry.instance().registerVillagerId(8);

        VillagerRegistry.instance().registerVillagerSkin(8, new ResourceLocation("ruffles", "textures/dealer.png"));

        VillagerRegistry.instance().registerVillageTradeHandler(8, new TradeHandler());

        VillagerRegistry.instance().getRegisteredVillagers();

 

That was all needed to make the villager. Is there a way I could make it just spawn randomly around the world ? or would that require a entity class?

 

Link to comment
Share on other sites

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.