Spaces:
Build error
Build error
package net.minecraft.world.item; | |
import java.util.Optional; | |
import net.minecraft.core.BlockPos; | |
import net.minecraft.core.GlobalPos; | |
import net.minecraft.core.component.DataComponents; | |
import net.minecraft.network.chat.Component; | |
import net.minecraft.server.level.ServerLevel; | |
import net.minecraft.sounds.SoundEvents; | |
import net.minecraft.sounds.SoundSource; | |
import net.minecraft.world.InteractionResult; | |
import net.minecraft.world.entity.Entity; | |
import net.minecraft.world.entity.player.Player; | |
import net.minecraft.world.item.component.LodestoneTracker; | |
import net.minecraft.world.item.context.UseOnContext; | |
import net.minecraft.world.level.Level; | |
import net.minecraft.world.level.block.Blocks; | |
public class CompassItem extends Item { | |
private static final Component LODESTONE_COMPASS_NAME = Component.translatable("item.minecraft.lodestone_compass"); | |
public CompassItem(Item.Properties p_40718_) { | |
super(p_40718_); | |
} | |
public boolean isFoil(ItemStack p_40739_) { | |
return p_40739_.has(DataComponents.LODESTONE_TRACKER) || super.isFoil(p_40739_); | |
} | |
public void inventoryTick(ItemStack p_40720_, Level p_40721_, Entity p_40722_, int p_40723_, boolean p_40724_) { | |
if (p_40721_ instanceof ServerLevel serverlevel) { | |
LodestoneTracker lodestonetracker = p_40720_.get(DataComponents.LODESTONE_TRACKER); | |
if (lodestonetracker != null) { | |
LodestoneTracker lodestonetracker1 = lodestonetracker.tick(serverlevel); | |
if (lodestonetracker1 != lodestonetracker) { | |
p_40720_.set(DataComponents.LODESTONE_TRACKER, lodestonetracker1); | |
} | |
} | |
} | |
} | |
public InteractionResult useOn(UseOnContext p_40726_) { | |
BlockPos blockpos = p_40726_.getClickedPos(); | |
Level level = p_40726_.getLevel(); | |
if (!level.getBlockState(blockpos).is(Blocks.LODESTONE)) { | |
return super.useOn(p_40726_); | |
} else { | |
level.playSound(null, blockpos, SoundEvents.LODESTONE_COMPASS_LOCK, SoundSource.PLAYERS, 1.0F, 1.0F); | |
Player player = p_40726_.getPlayer(); | |
ItemStack itemstack = p_40726_.getItemInHand(); | |
boolean flag = !player.hasInfiniteMaterials() && itemstack.getCount() == 1; | |
LodestoneTracker lodestonetracker = new LodestoneTracker(Optional.of(GlobalPos.of(level.dimension(), blockpos)), true); | |
if (flag) { | |
itemstack.set(DataComponents.LODESTONE_TRACKER, lodestonetracker); | |
} else { | |
ItemStack itemstack1 = itemstack.transmuteCopy(Items.COMPASS, 1); | |
itemstack.consume(1, player); | |
itemstack1.set(DataComponents.LODESTONE_TRACKER, lodestonetracker); | |
if (!player.getInventory().add(itemstack1)) { | |
player.drop(itemstack1, false); | |
} | |
} | |
return InteractionResult.SUCCESS; | |
} | |
} | |
public Component getName(ItemStack p_368976_) { | |
return p_368976_.has(DataComponents.LODESTONE_TRACKER) ? LODESTONE_COMPASS_NAME : super.getName(p_368976_); | |
} | |
} |