2016-01-05 04:47:35 +01:00
/ *
2016-05-16 22:52:27 +02:00
* This file ( " ItemCoffee.java " ) is part of the Actually Additions mod for Minecraft .
2016-01-05 04:47:35 +01:00
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
2016-05-16 22:52:27 +02:00
* http : //ellpeck.de/actaddlicense
2016-01-05 04:47:35 +01:00
* View the source code at https : //github.com/Ellpeck/ActuallyAdditions
*
2017-01-01 16:23:26 +01:00
* © 2015 - 2017 Ellpeck
2016-01-05 04:47:35 +01:00
* /
package de.ellpeck.actuallyadditions.mod.items ;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI ;
2016-05-14 13:51:18 +02:00
import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient ;
2018-05-10 11:38:58 +02:00
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions ;
2024-03-05 21:14:05 +01:00
import de.ellpeck.actuallyadditions.mod.crafting.CoffeeIngredientRecipe ;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase ;
import net.minecraft.ChatFormatting ;
2024-03-02 21:23:08 +01:00
import net.minecraft.client.resources.language.I18n ;
import net.minecraft.network.chat.Component ;
2024-03-05 21:14:05 +01:00
import net.minecraft.util.StringUtil ;
import net.minecraft.world.effect.MobEffectInstance ;
2024-03-02 21:23:08 +01:00
import net.minecraft.world.entity.LivingEntity ;
2024-03-05 21:14:05 +01:00
import net.minecraft.world.food.FoodProperties ;
2024-03-02 21:23:08 +01:00
import net.minecraft.world.item.ItemStack ;
import net.minecraft.world.item.TooltipFlag ;
2024-03-05 21:14:05 +01:00
import net.minecraft.world.item.UseAnim ;
2024-03-02 21:23:08 +01:00
import net.minecraft.world.item.crafting.Ingredient ;
2024-03-05 21:14:05 +01:00
import net.minecraft.world.item.crafting.RecipeHolder ;
2024-03-02 21:23:08 +01:00
import net.minecraft.world.item.enchantment.Enchantment ;
import net.minecraft.world.level.Level ;
2024-03-04 20:21:48 +01:00
import net.neoforged.api.distmarker.Dist ;
import net.neoforged.api.distmarker.OnlyIn ;
2016-01-05 04:47:35 +01:00
2021-02-26 22:15:48 +01:00
import javax.annotation.Nullable ;
import java.util.List ;
2024-03-15 02:47:12 +01:00
public class ItemCoffee extends ItemBase { //TODO: Do we want to change the saturation? Currently it's 5.0F which becomes 40 in game. That's a lot of saturation.
2024-03-05 21:14:05 +01:00
private static final FoodProperties FOOD = new FoodProperties . Builder ( ) . nutrition ( 8 ) . saturationMod ( 5 . 0F ) . alwaysEat ( ) . build ( ) ;
2016-01-05 04:47:35 +01:00
2021-03-01 21:23:52 +01:00
public ItemCoffee ( ) {
2024-03-05 21:14:05 +01:00
super ( ActuallyItems . defaultProps ( ) . food ( FOOD ) . durability ( 3 ) ) ;
2016-01-05 04:47:35 +01:00
}
2018-06-24 02:44:47 +02:00
@Nullable
2024-03-05 21:14:05 +01:00
public static RecipeHolder < CoffeeIngredientRecipe > getIngredientRecipeFromStack ( ItemStack stack ) {
for ( RecipeHolder < CoffeeIngredientRecipe > recipeHolder : ActuallyAdditionsAPI . COFFEE_MACHINE_INGREDIENTS ) {
if ( recipeHolder . value ( ) . getIngredient ( ) . test ( stack ) ) {
return recipeHolder ;
2021-02-26 22:15:48 +01:00
}
2016-01-05 04:47:35 +01:00
}
return null ;
}
2024-03-05 21:14:05 +01:00
public static void applyPotionEffectsFromStack ( ItemStack stack , LivingEntity player ) {
MobEffectInstance [ ] effects = ActuallyAdditionsAPI . methodHandler . getEffectsFromStack ( stack ) ;
2019-05-02 09:10:29 +02:00
if ( effects ! = null & & effects . length > 0 ) {
2024-03-05 21:14:05 +01:00
for ( MobEffectInstance effect : effects ) {
player . addEffect ( new MobEffectInstance ( effect . getEffect ( ) , effect . getDuration ( ) * 20 , effect . getAmplifier ( ) ) ) ;
2016-02-01 20:39:11 +01:00
}
}
}
2024-03-05 21:14:05 +01:00
@Override
public ItemStack finishUsingItem ( ItemStack stack , Level level , LivingEntity livingEntity ) {
2016-01-05 04:47:35 +01:00
ItemStack theStack = stack . copy ( ) ;
2024-03-05 21:14:05 +01:00
super . finishUsingItem ( stack , level , livingEntity ) ;
applyPotionEffectsFromStack ( stack , livingEntity ) ;
theStack . setDamageValue ( theStack . getDamageValue ( ) + 1 ) ;
if ( theStack . getMaxDamage ( ) - theStack . getDamageValue ( ) < 0 ) {
2024-03-15 02:40:07 +01:00
return new ItemStack ( ActuallyItems . EMPTY_CUP . get ( ) ) ;
2024-03-05 21:14:05 +01:00
} else {
return theStack ;
}
2016-01-05 04:47:35 +01:00
}
2024-03-05 21:14:05 +01:00
@Override
public UseAnim getUseAnimation ( ItemStack pStack ) {
return UseAnim . DRINK ;
}
2021-12-30 18:30:01 +01:00
@OnlyIn ( Dist . CLIENT )
2016-01-05 04:47:35 +01:00
@Override
2024-03-02 21:23:08 +01:00
public void appendHoverText ( ItemStack stack , @Nullable Level playerIn , List < Component > tooltip , TooltipFlag advanced ) {
2024-03-05 21:14:05 +01:00
MobEffectInstance [ ] effects = ActuallyAdditionsAPI . methodHandler . getEffectsFromStack ( stack ) ;
if ( effects ! = null ) {
for ( MobEffectInstance effect : effects ) {
tooltip . add ( Component . translatable ( effect . getDescriptionId ( ) )
2024-03-09 17:49:20 +01:00
. append ( " " + ( effect . getAmplifier ( ) + 1 ) + " , " + StringUtil . formatTickDuration ( effect . getDuration ( ) , 1 ) )
2024-03-05 21:14:05 +01:00
. withStyle ( ChatFormatting . GRAY ) ) ;
}
} else {
tooltip . add ( Component . translatable ( " tooltip. " + ActuallyAdditions . MODID + " .coffeeCup.noEffect " ) . withStyle ( ChatFormatting . GRAY ) ) ;
}
2016-01-05 04:47:35 +01:00
}
2021-02-26 22:15:48 +01:00
2019-11-09 21:02:42 +01:00
@Override
public boolean isEnchantable ( ItemStack stack ) {
return false ;
}
2021-02-26 22:15:48 +01:00
2019-11-09 21:02:42 +01:00
@Override
public boolean canApplyAtEnchantingTable ( ItemStack stack , Enchantment enchantment ) {
return false ;
}
2016-01-05 04:47:35 +01:00
2019-05-02 09:10:29 +02:00
public static class MilkIngredient extends CoffeeIngredient {
2016-01-05 04:47:35 +01:00
2019-05-02 09:10:29 +02:00
public MilkIngredient ( Ingredient ingredient ) {
2018-06-24 02:44:47 +02:00
super ( ingredient , 0 ) ;
2016-01-05 04:47:35 +01:00
}
@Override
2019-05-02 09:10:29 +02:00
public boolean effect ( ItemStack stack ) {
2021-11-14 00:20:29 +01:00
//PotionEffect[] effects = ActuallyAdditionsAPI.methodHandler.getEffectsFromStack(stack);
//ArrayList<PotionEffect> effectsNew = new ArrayList<>();
2019-05-02 09:10:29 +02:00
if ( effects ! = null & & effects . length > 0 ) {
2021-11-14 00:20:29 +01:00
/ * for ( PotionEffect effect : effects ) {
2019-05-02 09:10:29 +02:00
if ( effect . getAmplifier ( ) > 0 ) {
effectsNew . add ( new PotionEffect ( effect . getPotion ( ) , effect . getDuration ( ) + 120 , effect . getAmplifier ( ) - 1 ) ) ;
2016-01-05 04:47:35 +01:00
}
}
2021-02-26 22:15:48 +01:00
stack . setTagCompound ( new CompoundNBT ( ) ) ;
2019-05-02 09:10:29 +02:00
if ( effectsNew . size ( ) > 0 ) {
2016-01-05 04:47:35 +01:00
this . effects = effectsNew . toArray ( new PotionEffect [ effectsNew . size ( ) ] ) ;
2016-05-14 13:51:18 +02:00
ActuallyAdditionsAPI . methodHandler . addEffectToStack ( stack , this ) ;
2021-11-14 00:20:29 +01:00
} * /
2016-01-05 04:47:35 +01:00
}
this . effects = null ;
return true ;
}
@Override
2019-05-02 09:10:29 +02:00
public String getExtraText ( ) {
2024-03-05 21:14:05 +01:00
return I18n . get ( " jei. " + ActuallyAdditions . MODID + " .coffee.extra.milk " ) ;
2016-01-05 04:47:35 +01:00
}
}
2021-02-26 22:15:48 +01:00
}