Code:
package com.github.darkly.rigmodresurrected.block;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.registries.ForgeRegistries;
import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class EntityBlock extends Block {
private final List<EntityType<?>> randomEntities;
public EntityBlock() {
super(AbstractBlock.Properties.create(Material.IRON).hardnessAndResistance(0.6F));
randomEntities = ForgeRegistries.ENTITIES.getValues().stream()
.filter(entityType -> entityType.getClassification() != EntityClassification.MISC)
.filter(entityType -> !isProjectileOrBoss(entityType))
.collect(Collectors.toList());
}
private boolean isProjectileOrBoss(EntityType<?> entityType) {
// Define your logic to identify projectiles and bosses
return entityType.equals(EntityType.ENDER_DRAGON) || entityType.equals(EntityType.WITHER);
}
@Nonnull
@Override
public ActionResultType onBlockActivated(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull PlayerEntity player, @Nonnull Hand hand, @Nonnull BlockRayTraceResult hit) {
if (!world.isRemote && !randomEntities.isEmpty()) {
int fortuneLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, player.getHeldItem(hand));
spawnRandomEntities(world, pos, fortuneLevel);
return ActionResultType.CONSUME;
}
return ActionResultType.SUCCESS;
}
private void spawnRandomEntities(World world, BlockPos pos, int fortuneLevel) {
Random random = new Random();
int numberOfEntities = 1 + random.nextInt(fortuneLevel + 1);
for (int i = 0; i < numberOfEntities; i++) {
EntityType<?> entityType = randomEntities.get(random.nextInt(randomEntities.size()));
if (entityType != null && entityType.create(world) != null) {
entityType.spawn((ServerWorld) world, null, null, pos.up(), SpawnReason.SPAWNER, true, false);
}
}
}
@Override
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
ItemStack tool = builder.get(LootParameters.TOOL);
if (tool != null && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) {
return Collections.singletonList(new ItemStack(this));
}
return super.getDrops(state, builder);
}
}
errors:
EntityBlock.java S problems
A Overrides deprecated method in 'net.minecraft.block.AbstractBlock' :48
A Not annotated method overrides method annotated with @MethodsReturnNonnullByDefault :69
A Overrides deprecated method in 'net.minecraft.block.AbstractBlock' :69
A Not annotated parameter overrides @ParametersAreNonnullByDefault parameter :69
A 'getDrops(net.minecraft.block.BlockState, net.minecraft.loot.LootContext.Builder)' is deprecated :74