RyanHub – file viewer
filename: common/src/main/java/rearth/oritech/item/other/MobCaptureItem.java
branch: 1.21
back to repo
package rearth.oritech.item.other;

import net.minecraft.client.gui.screen.Screen;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.tooltip.TooltipType;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Formatting;
import net.minecraft.util.Hand;
import rearth.oritech.init.ItemContent;

import java.util.List;

public class MobCaptureItem extends Item {
    
    public final List<EntityType<?>> targets;
    
    public MobCaptureItem(Settings settings, List<EntityType<?>> targets) {
        super(settings);
        this.targets = targets;
    }
    
    @Override
    public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) {
        
        var resultingItem = ItemContent.UNHOLY_INTELLIGENCE;
        
        for (var target : targets) {
            if (entity.getType().equals(target)) {
                stack.decrement(1);
                if (stack.isEmpty()) {
                    user.setStackInHand(hand, ItemStack.EMPTY);
                } else {
                    user.setStackInHand(hand, stack);
                }
                
                entity.kill();
                
                user.getWorld().spawnEntity(new ItemEntity(user.getWorld(), entity.getX(), entity.getY(), entity.getZ(), new ItemStack(resultingItem)));
                
                return ActionResult.CONSUME;
            }
        }
        
        return ActionResult.PASS;
    }
    
    @Override
    public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
        super.appendTooltip(stack, context, tooltip, type);
        
        var showExtra = Screen.hasControlDown();
        
        if (showExtra) {
            tooltip.add(Text.translatable("tooltip.oritech.capture_item_desc_1"));
            tooltip.add(Text.translatable("tooltip.oritech.capture_item_desc_2"));
            tooltip.add(Text.translatable("tooltip.oritech.capture_item_desc_3"));
        } else {
            tooltip.add(Text.translatable("tooltip.oritech.item_extra_info").formatted(Formatting.GRAY).formatted(Formatting.ITALIC));
        }
    }
}