public static void modifyFoodValues() { for (FoodConfig foodCfg : foodValuesConfig) { switch (foodCfg.getName()) { case "minecraft:raw_fish": modifyFishFoodValue(FishType.COD, foodCfg, false); break; case "minecraft:cooked_fish": modifyFishFoodValue(FishType.COD, foodCfg, true); break; case "minecraft:raw_salmon": modifyFishFoodValue(FishType.SALMON, foodCfg, false); break; case "minecraft:cooked_salmon": modifyFishFoodValue(FishType.SALMON, foodCfg, true); break; default: Item item = Item.getByNameOrId(foodCfg.getName()); if (!(item instanceof ItemFood)) { logger.warn("The item '{}' is not a food item", foodCfg.getName()); continue; } ItemFood food = (ItemFood) item; ReflectionHelper.setPrivateValue(ItemFood.class, food, foodCfg.getValue(), 1); ReflectionHelper.setPrivateValue(ItemFood.class, food, foodCfg.getSaturation(), 2); break; } } }
@SubscribeEvent public void addWhiteFish(ItemFishedEvent event){ EntityFishHook hook = event.getHookEntity(); World world = hook.getEntityWorld(); Biome biome = world.getBiomeForCoordsBody(new BlockPos(hook)); boolean editedList = false; List<ItemStack> drops = Lists.newArrayList(); if(BiomeDictionary.hasType(biome, Type.COLD) || BiomeDictionary.hasType(biome, Type.SNOWY)){ for(ItemStack stack : event.getDrops()){ if(ItemStackTools.isValid(stack) && stack.getItem() == Items.FISH && stack.getMetadata() == FishType.COD.getMetadata()){ if(Config.whiteFishRarity > 0 && Util.rand.nextInt(Config.whiteFishRarity) == 0){ //Go ahead and replace with whitefish drops.add(new ItemStack(ModItems.miscFood, 1, FoodType.WHITE_FISH_RAW.getMetadata())); editedList = true; continue; } } drops.add(stack); } } if(editedList){ event.damageRodBy(1); for (ItemStack itemstack : drops) { EntityItem entityitem = new EntityItem(hook.world, hook.posX, hook.posY, hook.posZ, itemstack); double d0 = event.getEntityPlayer().posX - hook.posX; double d1 = event.getEntityPlayer().posY - hook.posY; double d2 = event.getEntityPlayer().posZ - hook.posZ; double d3 = (double)MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2); entityitem.motionX = d0 * 0.1D; entityitem.motionY = d1 * 0.1D + (double)MathHelper.sqrt(d3) * 0.08D; entityitem.motionZ = d2 * 0.1D; hook.world.spawnEntity(entityitem); event.getEntityPlayer().world.spawnEntity(new EntityXPOrb(event.getEntityPlayer().world, event.getEntityPlayer().posX, event.getEntityPlayer().posY + 0.5D, event.getEntityPlayer().posZ + 0.5D, Util.rand.nextInt(6) + 1)); Item item = itemstack.getItem(); if (item == Items.FISH || item == Items.COOKED_FISH) { event.getEntityPlayer().addStat(StatList.FISH_CAUGHT, 1); } } event.setCanceled(true); } }
private static void modifyFishFoodValue(FishType fishType, FoodConfig foodCfg, boolean cooked) { ReflectionHelper.setPrivateValue(FishType.class, fishType, foodCfg.getValue(), !cooked ? 7 : 9); ReflectionHelper.setPrivateValue(FishType.class, fishType, foodCfg.getSaturation(), !cooked ? 8 : 10); }