xchow Posted January 15, 2015 Posted January 15, 2015 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(; 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? Quote
Shnupbups100 Posted January 15, 2015 Posted January 15, 2015 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); Quote http://i.imgur.com/wEmXZn7.png[/img]
xchow Posted January 15, 2015 Author Posted January 15, 2015 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? Quote
Shnupbups100 Posted January 15, 2015 Posted January 15, 2015 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) Quote http://i.imgur.com/wEmXZn7.png[/img]
xchow Posted January 15, 2015 Author Posted January 15, 2015 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? Quote
coolAlias Posted January 15, 2015 Posted January 15, 2015 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. Quote http://i.imgur.com/NdrFdld.png[/img]
xchow Posted January 15, 2015 Author Posted January 15, 2015 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(; 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? Quote
coolAlias Posted January 15, 2015 Posted January 15, 2015 Your entity is a vanilla EntityVillager with a specific profession ID. So spawn a villager and set its profession. Quote http://i.imgur.com/NdrFdld.png[/img]
xchow Posted January 15, 2015 Author Posted January 15, 2015 Your entity is a vanilla EntityVillager with a specific profession ID. So spawn a villager and set its profession. Ik that I can spawn the villager but how do you spawn it at a preexisting village house in the code? Quote
Recommended Posts
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.