Hello,
I've made a simple custom ItemEntity that can't catch on fire. Here's the code for it:
package zorochase.yanm.item;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class FireproofItemEntity extends ItemEntity {
public FireproofItemEntity(World worldIn, double x, double y, double z, ItemStack stack) {
super(worldIn, x, y, z, stack);
}
public FireproofItemEntity(EntityType<?> entityType, World world) {
super((EntityType<? extends ItemEntity>)entityType, world);
}
@Override
public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) {
if (!p_70097_1_.isFireDamage()) {
return super.attackEntityFrom(p_70097_1_, p_70097_2_);
}
return false;
}
}
Here's how it was registered (taken from my main mod class):
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEvents {
@SubscribeEvent
public static void onEntityRegistry(final RegistryEvent.Register<EntityType<?>> entityRegistryEvent) {
entityRegistryEvent.getRegistry().register(
EntityType.Builder
.create(FireproofItemEntity::new, EntityClassification.MISC)
.build(YetAnotherNetheriteMod.MODID + ":fireproof_item_entity")
.setRegistryName(YetAnotherNetheriteMod.MODID, "fireproof_item_entity")
);
}
}
I also have a FireproofItem class that I use for all items I want to be fireproof when dropped, here's its code:
package zorochase.yanm.item;
import net.minecraft.entity.Entity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import zorochase.yanm.YetAnotherNetheriteMod;
import javax.annotation.Nullable;
public class FireproofItem extends Item {
public FireproofItem(String registryName) {
super(new Item.Properties().group(YetAnotherNetheriteMod.MOD_TAB));
setRegistryName(YetAnotherNetheriteMod.MODID, registryName);
}
@Nullable
@Override
public Entity createEntity(World world, Entity location, ItemStack itemstack) {
FireproofItemEntity custom = new FireproofItemEntity(world, location.posX, location.posY, location.posZ, itemstack);
custom.setMotion(location.getMotion());
custom.setDefaultPickupDelay();
return custom;
}
@Override
public boolean hasCustomEntity(ItemStack stack) {
return true;
}
}
All of this works just fine, so long as I don't leave a FireproofItem on the ground before quitting the game/to the main menu. If I do, and I try to load the world again, it freezes on 100%.
I have no idea what could be causing this. Somebody else on these forums had the same issue a few months ago, but it seems they were also unable to figure it out. That or if they did
they never replied with their fix. Any help would really be appreciated, as this is a feature I'd really rather not leave out.