package net.minecraft.world.item; import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.boss.enderdragon.EndCrystal; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.dimension.end.EndDragonFight; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.AABB; public class EndCrystalItem extends Item { public EndCrystalItem(Item.Properties properties) { super(properties); } @Override public InteractionResult useOn(UseOnContext context) { Level level = context.getLevel(); BlockPos blockPos = context.getClickedPos(); BlockState blockState = level.getBlockState(blockPos); if (!blockState.is(Blocks.OBSIDIAN) && !blockState.is(Blocks.BEDROCK)) { return InteractionResult.FAIL; } else { BlockPos blockPos2 = blockPos.above(); if (!level.isEmptyBlock(blockPos2)) { return InteractionResult.FAIL; } else { double d = blockPos2.getX(); double e = blockPos2.getY(); double f = blockPos2.getZ(); List list = level.getEntities(null, new AABB(d, e, f, d + 1.0, e + 2.0, f + 1.0)); if (!list.isEmpty()) { return InteractionResult.FAIL; } else { if (level instanceof ServerLevel) { EndCrystal endCrystal = new EndCrystal(level, d + 0.5, e, f + 0.5); endCrystal.setShowBottom(false); level.addFreshEntity(endCrystal); level.gameEvent(context.getPlayer(), GameEvent.ENTITY_PLACE, blockPos2); EndDragonFight endDragonFight = ((ServerLevel)level).getDragonFight(); if (endDragonFight != null) { endDragonFight.tryRespawn(); } } context.getItemInHand().shrink(1); return InteractionResult.SUCCESS; } } } } }