MatrexsVigil / harvestcraft

All rights reserved - None of my artwork is available to be used for FREE in your game EVER. If you want to HIRE ME, please contact me. Thank you. This code is here for people to learn from and to help find bugs ONLY.
https://www.patreon.com/pamsmods
89 stars 85 forks source link

[Bug] The balance with harvestcraft foodstuff and vanilla breaks cow and sheep breeding. #197

Open Liberage opened 6 years ago

Liberage commented 6 years ago

If "B:enablevanillafoodBalance=<---->" in the config file is set to true, cows and sheep won't breed.

ghost commented 6 years ago

Need crash-report and latest log files.

Mxater commented 6 years ago

I have same problem, the game dont crash, and the log files dont show any error.

Mxater commented 6 years ago

I think you forgot hable the breeding to cows and sheep.

HarvestCraft 1.12.1b

Mxater commented 6 years ago

I find this, in main/java/com/harvestcraft/proxy/CommonProxy.java

public void postInit(FMLPostInitializationEvent e) {
             Set<Item> temptationItems = ObfuscationReflectionHelper.getPrivateValue(EntityPig.class, null, "TEMPTATION_ITEMS", "field_184764_bw");
            temptationItems.add(ItemRegistry.harvestcarrotItem);
        temptationItems.add(ItemRegistry.harvestpotatoItem);
        temptationItems.add(ItemRegistry.harvestbeetItem);
        for (ItemStack stack : OreDictionary.getOres("listAllveggie")) {
            temptationItems.add(stack.getItem());
        }
        Set<Item> temptationItems2 = ObfuscationReflectionHelper.getPrivateValue(EntityChicken.class, null, "TEMPTATION_ITEMS", "field_184761_bD");
        for (ItemStack stack : OreDictionary.getOres("listAllseed")) {
            temptationItems2.add(stack.getItem());
        }
    }

In this method, set only breed for Pig and Chicken.

And here

public void onBlocksAndItemsLoaded() {
        HarvestCraft.config.configureGardenDrops();

        RecipeRegistry.registerRecipes();
        SeedDropRegistry.getSeedDrops();

        MarketItems.registerItems();
        ShippingBinItems.registerItems();
        PacketHandler.init();

        GameRegistry.registerTileEntity(TileEntityApiary.class, "PamApiary");
        GameRegistry.registerTileEntity(TileEntityMarket.class, "PamMarket");
        GameRegistry.registerTileEntity(TileEntityShippingBin.class, "PamShippingbin");
        GameRegistry.registerTileEntity(TileEntityPresser.class, "PamPresser");
        GameRegistry.registerTileEntity(TileEntityGroundTrap.class, "PamGroundTrap");
        GameRegistry.registerTileEntity(TileEntityWaterTrap.class, "PamWaterTrap");
        GameRegistry.registerTileEntity(TileEntityWaterFilter.class, "PamWaterFilter");
        GameRegistry.registerTileEntity(TileEntityGrinder.class, "PamGrinder");

        if (ConfigHandler.enableHCFish)
        {
        MinecraftForge.EVENT_BUS.register(new LootTableLoadEventHandler());
        }

        RightClickHarvesting.instance.register();

        //MinecraftForge.EVENT_BUS.register(new AnimalBreedingEvent());

        GameRegistry.registerFuelHandler(new HarvestCraftFuelHandler());

    }

The line //MinecraftForge.EVENT_BUS.register(new AnimalBreedingEvent()); is commented, and here is where breed for cow and sheep is registered

public class AnimalBreedingEvent {

    @SubscribeEvent
    public void onInteraction(PlayerInteractEvent.EntityInteract event) {
        Set<Item> breedItems = OreDictionary.getOres("listAllgrain").stream().map(ItemStack::getItem).collect(Collectors.toSet());

        if (event.getEntity() instanceof EntityCow) {
            handleBreedItem((EntityCow) event.getEntity(), breedItems, event.getEntityPlayer(), event.getHand());
        } else if (event.getEntity() instanceof EntitySheep) {
            handleBreedItem((EntityCow) event.getEntity(), breedItems, event.getEntityPlayer(), event.getHand());
        }
    }

    private void handleBreedItem(EntityAnimal entity, Set<Item> breedItems, EntityPlayer player, EnumHand hand) {
        ItemStack itemstack = player.getHeldItem(hand);

        if (!itemstack.isEmpty())
        {
            int inLove = ReflectionHelper.getPrivateValue(EntityAnimal.class, entity, "inLove", "field_70881_d");
            if (breedItems.contains(itemstack.getItem()) && entity.getGrowingAge() == 0 && inLove <= 0)
            {
                itemstack.shrink(1);
                entity.setInLove(player);
            }

            if (entity.isChild() && entity.isBreedingItem(itemstack))
            {
                itemstack.shrink(1);
                entity.ageUp((int)((float)(-entity.getGrowingAge() / 20) * 0.1F), true);
            }
        }
    }
}