package luckyblock.action.triggers; import luckyblock.action.LuckyActionHolder; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.entity.item.PrimedTnt; import net.minecraft.world.entity.monster.Creeper; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; public class SummonTrigger implements ILuckyTrigger { @Override public String getName() { return "summon"; } @Override public void execute(ServerLevel level, BlockPos pos, LuckyActionHolder holder, RandomSource random) { if (holder.items != null) { for (String itemId : holder.items) { if (itemId.equals("minecraft:tnt")) { for (int i = 0; i < holder.count; i++) { PrimedTnt tnt = new PrimedTnt(EntityType.TNT, level); double rx = pos.getX() + 0.5 + (random.nextDouble() - 0.5) * 4; double rz = pos.getZ() + 0.5 + (random.nextDouble() - 0.5) * 4; double ry = pos.getY() + holder.height; tnt.moveTo(rx, ry, rz, 0.0F, 0.0F); tnt.setFuse(holder.height > 0 ? 40 + random.nextInt(20) : 60 + random.nextInt(20)); level.addFreshEntity(tnt); } } else { Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation(itemId)); if (block != Blocks.AIR) { BlockState blockState = block.defaultBlockState(); for (int i = 0; i < holder.count; i++) { BlockPos spawnPos = pos.above(holder.height + i); FallingBlockEntity falling = FallingBlockEntity.fall(level, spawnPos, blockState); level.addFreshEntity(falling); } } } } } if (holder.mobs != null) { for (String mobId : holder.mobs) { EntityType entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(mobId)); if (entityType != null) { for (int i = 0; i < holder.count; i++) { BlockPos spawnPos = pos.above(holder.height > 0 ? holder.height : 1); var entity = entityType.spawn(level, spawnPos, MobSpawnType.COMMAND); if (entity instanceof Creeper creeper && holder.is_powered) { CompoundTag nbt = new CompoundTag(); creeper.saveWithoutId(nbt); nbt.putBoolean("powered", true); creeper.load(nbt); } } } } } } }