Jump to content

[1.12.2] extended class of FoodBase.java doesn't work


Mango106

Recommended Posts

I made a bowl food item called fruit_salad, but when eat it, it doesn't restore any hunger or saturation.

 

I have a class that i created to add food items to my mod called FoodBase.java (code for that file below)

 

package com.citrine.testmod.items.food;

import com.citrine.testmod.Main;
import com.citrine.testmod.init.ModItems;
import com.citrine.testmod.util.IHasModel;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemFood;

public class FoodBase extends ItemFood implements IHasModel
{
	public FoodBase(String name, int amount, float saturation, boolean isAnimalFood) 
	/*
	 * amount is shanks filled
	 * saturation is saturation
	 * isAnimalFood determines whether or not you can feed it to dogs
	 * */
	{
		super(amount, saturation, isAnimalFood);
		setUnlocalizedName(name);
		setRegistryName(name);
		setCreativeTab(CreativeTabs.FOOD);
		
		ModItems.ITEMS.add(this);
	}

	@Override
	public void registerModels() 
	{
		Main.proxy.registerItemRenderer(this, 0, "inventory");
	}
}

 

I use this class for adding normal food in my ModItems.java class in the init package. I wanted to add bowl items, that can only stack to one, and return a bowl to the player's inventory when eaten, so i made a new class that extends FoodBase called SoupBase.java (code below)

 

package com.citrine.testmod.items.food;

import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.items.ItemHandlerHelper;

public class SoupBase extends FoodBase
{
	private Item ReturnStack;
	
	public SoupBase(String name, int amount, float saturation, boolean isAnimalFood, Item item) 
	{
		super(name, amount, saturation, isAnimalFood);
		this.setMaxStackSize(1);
		this.ReturnStack = item;
	}
	
	public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase living) 
	{
		super.onFoodEaten(stack, world, (EntityPlayer)living);
		return new ItemStack(ReturnStack);
	}
}

 

Now that i did that, i added a new SoupBase item called fruit_salad in ModItems.java

 

public static final Item FRUIT_SALAD = new SoupBase("fruit_salad", 11, 6.6f, false, Items.BOWL);

 

Heres the full ModItems.java class:

 

package com.citrine.testmod.init;

import java.util.ArrayList;
import java.util.List;

import com.citrine.testmod.items.ItemBase;
import com.citrine.testmod.items.armor.ArmorBase;
import com.citrine.testmod.items.food.FoodBase;
import com.citrine.testmod.items.food.FoodEffectBase;
import com.citrine.testmod.items.food.SoupBase;
import com.citrine.testmod.items.tools.ToolAxe;
import com.citrine.testmod.items.tools.ToolHoe;
import com.citrine.testmod.items.tools.ToolPickaxe;
import com.citrine.testmod.items.tools.ToolSpade;
import com.citrine.testmod.items.tools.ToolSword;
import com.citrine.testmod.util.Reference;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.init.MobEffects;
import net.minecraft.init.SoundEvents;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraft.item.ItemAxe;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemPickaxe;
import net.minecraft.item.ItemSpade;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
import net.minecraftforge.common.util.EnumHelper;

public class ModItems 
{
	
	public static final List<Item> ITEMS = new ArrayList<Item>();
	
	//Materials
	public static final ToolMaterial MATERIAL_AQUAMARINE = EnumHelper.addToolMaterial("material_aquamarine", 3, 2124, 9.0f, 4.0f, 25);
	public static final ArmorMaterial ARMOR_MATERIAL_SUGILITE = EnumHelper.addArmorMaterial("armo r_material_sugilite", Reference.MOD_ID + ":sugilite", 15, new int[] {3, 7, 9, 4} , 10, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 0.0f);
	
	//add items
	public static final Item SUGILITE = new ItemBase("sugilite");
	public static final Item URANIUM = new ItemBase("uranium");
	public static final Item URANIUM_SUGILITE_FUSION = new ItemBase("uranium_sugilite_fusion");
	public static final Item AQUAMARINE = new ItemBase("aquamarine");
	
	//food
	//public static final Item BLUEBERRY = new FoodBase("blueberry", 3, 4.0f, false); (60*20 is one minute of ppotion effect)
	public static final Item BLUEBERRY = new FoodEffectBase ("blueberry", 3, 2.0f, false, new PotionEffect(MobEffects.SPEED, /*how long its lasts(3 seconds)*/(3*20),/*potion effect lvl*/ 2, /*whether or not it comes from a beacon*/false, /*shows whether or not particles are shown*/false));
	public static final Item POO = new FoodEffectBase ("poo", 3, 0.0f, false, new PotionEffect(MobEffects.HUNGER, (12*20), 100, false, true));
	public static final Item FISH_AND_CHIPS = new FoodBase("fish_and_chips", 10, 12.8f, false);
	public static final Item FRIED_EGG = new FoodBase("fried_egg", 5, 6, false);
	//public static final Item FRUIT_SALAD = new SoupBase("fruit_salad", 11, 6.6f, false), onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player);
	public static final Item FRUIT_SALAD = new SoupBase("fruit_salad", 11, 6.6f, false, Items.BOWL);
	
	//Tools
	public static final ItemSword AQUAMARINE_SWORD = new ToolSword("aquamarine_sword", MATERIAL_AQUAMARINE);
	public static final ItemSpade AQUAMARINE_SHOVEL = new ToolSpade("aquamarine_shovel", MATERIAL_AQUAMARINE);
	public static final ItemPickaxe AQUAMARINE_PICKAXE = new ToolPickaxe("aquamarine_pickaxe", MATERIAL_AQUAMARINE);
	public static final ItemAxe AQUAMARINE_AXE = new ToolAxe("aquamarine_axe", MATERIAL_AQUAMARINE);
	public static final ItemHoe AQUAMARINE_HOE = new ToolHoe("aquamarine_hoe", MATERIAL_AQUAMARINE);
	
	//armor
	public static final Item SUGILITE_HELMET = new ArmorBase("sugilite_helmet", ARMOR_MATERIAL_SUGILITE, 1, EntityEquipmentSlot.HEAD);
	public static final Item SUGILITE_CHESTPLATE = new ArmorBase("sugilite_chestplate", ARMOR_MATERIAL_SUGILITE, 1, EntityEquipmentSlot.CHEST);
	public static final Item SUGILITE_LEGGINGS = new ArmorBase("sugilite_leggings", ARMOR_MATERIAL_SUGILITE, 2, EntityEquipmentSlot.LEGS);
	public static final Item SUGILITE_BOOTS = new ArmorBase("sugilite_boots", ARMOR_MATERIAL_SUGILITE, 1, EntityEquipmentSlot.FEET);
}

 

When I run client and test out the mod, I can eat the fruit salad, it stacks to 1 like i wanted, and it returns a bowl when its eaten. The only problem is that no hunger or saturation is restored when i eat it, for some reason. I'm quite sure what i did wrong, but I think it has something to do with SoupBase.java, as I don't have this problem with the normal class that it extends from.

Does anyone know how to fix this?

Edited by Mango106
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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
    • Remove Instant Massive Structures Mod from your server     Add new crash-reports with sites like https://paste.ee/  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.