package com.idtech.item;
import com.idtech.Utils;
import net.minecraft.core.BlockPos;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.item.FallingBlockEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.AirBlock;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.FallingBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.Vec3;
public class GravgunItem extends Item {
//static instance for registration
private static Properties properties = new Properties().tab(CreativeModeTab.TAB_MISC);
public static Item INSTANCE = new GravgunItem(properties).setRegistryName("gravity_gun");
public boolean holdingBlock = false;
public boolean using = false;
//constructor
public GravgunItem(Properties properties) {
super(properties);
}
@Override
public InteractionResultHolder<ItemStack> use(Level level, Player playerIn, InteractionHand handIn) {
ItemStack itemstack = playerIn.getItemInHand(handIn);
if(!using) {
if (!holdingBlock) {
BlockPos location = Utils.getBlockAtCursor(playerIn, 8d, true);
if (location != null) {
if (level.getBlockState(location).getBlock() == Blocks.MAGENTA_GLAZED_TERRACOTTA) {
level.setBlockAndUpdate(location, Blocks.AIR.defaultBlockState());
holdingBlock = true;
using=true;
System.out.println("on");
}
}
} else {
FallingBlockEntity thrownBlock = new FallingBlockEntity(level, playerIn.position().x(), playerIn.position().y() + 1, playerIn.position().z(), Blocks.MAGENTA_GLAZED_TERRACOTTA.defaultBlockState());
thrownBlock.setDeltaMovement(new Vec3(Math.sin(playerIn.getYRot() * (Math.PI / -180f)) * 0.5f, playerIn.getXRot() / -90f, Math.cos(playerIn.getYRot() * (Math.PI / -180f)) * 0.5f));
thrownBlock.time = 1;
level.addFreshEntity(thrownBlock);
holdingBlock = false;
using=true;
System.out.println("on");
}
}
return InteractionResultHolder.pass(itemstack);
}
/*@Override
public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) {
using = false;
System.out.println("off");
return this.isEdible() ? entity.eat(level, stack) : stack;
}*/
/*@Override
public void releaseUsing(ItemStack stack, Level level, LivingEntity entity, int n) {
using = false;
System.out.println("off");
}*/
}
So obviously I would only be using one of them at a time but not only do they not seem to be setting using to false, they definitely are not printing "out".